diff --git a/app/composer.lock b/app/composer.lock index 4fd524c33..4e8627a32 100644 --- a/app/composer.lock +++ b/app/composer.lock @@ -197,16 +197,16 @@ }, { "name": "cakephp/chronos", - "version": "3.3.1", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/cakephp/chronos.git", - "reference": "1e417fdd4a3c6602b6c4634cf54aa9b065127fa2" + "reference": "e6e777b534244911566face8a5dbdbd7f7bda5a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/1e417fdd4a3c6602b6c4634cf54aa9b065127fa2", - "reference": "1e417fdd4a3c6602b6c4634cf54aa9b065127fa2", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/e6e777b534244911566face8a5dbdbd7f7bda5a6", + "reference": "e6e777b534244911566face8a5dbdbd7f7bda5a6", "shasum": "" }, "require": { @@ -218,7 +218,7 @@ }, "require-dev": { "cakephp/cakephp-codesniffer": "^5.0", - "phpunit/phpunit": "^10.5.58 || ^11.1.3" + "phpunit/phpunit": "^10.5.58 || ^11.5.3 || ^12.1.3" }, "type": "library", "autoload": { @@ -252,7 +252,7 @@ "issues": "https://github.com/cakephp/chronos/issues", "source": "https://github.com/cakephp/chronos" }, - "time": "2025-10-30T13:08:23+00:00" + "time": "2026-04-10T02:50:39+00:00" }, { "name": "cakephp/migrations", @@ -318,16 +318,16 @@ }, { "name": "cakephp/plugin-installer", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/cakephp/plugin-installer.git", - "reference": "5420701fd47d82fe81805ebee34fbbcef34c52ba" + "reference": "40bfecb4565ab29cd8c34b0d02d0007d2d5ebd2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/5420701fd47d82fe81805ebee34fbbcef34c52ba", - "reference": "5420701fd47d82fe81805ebee34fbbcef34c52ba", + "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/40bfecb4565ab29cd8c34b0d02d0007d2d5ebd2b", + "reference": "40bfecb4565ab29cd8c34b0d02d0007d2d5ebd2b", "shasum": "" }, "require": { @@ -337,7 +337,7 @@ "require-dev": { "cakephp/cakephp-codesniffer": "^5.0", "composer/composer": "^2.0", - "phpunit/phpunit": "^10.1.0" + "phpunit/phpunit": "^10.1.0 || ^11.1.3 || ^12.0 || ^13.0" }, "type": "composer-plugin", "extra": { @@ -358,25 +358,25 @@ "homepage": "https://cakephp.org" } ], - "description": "A composer installer for CakePHP 3.0+ plugins.", + "description": "A composer installer for CakePHP plugins.", "support": { "issues": "https://github.com/cakephp/plugin-installer/issues", - "source": "https://github.com/cakephp/plugin-installer/tree/2.0.1" + "source": "https://github.com/cakephp/plugin-installer/tree/2.0.2" }, - "time": "2023-09-10T10:02:44+00:00" + "time": "2026-04-10T02:55:04+00:00" }, { "name": "composer/ca-bundle", - "version": "1.5.10", + "version": "1.5.11", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63" + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/68ff39175e8e94a4bb1d259407ce51a6a60f09e6", + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6", "shasum": "" }, "require": { @@ -423,7 +423,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.10" + "source": "https://github.com/composer/ca-bundle/tree/1.5.11" }, "funding": [ { @@ -435,7 +435,7 @@ "type": "github" } ], - "time": "2025-12-08T15:06:51+00:00" + "time": "2026-03-30T09:16:10+00:00" }, { "name": "doctrine/dbal", @@ -929,20 +929,20 @@ }, { "name": "league/uri", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "4436c6ec8d458e4244448b069cc572d088230b76" + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", - "reference": "4436c6ec8d458e4244448b069cc572d088230b76", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.8", + "league/uri-interfaces": "^7.8.1", "php": "^8.1", "psr/http-factory": "^1" }, @@ -1015,7 +1015,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.8.0" + "source": "https://github.com/thephpleague/uri/tree/7.8.1" }, "funding": [ { @@ -1023,20 +1023,20 @@ "type": "github" } ], - "time": "2026-01-14T17:24:56+00:00" + "time": "2026-03-15T20:22:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", - "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", "shasum": "" }, "require": { @@ -1099,7 +1099,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" }, "funding": [ { @@ -1107,7 +1107,7 @@ "type": "github" } ], - "time": "2026-01-15T06:54:53+00:00" + "time": "2026-03-08T20:05:35+00:00" }, { "name": "masterminds/html5", @@ -1766,16 +1766,16 @@ }, { "name": "robmorgan/phinx", - "version": "0.16.10", + "version": "0.16.11", "source": { "type": "git", "url": "https://github.com/cakephp/phinx.git", - "reference": "83f83ec105e55e3abba7acc23c0272b5fcf66929" + "reference": "a03014fea316ba021fc0776982e5bed2d10228d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/phinx/zipball/83f83ec105e55e3abba7acc23c0272b5fcf66929", - "reference": "83f83ec105e55e3abba7acc23c0272b5fcf66929", + "url": "https://api.github.com/repos/cakephp/phinx/zipball/a03014fea316ba021fc0776982e5bed2d10228d4", + "reference": "a03014fea316ba021fc0776982e5bed2d10228d4", "shasum": "" }, "require": { @@ -1783,16 +1783,16 @@ "composer-runtime-api": "^2.0", "php-64bit": ">=8.1", "psr/container": "^1.1|^2.0", - "symfony/config": "^4.0|^5.0|^6.0|^7.0", - "symfony/console": "^6.0|^7.0" + "symfony/config": "^4.0|^5.0|^6.0|^7.0|^8.0", + "symfony/console": "^6.0|^7.0|^8.0" }, "require-dev": { "cakephp/cakephp-codesniffer": "^5.0", "cakephp/i18n": "^5.0", "ext-json": "*", "ext-pdo": "*", - "phpunit/phpunit": "^9.5.19", - "symfony/yaml": "^4.0|^5.0|^6.0|^7.0" + "phpunit/phpunit": "^10.5", + "symfony/yaml": "^4.0|^5.0|^6.0|^7.0|^8.0" }, "suggest": { "ext-json": "Install if using JSON configuration format", @@ -1847,22 +1847,22 @@ ], "support": { "issues": "https://github.com/cakephp/phinx/issues", - "source": "https://github.com/cakephp/phinx/tree/0.16.10" + "source": "https://github.com/cakephp/phinx/tree/0.16.11" }, - "time": "2025-07-08T18:55:28+00:00" + "time": "2026-03-15T00:04:32+00:00" }, { "name": "symfony/config", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6c17162555bfb58957a55bb0e43e00035b6ae3d5" + "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6c17162555bfb58957a55bb0e43e00035b6ae3d5", - "reference": "6c17162555bfb58957a55bb0e43e00035b6ae3d5", + "url": "https://api.github.com/repos/symfony/config/zipball/2d19dde43fa2ff720b9a40763ace7226594f503b", + "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b", "shasum": "" }, "require": { @@ -1908,7 +1908,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.4.7" + "source": "https://github.com/symfony/config/tree/v7.4.8" }, "funding": [ { @@ -1928,20 +1928,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T10:41:14+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/console", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d" + "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d", + "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", "shasum": "" }, "require": { @@ -2006,7 +2006,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.7" + "source": "https://github.com/symfony/console/tree/v7.4.8" }, "funding": [ { @@ -2026,7 +2026,7 @@ "type": "tidelift" } ], - "time": "2026-03-06T14:06:20+00:00" + "time": "2026-03-30T13:54:39+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2097,16 +2097,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" + "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5", + "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5", "shasum": "" }, "require": { @@ -2143,7 +2143,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.6" + "source": "https://github.com/symfony/filesystem/tree/v7.4.8" }, "funding": [ { @@ -2163,20 +2163,20 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "e4df2abd9391ce3263baa1aea9e993f6da74a3c7" + "reference": "9a79c53c4bf0a8a7b0d3d917fe03eda605ea6438" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/e4df2abd9391ce3263baa1aea9e993f6da74a3c7", - "reference": "e4df2abd9391ce3263baa1aea9e993f6da74a3c7", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/9a79c53c4bf0a8a7b0d3d917fe03eda605ea6438", + "reference": "9a79c53c4bf0a8a7b0d3d917fe03eda605ea6438", "shasum": "" }, "require": { @@ -2217,7 +2217,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.4.7" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.4.8" }, "funding": [ { @@ -2237,20 +2237,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T13:15:18+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -2300,7 +2300,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.34.0" }, "funding": [ { @@ -2320,20 +2320,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -2382,7 +2382,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.34.0" }, "funding": [ { @@ -2402,11 +2402,11 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -2467,7 +2467,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.34.0" }, "funding": [ { @@ -2491,16 +2491,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -2552,7 +2552,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.34.0" }, "funding": [ { @@ -2572,7 +2572,7 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/service-contracts", @@ -2663,16 +2663,16 @@ }, { "name": "symfony/string", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" + "reference": "114ac57257d75df748eda23dd003878080b8e688" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", + "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", + "reference": "114ac57257d75df748eda23dd003878080b8e688", "shasum": "" }, "require": { @@ -2730,7 +2730,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.6" + "source": "https://github.com/symfony/string/tree/v7.4.8" }, "funding": [ { @@ -2750,7 +2750,7 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-24T13:12:05+00:00" } ], "packages-dev": [ @@ -2954,16 +2954,16 @@ }, { "name": "cakephp/bake", - "version": "3.6.2", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/cakephp/bake.git", - "reference": "40a6208109a6d3922fb10c0446a00b50c1b098f6" + "reference": "4fde09a37425acfaf1af279a3831a8e3ae652a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/bake/zipball/40a6208109a6d3922fb10c0446a00b50c1b098f6", - "reference": "40a6208109a6d3922fb10c0446a00b50c1b098f6", + "url": "https://api.github.com/repos/cakephp/bake/zipball/4fde09a37425acfaf1af279a3831a8e3ae652a1d", + "reference": "4fde09a37425acfaf1af279a3831a8e3ae652a1d", "shasum": "" }, "require": { @@ -3007,7 +3007,7 @@ "issues": "https://github.com/cakephp/bake/issues", "source": "https://github.com/cakephp/bake" }, - "time": "2026-02-13T12:33:29+00:00" + "time": "2026-03-21T01:01:42+00:00" }, { "name": "cakephp/cakephp-codesniffer", @@ -3258,16 +3258,16 @@ }, { "name": "composer/class-map-generator", - "version": "1.7.1", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1" + "reference": "6a9c2f0970022ab00dc58c07d0685dd712f2231b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8f5fa3cc214230e71f54924bd0197a3bcc705eb1", - "reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/6a9c2f0970022ab00dc58c07d0685dd712f2231b", + "reference": "6a9c2f0970022ab00dc58c07d0685dd712f2231b", "shasum": "" }, "require": { @@ -3311,7 +3311,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.7.1" + "source": "https://github.com/composer/class-map-generator/tree/1.7.2" }, "funding": [ { @@ -3323,7 +3323,7 @@ "type": "github" } ], - "time": "2025-12-29T13:15:25+00:00" + "time": "2026-03-30T15:36:56+00:00" }, { "name": "composer/composer", @@ -3665,24 +3665,24 @@ }, { "name": "composer/spdx-licenses", - "version": "1.5.9", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f" + "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/edf364cefe8c43501e21e88110aac10b284c3c9f", - "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/5ecd0cb4177696f9fd48f1605dda81db3dee7889", + "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" + "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0" }, "type": "library", "extra": { @@ -3725,7 +3725,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.9" + "source": "https://github.com/composer/spdx-licenses/tree/1.6.0" }, "funding": [ { @@ -3735,13 +3735,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2025-05-12T21:07:07+00:00" + "time": "2026-04-08T20:18:39+00:00" }, { "name": "composer/xdebug-handler", @@ -3962,20 +3958,19 @@ }, { "name": "jane-php/json-schema-runtime", - "version": "v7.10.4", + "version": "v7.11.1", "source": { "type": "git", "url": "https://github.com/janephp/json-schema-runtime.git", - "reference": "f1f96868836e7b9cfa45eb40d3afcd989f079a3a" + "reference": "447cba025ca2c9272daa9395668832d02ed60926" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/janephp/json-schema-runtime/zipball/f1f96868836e7b9cfa45eb40d3afcd989f079a3a", - "reference": "f1f96868836e7b9cfa45eb40d3afcd989f079a3a", + "url": "https://api.github.com/repos/janephp/json-schema-runtime/zipball/447cba025ca2c9272daa9395668832d02ed60926", + "reference": "447cba025ca2c9272daa9395668832d02ed60926", "shasum": "" }, "require": { - "ext-json": "*", "league/uri": "^6.7.2 || ^7.4", "php": "^8.1", "php-jsonpointer/php-jsonpointer": "^3.0 || ^4.0", @@ -4018,22 +4013,22 @@ ], "description": "Jane runtime Library", "support": { - "source": "https://github.com/janephp/json-schema-runtime/tree/v7.10.4" + "source": "https://github.com/janephp/json-schema-runtime/tree/v7.11.1" }, - "time": "2026-01-12T19:55:34+00:00" + "time": "2026-03-26T17:01:00+00:00" }, { "name": "jane-php/open-api-runtime", - "version": "v7.10.4", + "version": "v7.11.1", "source": { "type": "git", "url": "https://github.com/janephp/open-api-runtime.git", - "reference": "825670a6cbd0e2b8246af0c1b15ce4b986318942" + "reference": "2afe544405a61d4254baf0bc99c299b4dffdf51e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/janephp/open-api-runtime/zipball/825670a6cbd0e2b8246af0c1b15ce4b986318942", - "reference": "825670a6cbd0e2b8246af0c1b15ce4b986318942", + "url": "https://api.github.com/repos/janephp/open-api-runtime/zipball/2afe544405a61d4254baf0bc99c299b4dffdf51e", + "reference": "2afe544405a61d4254baf0bc99c299b4dffdf51e", "shasum": "" }, "require": { @@ -4081,9 +4076,9 @@ ], "description": "Jane OpenAPI Runtime Library, dependencies and utility class for a library generated by jane/openapi", "support": { - "source": "https://github.com/janephp/open-api-runtime/tree/v7.10.4" + "source": "https://github.com/janephp/open-api-runtime/tree/v7.11.1" }, - "time": "2026-01-12T19:55:34+00:00" + "time": "2026-03-26T13:31:24+00:00" }, { "name": "jasny/twig-extensions", @@ -4210,16 +4205,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "v6.7.2", + "version": "6.8.0", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0" + "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/6fea66c7204683af437864e7c4e7abf383d14bc0", - "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", + "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", "shasum": "" }, "require": { @@ -4279,9 +4274,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/v6.7.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.8.0" }, - "time": "2026-02-15T15:06:22+00:00" + "time": "2026-04-02T12:43:11+00:00" }, { "name": "m1/env", @@ -5278,16 +5273,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "12.5.3", + "version": "12.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d" + "reference": "a25bde1f8f83849f441ef5713c6466e470872a71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b015312f28dd75b75d3422ca37dff2cd1a565e8d", - "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/a25bde1f8f83849f441ef5713c6466e470872a71", + "reference": "a25bde1f8f83849f441ef5713c6466e470872a71", "shasum": "" }, "require": { @@ -5296,7 +5291,6 @@ "ext-xmlwriter": "*", "nikic/php-parser": "^5.7.0", "php": ">=8.3", - "phpunit/php-file-iterator": "^6.0", "phpunit/php-text-template": "^5.0", "sebastian/complexity": "^5.0", "sebastian/environment": "^8.0.3", @@ -5343,7 +5337,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.3" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.5" }, "funding": [ { @@ -5363,7 +5357,7 @@ "type": "tidelift" } ], - "time": "2026-02-06T06:01:44+00:00" + "time": "2026-04-13T04:53:32+00:00" }, { "name": "phpunit/php-file-iterator", @@ -5624,16 +5618,16 @@ }, { "name": "phpunit/phpunit", - "version": "12.5.14", + "version": "12.5.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "47283cfd98d553edcb1353591f4e255dc1bb61f0" + "reference": "92f7744ca5f5701c9e4b4a60d9e143f2d84956da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/47283cfd98d553edcb1353591f4e255dc1bb61f0", - "reference": "47283cfd98d553edcb1353591f4e255dc1bb61f0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/92f7744ca5f5701c9e4b4a60d9e143f2d84956da", + "reference": "92f7744ca5f5701c9e4b4a60d9e143f2d84956da", "shasum": "" }, "require": { @@ -5647,15 +5641,15 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.3", + "phpunit/php-code-coverage": "^12.5.5", "phpunit/php-file-iterator": "^6.0.1", "phpunit/php-invoker": "^6.0.0", "phpunit/php-text-template": "^5.0.0", "phpunit/php-timer": "^8.0.0", "sebastian/cli-parser": "^4.2.0", - "sebastian/comparator": "^7.1.4", + "sebastian/comparator": "^7.1.5", "sebastian/diff": "^7.0.0", - "sebastian/environment": "^8.0.3", + "sebastian/environment": "^8.0.4", "sebastian/exporter": "^7.0.2", "sebastian/global-state": "^8.0.2", "sebastian/object-enumerator": "^7.0.0", @@ -5702,44 +5696,28 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.14" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.19" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2026-02-18T12:38:40+00:00" + "time": "2026-04-13T05:38:19+00:00" }, { "name": "psy/psysh", - "version": "v0.12.21", + "version": "v0.12.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "4821fab5b7cd8c49a673a9fd5754dc9162bb9e97" + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4821fab5b7cd8c49a673a9fd5754dc9162bb9e97", - "reference": "4821fab5b7cd8c49a673a9fd5754dc9162bb9e97", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f", "shasum": "" }, "require": { @@ -5803,9 +5781,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.21" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.22" }, - "time": "2026-03-06T21:21:28+00:00" + "time": "2026-03-22T23:03:24+00:00" }, { "name": "react/promise", @@ -5951,16 +5929,16 @@ }, { "name": "sebastian/comparator", - "version": "7.1.4", + "version": "7.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a7de5df2e094f9a80b40a522391a7e6022df5f6" + "reference": "c284f55811f43d555e51e8e5c166ac40d3e33c63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a7de5df2e094f9a80b40a522391a7e6022df5f6", - "reference": "6a7de5df2e094f9a80b40a522391a7e6022df5f6", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c284f55811f43d555e51e8e5c166ac40d3e33c63", + "reference": "c284f55811f43d555e51e8e5c166ac40d3e33c63", "shasum": "" }, "require": { @@ -6019,7 +5997,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.4" + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.5" }, "funding": [ { @@ -6039,7 +6017,7 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:28:48+00:00" + "time": "2026-04-08T04:43:00+00:00" }, { "name": "sebastian/complexity", @@ -6168,16 +6146,16 @@ }, { "name": "sebastian/environment", - "version": "8.0.3", + "version": "8.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68" + "reference": "7b8842c2d8e85d0c3a5831236bf5869af6ab2a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68", - "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/7b8842c2d8e85d0c3a5831236bf5869af6ab2a11", + "reference": "7b8842c2d8e85d0c3a5831236bf5869af6ab2a11", "shasum": "" }, "require": { @@ -6220,7 +6198,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/8.0.3" + "source": "https://github.com/sebastianbergmann/environment/tree/8.0.4" }, "funding": [ { @@ -6240,7 +6218,7 @@ "type": "tidelift" } ], - "time": "2025-08-12T14:11:56+00:00" + "time": "2026-03-15T07:05:40+00:00" }, { "name": "sebastian/exporter", @@ -6952,16 +6930,16 @@ }, { "name": "slevomat/coding-standard", - "version": "8.28.0", + "version": "8.28.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "0cd4b30cc1037eca54091c188d260d570e61770c" + "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/0cd4b30cc1037eca54091c188d260d570e61770c", - "reference": "0cd4b30cc1037eca54091c188d260d570e61770c", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/66151cfbd25b50e8becd9f809fb704f01fd4d6f2", + "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2", "shasum": "" }, "require": { @@ -6973,7 +6951,7 @@ "require-dev": { "phing/phing": "3.0.1|3.1.2", "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.40", + "phpstan/phpstan": "2.1.42", "phpstan/phpstan-deprecation-rules": "2.0.4", "phpstan/phpstan-phpunit": "2.0.16", "phpstan/phpstan-strict-rules": "2.0.10", @@ -7001,7 +6979,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.28.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.28.1" }, "funding": [ { @@ -7013,7 +6991,7 @@ "type": "tidelift" } ], - "time": "2026-02-23T21:35:24+00:00" + "time": "2026-03-22T17:22:38+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -7148,16 +7126,16 @@ }, { "name": "symfony/finder", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf" + "reference": "e0be088d22278583a82da281886e8c3592fbf149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", "shasum": "" }, "require": { @@ -7192,7 +7170,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.6" + "source": "https://github.com/symfony/finder/tree/v7.4.8" }, "funding": [ { @@ -7212,20 +7190,20 @@ "type": "tidelift" } ], - "time": "2026-01-29T09:40:50+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/http-client", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "1010624285470eb60e88ed10035102c75b4ea6af" + "reference": "01933e626c3de76bea1e22641e205e78f6a34342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/1010624285470eb60e88ed10035102c75b4ea6af", - "reference": "1010624285470eb60e88ed10035102c75b4ea6af", + "url": "https://api.github.com/repos/symfony/http-client/zipball/01933e626c3de76bea1e22641e205e78f6a34342", + "reference": "01933e626c3de76bea1e22641e205e78f6a34342", "shasum": "" }, "require": { @@ -7293,7 +7271,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.4.7" + "source": "https://github.com/symfony/http-client/tree/v7.4.8" }, "funding": [ { @@ -7313,7 +7291,7 @@ "type": "tidelift" } ], - "time": "2026-03-05T11:16:58+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/http-client-contracts", @@ -7395,16 +7373,16 @@ }, { "name": "symfony/options-resolver", - "version": "v7.4.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b38026df55197f9e39a44f3215788edf83187b80" + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", - "reference": "b38026df55197f9e39a44f3215788edf83187b80", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", "shasum": "" }, "require": { @@ -7442,7 +7420,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" }, "funding": [ { @@ -7462,11 +7440,11 @@ "type": "tidelift" } ], - "time": "2025-11-12T15:39:26+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -7522,7 +7500,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.34.0" }, "funding": [ { @@ -7546,16 +7524,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -7606,7 +7584,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.34.0" }, "funding": [ { @@ -7626,11 +7604,11 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -7686,7 +7664,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.34.0" }, "funding": [ { @@ -7710,16 +7688,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", "shasum": "" }, "require": { @@ -7766,7 +7744,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.34.0" }, "funding": [ { @@ -7786,20 +7764,20 @@ "type": "tidelift" } ], - "time": "2025-07-08T02:45:35+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -7846,7 +7824,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.34.0" }, "funding": [ { @@ -7866,20 +7844,20 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { "name": "symfony/process", - "version": "v7.4.5", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "608476f4604102976d687c483ac63a79ba18cc97" + "reference": "60f19cd3badc8de688421e21e4305eba50f8089a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", - "reference": "608476f4604102976d687c483ac63a79ba18cc97", + "url": "https://api.github.com/repos/symfony/process/zipball/60f19cd3badc8de688421e21e4305eba50f8089a", + "reference": "60f19cd3badc8de688421e21e4305eba50f8089a", "shasum": "" }, "require": { @@ -7911,7 +7889,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.5" + "source": "https://github.com/symfony/process/tree/v7.4.8" }, "funding": [ { @@ -7931,20 +7909,20 @@ "type": "tidelift" } ], - "time": "2026-01-26T15:07:59+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/serializer", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "bd395bbc6fabd136a48e1a6f91b09f88b5050b0b" + "reference": "006fd51717addf2df2bd1a64dafef6b7fab6b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/bd395bbc6fabd136a48e1a6f91b09f88b5050b0b", - "reference": "bd395bbc6fabd136a48e1a6f91b09f88b5050b0b", + "url": "https://api.github.com/repos/symfony/serializer/zipball/006fd51717addf2df2bd1a64dafef6b7fab6b455", + "reference": "006fd51717addf2df2bd1a64dafef6b7fab6b455", "shasum": "" }, "require": { @@ -8015,7 +7993,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.4.7" + "source": "https://github.com/symfony/serializer/tree/v7.4.8" }, "funding": [ { @@ -8035,7 +8013,7 @@ "type": "tidelift" } ], - "time": "2026-03-06T13:15:18+00:00" + "time": "2026-03-30T21:34:42+00:00" }, { "name": "symfony/translation-contracts", @@ -8121,16 +8099,16 @@ }, { "name": "symfony/validator", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "3a1a460a9f8c5e5611e15c52c4baa5a62fa3c203" + "reference": "8f73cbddae916756f319b3e195088da216f0f12f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/3a1a460a9f8c5e5611e15c52c4baa5a62fa3c203", - "reference": "3a1a460a9f8c5e5611e15c52c4baa5a62fa3c203", + "url": "https://api.github.com/repos/symfony/validator/zipball/8f73cbddae916756f319b3e195088da216f0f12f", + "reference": "8f73cbddae916756f319b3e195088da216f0f12f", "shasum": "" }, "require": { @@ -8201,7 +8179,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.4.7" + "source": "https://github.com/symfony/validator/tree/v7.4.8" }, "funding": [ { @@ -8221,20 +8199,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T11:10:17+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291" + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", "shasum": "" }, "require": { @@ -8288,7 +8266,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" }, "funding": [ { @@ -8308,20 +8286,20 @@ "type": "tidelift" } ], - "time": "2026-02-15T10:53:20+00:00" + "time": "2026-03-30T13:44:50+00:00" }, { "name": "symfony/yaml", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "58751048de17bae71c5aa0d13cb19d79bca26391" + "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/58751048de17bae71c5aa0d13cb19d79bca26391", - "reference": "58751048de17bae71c5aa0d13cb19d79bca26391", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c58fdf7b3d6c2995368264c49e4e8b05bcff2883", + "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883", "shasum": "" }, "require": { @@ -8364,7 +8342,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.6" + "source": "https://github.com/symfony/yaml/tree/v7.4.8" }, "funding": [ { @@ -8384,7 +8362,7 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "testcontainers/testcontainers", @@ -8499,16 +8477,16 @@ }, { "name": "twig/markdown-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/markdown-extra.git", - "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2" + "reference": "67a11120356e034a5bbc70c5b9b9a4d0f31ca06e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/faf069b259e2d3930c73c2f53e2dec8440bd90a2", - "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/67a11120356e034a5bbc70c5b9b9a4d0f31ca06e", + "reference": "67a11120356e034a5bbc70c5b9b9a4d0f31ca06e", "shasum": "" }, "require": { @@ -8555,7 +8533,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/markdown-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/markdown-extra/tree/v3.24.0" }, "funding": [ { @@ -8567,20 +8545,20 @@ "type": "tidelift" } ], - "time": "2025-12-02T14:45:16+00:00" + "time": "2026-02-07T08:07:38+00:00" }, { "name": "twig/twig", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9" + "reference": "a6769aefb305efef849dc25c9fd1653358c148f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", - "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6769aefb305efef849dc25c9fd1653358c148f0", + "reference": "a6769aefb305efef849dc25c9fd1653358c148f0", "shasum": "" }, "require": { @@ -8590,7 +8568,8 @@ "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpstan/phpstan": "^2.0", + "php-cs-fixer/shim": "^3.0@stable", + "phpstan/phpstan": "^2.0@stable", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -8634,7 +8613,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.23.0" + "source": "https://github.com/twigphp/Twig/tree/v3.24.0" }, "funding": [ { @@ -8646,7 +8625,7 @@ "type": "tidelift" } ], - "time": "2026-01-23T21:00:41+00:00" + "time": "2026-03-17T21:31:11+00:00" } ], "aliases": [], @@ -8662,6 +8641,6 @@ "ext-json": "*", "ext-mbstring": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.9.0" } diff --git a/app/vendor/beluga-php/docker-php-api/.github/FUNDING.yml b/app/vendor/beluga-php/docker-php-api/.github/FUNDING.yml new file mode 100644 index 000000000..0afe225a7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: flavioheleno diff --git a/app/vendor/beluga-php/docker-php-api/.github/dependabot.yml b/app/vendor/beluga-php/docker-php-api/.github/dependabot.yml new file mode 100644 index 000000000..e5fae30f4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + # Maintain dependencies for PHP Packages + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "daily" diff --git a/app/vendor/beluga-php/docker-php-api/.gitignore b/app/vendor/beluga-php/docker-php-api/.gitignore new file mode 100644 index 000000000..b98b4400c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/.gitignore @@ -0,0 +1,3 @@ +vendor/ +composer.lock +/.php-cs-fixer.cache diff --git a/app/vendor/beluga-php/docker-php-api/.jane-openapi b/app/vendor/beluga-php/docker-php-api/.jane-openapi new file mode 100644 index 000000000..85e86f264 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/.jane-openapi @@ -0,0 +1,11 @@ + true, + 'directory' => __DIR__ . '/src', + 'namespace' => 'Docker\\API', + 'openapi-file' => __DIR__ . '/spec/v1.45.json', + 'reference' => true, + 'strict' => false, + 'date-input-format' => 'Y-m-d\TH:i:s.uuP', +]; diff --git a/app/vendor/beluga-php/docker-php-api/.php-cs-fixer.php b/app/vendor/beluga-php/docker-php-api/.php-cs-fixer.php new file mode 100644 index 000000000..6e0b4608e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/.php-cs-fixer.php @@ -0,0 +1,44 @@ +in([ + __DIR__.'/src', + ]); + +$config = new \PhpCsFixer\Config(); +return $config + ->setRules([ + '@Symfony' => true, + '@Symfony:risky' => true, + '@PHP56Migration:risky' => true, + '@PHP70Migration' => true, + '@PHP70Migration:risky' => true, + '@PHP71Migration' => true, + '@PHP71Migration:risky' => true, + '@PHP73Migration' => true, + '@PHP74Migration' => true, + '@PHP74Migration:risky' => true, + '@PHP80Migration' => true, + '@PHP80Migration:risky' => true, + 'array_syntax' => [ + 'syntax' => 'short' + ], + 'align_multiline_comment' => true, + 'combine_consecutive_unsets' => true, + 'declare_strict_types' => true, + 'linebreak_after_opening_tag' => true, + 'modernize_types_casting' => true, + 'native_function_invocation' => true, + 'no_php4_constructor' => true, + 'ordered_imports' => true, + 'php_unit_strict' => true, + 'phpdoc_line_span' => true, + 'phpdoc_order' => true, + 'strict_comparison' => true, + 'strict_param' => true, + ]) + ->setRiskyAllowed(true) + ->setIndent(' ') + ->setLineEnding("\n") + ->setFinder($finder) +; diff --git a/app/vendor/beluga-php/docker-php-api/LICENSE b/app/vendor/beluga-php/docker-php-api/LICENSE new file mode 100644 index 000000000..77be66a0b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 Joel Wurtz and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/app/vendor/beluga-php/docker-php-api/README.md b/app/vendor/beluga-php/docker-php-api/README.md new file mode 100644 index 000000000..35ec10f1a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/README.md @@ -0,0 +1,27 @@ +# Docker PHP Api + +Generated API Client from OpenAPI specification of [Docker](https://www.docker.com/), by [Jane](https://github.com/janephp/janephp) OpenAPI Client generator. + +## Usage + +You should not use this library directly, please use the [docker-php](https://github.com/docker-php/docker-php) one instead. + +## Versioning + +This library does *not* respect semver and will instead follow Jane OpenAPI version and Docker API version: + + * First number is the Jane major version used for generating the files + * Second and third number are the Docker API Version + * Last number is the minor revision number for this + +So 4.1.25.0 is the version 1.25 of Docker API generated with Jane OpenAPI in a 4.X version. + +You should always fix the version, or at least the 3 first numbers (4.1.25.\*) + +## Credits + +This library is a fork of the original [docker-php-api](https://github.com/docker-php/docker-php-api), created by [Joel Wurtz](https://github.com/joelwurtz). + +## License + +The MIT License (MIT). Please see [License File](LICENSE) for more information. diff --git a/app/vendor/beluga-php/docker-php-api/composer.json b/app/vendor/beluga-php/docker-php-api/composer.json new file mode 100644 index 000000000..0635e9ed0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/composer.json @@ -0,0 +1,85 @@ +{ + "name": "beluga-php/docker-php-api", + "description": "Docker API generated files from OpenAPI Specification", + "license": "MIT", + "type": "library", + "funding": [ + { + "type": "github", + "url": "https://github.com/flavioheleno" + } + ], + "require": { + "php": ">=8.1", + "ext-mbstring": "*", + "jane-php/json-schema-runtime": "^7.5", + "jane-php/open-api-runtime": "^7.5", + "php-http/client-common": "^2.7", + "php-http/discovery": "^1.19", + "php-http/multipart-stream-builder": "^1.3", + "psr/http-client": "^1.0", + "psr/http-client-implementation": "*", + "psr/http-factory": "^1.0", + "psr/http-factory-implementation": "*", + "psr/http-message": "^2.0", + "psr/http-message-implementation": "*", + "symfony/deprecation-contracts": "^3.3", + "symfony/options-resolver": "^6.3 || ^7.0 || ^8.0", + "symfony/serializer": "^6.3 || ^7.0 || ^8.0", + "symfony/validator": "^6.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.42", + "friendsofphp/php-cs-fixer": "^3.8", + "jane-php/open-api-3": "^7.4", + "roave/security-advisories": "dev-latest" + }, + "conflict": { + "docker-php/docker-php-api": "*" + }, + "minimum-stability": "dev", + "prefer-stable": true, + "autoload": { + "psr-4": { + "Docker\\API\\": "src/" + } + }, + "config": { + "allow-plugins": { + "ergebnis/composer-normalize": true, + "php-http/discovery": false + }, + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "extra": { + "branch-alias": { + "6.1.36": "6.1.36.x-dev", + "6.1.41": "6.1.41.x-dev", + "7.1.41": "7.1.41.x-dev", + "7.1.42": "7.1.42.x-dev", + "dev-main": "7.1.43.x-dev" + } + }, + "scripts": { + "generate": [ + "vendor/bin/jane-openapi generate", + "cat patches/*.patch | patch -s -p1" + ], + "lint": "vendor/bin/php-cs-fixer fix --dry-run --verbose --diff", + "lint-fix": "vendor/bin/php-cs-fixer fix --verbose" + }, + "extra": { + "branch-alias": { + "dev-main": "7.1.46.x-dev", + "7.1.45": "7.1.45.x-dev", + "7.1.44": "7.1.44.x-dev", + "7.1.43": "7.1.43.x-dev", + "7.1.42": "7.1.42.x-dev", + "7.1.41": "7.1.41.x-dev", + "6.1.41": "6.1.41.x-dev", + "6.1.36": "6.1.36.x-dev" + } + } +} diff --git a/app/vendor/beluga-php/docker-php-api/patches/NetworkSettingsNormalizer.patch b/app/vendor/beluga-php/docker-php-api/patches/NetworkSettingsNormalizer.patch new file mode 100644 index 000000000..804501bb7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/patches/NetworkSettingsNormalizer.patch @@ -0,0 +1,26 @@ +diff --git a/src/Normalizer/NetworkSettingsNormalizer.php b/src/Normalizer/NetworkSettingsNormalizer.php +index 22cfce8..392058c 100644 +--- a/src/Normalizer/NetworkSettingsNormalizer.php ++++ b/src/Normalizer/NetworkSettingsNormalizer.php +@@ -78,6 +78,10 @@ class NetworkSettingsNormalizer implements DenormalizerInterface, NormalizerInte + if (\array_key_exists('Ports', $data) && $data['Ports'] !== null) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Ports'] as $key => $value) { ++ if (null === $value) { ++ $values[$key] = null; ++ continue; ++ } + $values_1 = []; + foreach ($value as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\PortBinding::class, 'json', $context); +@@ -214,6 +218,10 @@ class NetworkSettingsNormalizer implements DenormalizerInterface, NormalizerInte + if ($data->isInitialized('ports') && null !== $data->getPorts()) { + $values = []; + foreach ($data->getPorts() as $key => $value) { ++ if (null === $value) { ++ $values[$key] = null; ++ continue; ++ } + $values_1 = []; + foreach ($value as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); diff --git a/app/vendor/beluga-php/docker-php-api/spec/v1.36.json b/app/vendor/beluga-php/docker-php-api/spec/v1.36.json new file mode 100644 index 000000000..ee306135a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/spec/v1.36.json @@ -0,0 +1,15417 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Docker Engine API", + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the Docker client uses to communicate with the Engine, so everything the Docker client can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps` is `GET /containers/json`). The notable exception is running containers, which consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.36) is used.\nFor example, calling `/info` is the same as calling `/v1.36/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send authentication details to various endpoints that need to communicate with registries, such as `POST /images/(name)/push`. These are sent as `X-Registry-Auth` header as a Base64 encoded (JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"email\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this structure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), you can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n", + "version": "1.36", + "x-logo": { + "url": "https://docs.docker.com/images/logo-docker-main.png" + } + }, + "servers": [ + { + "url": "/v1.36" + } + ], + "tags": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to. See the [networking documentation](https://docs.docker.com/engine/userguide/networking/) for more information.\n", + "x-displayName": "Networks" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "x-displayName": "Volumes" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. See the [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) for more information.\n\nTo exec a command in a container, you first need to create an exec instance, then start it. These two API endpoints are wrapped up in a single command-line command, `docker exec`.\n", + "x-displayName": "Exec" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. See [the swarm mode documentation](https://docs.docker.com/engine/swarm/) for more information.\n", + "x-displayName": "Swarm" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Nodes" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Services" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit of swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Tasks" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Secrets" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see [the inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container than inspecting a single container. For example,\nthe list of linked containers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including non-running ones.", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a `map[string][]string`). For example, `{\"status\": [\"paused\"]}` will only return paused containers. Available filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerSummary" + }, + "example": [ + { + "Id": "8dfafdbc3a40", + "Names": [ + "/boring_feynman" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 1", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + }, + { + "Id": "9cd87474be90", + "Names": [ + "/coolName" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 222222", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:08" + } + } + }, + "Mounts": [] + }, + { + "Id": "3176a2479c92", + "Names": [ + "/sleepy_dog" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:06" + } + } + }, + "Mounts": [] + }, + { + "Id": "4cb07b47f9fb", + "Names": [ + "/running_cat" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:05" + } + } + }, + "Mounts": [] + } + ] + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/create": { + "post": { + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match `/?[a-zA-Z0-9_-]+`.", + "schema": { + "pattern": "/?[a-zA-Z0-9_-]+", + "type": "string" + } + } + ], + "requestBody": { + "description": "Container to create", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network." + } + }, + "description": "This container's networking configuration." + } + } + } + ] + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network." + } + }, + "description": "This container's networking configuration." + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created container", + "nullable": false + }, + "Warnings": { + "type": "array", + "description": "Warnings encountered when creating the container", + "nullable": false, + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerCreate operation" + }, + "example": { + "Id": "e90e34656806", + "Warnings": [] + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/containers/{id}/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerInspectResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the container" + }, + "Created": { + "type": "string", + "description": "The time the container was created" + }, + "Path": { + "type": "string", + "description": "The path to the command being run" + }, + "Args": { + "type": "array", + "description": "The arguments to the command being run", + "items": { + "type": "string" + } + }, + "State": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the container. For example, `\"running\"` or `\"exited\"`.\n", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + }, + "Running": { + "type": "boolean", + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the cgroups freezer is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n" + }, + "Paused": { + "type": "boolean", + "description": "Whether this container is paused." + }, + "Restarting": { + "type": "boolean", + "description": "Whether this container is restarting." + }, + "OOMKilled": { + "type": "boolean", + "description": "Whether this container has been killed because it ran out of memory." + }, + "Dead": { + "type": "boolean" + }, + "Pid": { + "type": "integer", + "description": "The process ID of this container" + }, + "ExitCode": { + "type": "integer", + "description": "The last exit code of this container" + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "description": "The time when this container was last started." + }, + "FinishedAt": { + "type": "string", + "description": "The time when this container last exited." + } + }, + "description": "The state of the container." + }, + "Image": { + "type": "string", + "description": "The container's image" + }, + "ResolvConfPath": { + "type": "string" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "Node": { + "type": "object", + "properties": {}, + "description": "TODO" + }, + "Name": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "Driver": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "AppArmorProfile": { + "type": "string" + }, + "ExecIDs": { + "type": "string" + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container.", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container.", + "format": "int64" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "example": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "StopSignal": "SIGTERM", + "StopTimeout": 10 + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "HostConfig": { + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuPercent": 80, + "CpuShares": 0, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "Devices": [], + "IpcMode": "", + "LxcConf": [], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "KernelMemory": 0, + "OomKillDisable": false, + "OomScoreAdj": 500, + "NetworkMode": "bridge", + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Type": "json-file" + }, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "SandboxKey": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "MacAddress": "", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "OOMKilled": false, + "Dead": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint is not supported on Windows.", + "operationId": "ContainerTop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process is an array of values corresponding to the titles", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ], + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + }, + "text/plain": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process is an array of values corresponding to the titles", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or `journald` logging driver.\n", + "operationId": "ContainerLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Return the logs as a stream.\n\nThis will return a `101` HTTP response with a `Connection: upgrade` header, then hijack the HTTP connection to send raw output. For more information about hijacking and the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines.", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "101": { + "description": "logs returned as a stream", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/plain": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "200": { + "description": "logs returned as a string in response body", + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified\n- `1`: Added\n- `2`: Deleted\n", + "operationId": "ContainerChanges", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ContainerChangeResponseItem", + "required": [ + "Kind", + "Path" + ], + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Path to file that has changed", + "nullable": false + }, + "Kind": { + "type": "integer", + "description": "Kind of change", + "format": "uint8", + "nullable": false + } + }, + "description": "change item in response to ContainerChanges operation", + "x-go-name": "ContainerChangeResponseItem" + } + }, + "example": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "tags": [ + "Container" + ], + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of last read, which is used\nfor calculating the CPU usage percentage. It is not the same as the\n`cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n", + "operationId": "ContainerStats", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then it will disconnect.", + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "example": { + "read": "2015-01-08T22:57:31.547920715Z", + "pids_stats": { + "current": 3 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "memory_stats": { + "stats": { + "total_pgmajfault": 0, + "cache": 0, + "mapped_file": 0, + "total_inactive_file": 0, + "pgpgout": 414, + "rss": 6537216, + "total_mapped_file": 0, + "writeback": 0, + "unevictable": 0, + "pgpgin": 477, + "total_unevictable": 0, + "pgmajfault": 0, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_writeback": 0, + "total_inactive_anon": 0, + "rss_huge": 6291456, + "hierarchical_memory_limit": 67108864, + "total_pgfault": 964, + "total_active_file": 0, + "active_anon": 6537216, + "total_active_anon": 6537216, + "total_pgpgout": 414, + "total_cache": 0, + "inactive_anon": 0, + "active_file": 0, + "pgfault": 964, + "inactive_file": 0, + "total_pgpgin": 477 + }, + "max_usage": 6651904, + "usage": 6537216, + "failcnt": 0, + "limit": 67108864 + }, + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100215355, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 739306590000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100093996, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 9492140000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container. You must restart the container for the resize to take effect.", + "operationId": "ContainerResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the tty session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the tty session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already started", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already stopped", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "tags": [ + "Container" + ], + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the container.", + "operationId": "ContainerKill", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`)", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/update": { + "post": { + "tags": [ + "Container" + ], + "summary": "Update a container", + "description": "Change various configuration options of a container without having to recreate it.", + "operationId": "ContainerUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "title": "ContainerUpdateResponse", + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerUpdate operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "update" + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "New name for the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Pause a container", + "description": "Use the cgroups freezer to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used, which is observable by the process being suspended. With the cgroups freezer the process is unaware, and unable to capture, that it is being suspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach to the same container multiple times and you can reattach to containers that have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint to do anything.\n\nSee [the documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) for more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, and `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used for raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client can also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will similarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), the stream over the hijacked connected is multiplexed to separate out `stdout` and `stderr`. The stream consists of a series of frames, each containing a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or `stderr`). It also contains the size of the associated frame encoded in the last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size encoded as big endian.\n\nFollowing the header is the payload, which is the specified number of bytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), the stream is not multiplexed. The data exchanged over the hijacked connection is simply the raw data from the process PTY and client's `stdin`.\n", + "operationId": "ContainerAttach", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you want to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been returned, it will seamlessly transition into streaming current output.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach/ws": { + "get": { + "tags": [ + "Container" + ], + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,`, or `_`.", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition, either 'not-running' (default), 'next-exit', or 'removed'.", + "schema": { + "type": "string", + "default": "not-running" + } + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "type": "object", + "properties": { + "StatusCode": { + "type": "integer", + "description": "Exit code of the container", + "nullable": false + }, + "Error": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Details of an error" + } + }, + "description": "container waiting error, if any" + } + }, + "description": "OK response to ContainerWait operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove the volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the container before attempting removal or force remove" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "type": "object", + "properties": { + "ErrorResponse": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "message": { + "type": "string", + "description": "The error message. Either \"must specify path parameter\" (path cannot be empty) or \"not a directory\" (path was asserted to be a directory but exists as a file).", + "nullable": false + } + } + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.", + "operationId": "PutContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If “1”, “true”, or “True” then it will be an error if unpacking the given content would cause an existing directory to be replaced with a non-directory and vice versa.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The input stream must be a tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/x-tar": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The content was extracted successfully", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + }, + "head": { + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is return containing a base64 - encoded JSON object with some filesystem header information about the path.", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "TODO", + "schema": { + "type": "string" + } + } + }, + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ErrorResponse": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "message": { + "type": "string", + "description": "The error message. Either \"must specify path parameter\" (path cannot be empty) or \"not a directory\" (path was asserted to be a directory but exists as a file).", + "nullable": false + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "ErrorResponse": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "message": { + "type": "string", + "description": "The error message. Either \"must specify path parameter\" (path cannot be empty) or \"not a directory\" (path was asserted to be a directory but exists as a file).", + "nullable": false + } + } + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/prune": { + "post": { + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ContainerPruneResponse", + "type": "object", + "properties": { + "ContainersDeleted": { + "type": "array", + "description": "Container IDs that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n", + "schema": { + "type": "string" + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "example": [ + { + "Id": "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8", + "ParentId": "", + "RepoTags": [ + "ubuntu:12.04", + "ubuntu:precise" + ], + "RepoDigests": [ + "ubuntu@sha256:992069aee4016783df6345315302fa59681aae51a8eeb2f889dea59290f21787" + ], + "Created": 1474925151, + "Size": 103579269, + "VirtualSize": 103579269, + "SharedSize": 0, + "Labels": {}, + "Containers": 2 + }, + { + "Id": "sha256:3e314f95dcace0f5e4fd37b10862fe8398e3c60ed36600bc0ca5fda78b087175", + "ParentId": "", + "RepoTags": [ + "ubuntu:12.10", + "ubuntu:quantal" + ], + "RepoDigests": [ + "ubuntu@sha256:002fba3e3255af10be97ea26e476692a7ebed0bb074a9ab960b2e7a1526b15d7", + "ubuntu@sha256:68ea0200f0b90df725d99d823905b04cf844f6039ef60c60bf3e019915017bd3" + ], + "Created": 1403128455, + "Size": 172064416, + "VirtualSize": 172064416, + "SharedSize": 0, + "Labels": {}, + "Containers": 5 + } + ] + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/build": { + "post": { + "tags": [ + "Image" + ], + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values. [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken as a custom network's name to which this container should connect to.", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "default": "application/x-tar", + "enum": [ + "application/x-tar" + ] + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + } + }, + "/build/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "BuildPruneResponse", + "type": "object", + "properties": { + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/create": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create an image", + "description": "Create an image by either pulling it from a registry or importing it.", + "operationId": "ImageCreate", + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputImage" + } + }, + "/images/{name}/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Image" + }, + "example": { + "Id": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", + "Container": "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", + "Comment": "", + "Os": "linux", + "Architecture": "amd64", + "Parent": "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "ContainerConfig": { + "Tty": false, + "Hostname": "e611e15f9c9d", + "Domainname": "", + "AttachStdout": false, + "PublishService": "", + "AttachStdin": false, + "OpenStdin": false, + "StdinOnce": false, + "NetworkDisabled": false, + "OnBuild": [], + "Image": "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "User": "", + "WorkingDir": "", + "MacAddress": "", + "AttachStderr": false, + "Labels": { + "com.example.license": "GPL", + "com.example.version": "1.0", + "com.example.vendor": "Acme" + }, + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Cmd": [ + "/bin/sh", + "-c", + "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" + ] + }, + "DockerVersion": "1.9.0-dev", + "VirtualSize": 188359297, + "Size": 0, + "Author": "", + "Created": "2015-09-10T08:30:53.26995814Z", + "GraphDriver": { + "Name": "aufs", + "Data": {} + }, + "RepoDigests": [ + "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" + ], + "RepoTags": [ + "example:1.0", + "example:latest", + "example:stable" + ], + "Config": { + "Image": "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "NetworkDisabled": false, + "OnBuild": [], + "StdinOnce": false, + "PublishService": "", + "AttachStdin": false, + "OpenStdin": false, + "Domainname": "", + "AttachStdout": false, + "Tty": false, + "Hostname": "e611e15f9c9d", + "Cmd": [ + "/bin/bash" + ], + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.version": "1.0", + "com.example.license": "GPL" + }, + "MacAddress": "", + "AttachStderr": false, + "WorkingDir": "", + "User": "" + }, + "RootFS": { + "Type": "layers", + "Layers": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "HistoryResponseItem", + "required": [ + "Comment", + "Created", + "CreatedBy", + "Id", + "Size", + "Tags" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + }, + "description": "individual image layer information in response to ImageHistory operation", + "x-go-name": "HistoryResponseItem" + } + }, + "example": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "tags": [ + "Image" + ], + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must already have a tag which references the registry. For example, `registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The tag to associate with the image on the registry.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "tags": [ + "Image" + ], + "summary": "Tag an image", + "description": "Tag an image so that it becomes part of a repository.", + "operationId": "ImageTag", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}": { + "delete": { + "tags": [ + "Image" + ], + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "example": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/search": { + "get": { + "tags": [ + "Image" + ], + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-automated=(true|false)`\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ImageSearchResponseItem", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "example": [ + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ImagePruneResponse", + "type": "object", + "properties": { + "ImagesDeleted": { + "type": "array", + "description": "Images that were deleted", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/auth": { + "post": { + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity token for accessing the registry without password.", + "operationId": "SystemAuth", + "requestBody": { + "description": "Authentication to check", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the authentication", + "nullable": false + }, + "IdentityToken": { + "type": "string", + "description": "An opaque token used to authenticate a user after a successful login", + "nullable": false + } + } + }, + "example": { + "Status": "Login Succeeded", + "IdentityToken": "9cbaf023786cd7..." + } + } + } + }, + "204": { + "description": "No error", + "content": {} + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "authConfig" + } + }, + "/info": { + "get": { + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/version": { + "get": { + "tags": [ + "System" + ], + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemVersionResponse", + "type": "object", + "properties": { + "Platform": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "items": { + "required": [ + "Name", + "Version" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Version": { + "type": "string", + "nullable": false + }, + "Details": { + "type": "object", + "properties": {}, + "nullable": true + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Version": { + "type": "string" + }, + "ApiVersion": { + "type": "string" + }, + "MinAPIVersion": { + "type": "string" + }, + "GitCommit": { + "type": "string" + }, + "GoVersion": { + "type": "string" + }, + "Os": { + "type": "string" + }, + "Arch": { + "type": "string" + }, + "KernelVersion": { + "type": "string" + }, + "Experimental": { + "type": "boolean" + }, + "BuildTime": { + "type": "string" + } + } + }, + "example": { + "Version": "17.04.0", + "Os": "linux", + "KernelVersion": "3.19.0-23-generic", + "GoVersion": "go1.7.5", + "GitCommit": "deadbee", + "Arch": "amd64", + "ApiVersion": "1.27", + "MinAPIVersion": "1.12", + "BuildTime": "2016-06-14T07:09:13.444803460+00:00", + "Experimental": true + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/_ping": { + "get": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/commit": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The container configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "containerConfig" + } + }, + "/events": { + "get": { + "tags": [ + "System" + ], + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, and `update`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, and `untag`\n\nVolumes report these events: `create`, `mount`, `unmount`, and `destroy`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, and `remove`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n", + "operationId": "SystemEvents", + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemEventsResponse", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The type of object emitting the event" + }, + "Action": { + "type": "string", + "description": "The type of event" + }, + "Actor": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the object emitting the event" + }, + "Attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Various key/value attributes of the object, depending on its type" + } + } + }, + "time": { + "type": "integer", + "description": "Timestamp of event" + }, + "timeNano": { + "type": "integer", + "description": "Timestamp of event, with nanosecond accuracy", + "format": "int64" + } + } + }, + "example": { + "Type": "container", + "Action": "create", + "Actor": { + "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", + "Attributes": { + "com.example.some-label": "some-label-value", + "image": "alpine", + "name": "my-container" + } + }, + "time": 1461943101 + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/system/df": { + "get": { + "tags": [ + "System" + ], + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ] + } + } + }, + "text/plain": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ] + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image repositories.\n\nFor each value of the `names` parameter: if it is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned; if it is an image ID, similarly only that image (and its parents) are returned and there would be no names referenced in the 'repositories' file for this image ID.\n\nFor details on the format, see [the export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/load": { + "post": { + "tags": [ + "Image" + ], + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see [the export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "description": "Tar archive containing images", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "imagesTarball" + } + }, + "/containers/{id}/exec": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Exec configuration", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside the container. Format is one of: `user`, `user:group`, `uid`, or `uid:gid`." + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container." + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execConfig" + } + }, + "/exec/{id}/start": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint returns immediately after starting the command. Otherwise, it sets up an interactive session with the command.", + "operationId": "ExecStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + } + }, + "example": { + "Detach": false, + "Tty": false + } + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execStartConfig" + } + }, + "/exec/{id}/resize": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works if `tty` was specified as part of creating and starting the exec instance.", + "operationId": "ExecResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ExecInspectResponse", + "type": "object", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "example": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes": { + "get": { + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "title": "VolumeListResponse", + "required": [ + "Volumes", + "Warnings" + ], + "type": "object", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "nullable": false, + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes", + "nullable": false, + "items": { + "type": "string" + } + } + } + }, + "example": { + "Volumes": [ + { + "CreatedAt": "2017-07-19T12:00:26Z", + "Name": "tardis", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/tardis", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Scope": "local", + "Options": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + } + ], + "Warnings": [] + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/create": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "requestBody": { + "description": "Volume configuration", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The new volume's name. If not specified, Docker generates a name.", + "nullable": false + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver to use.", + "nullable": false, + "default": "local" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A mapping of driver options and values. These options are passed directly to the driver and are driver specific." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "tardis", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Driver": "custom" + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "volumeConfig" + } + }, + "/volumes/{name}": { + "get": { + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "The volume was removed", + "content": {} + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/prune": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "VolumePruneResponse", + "type": "object", + "properties": { + "VolumesDeleted": { + "type": "array", + "description": "Volumes that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks": { + "get": { + "tags": [ + "Network" + ], + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see [the network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than inspecting a single network. For example,\nthe list of containers attached to the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process on the networks list. Available filters:\n\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Network" + } + }, + "example": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/{id}": { + "get": { + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/create": { + "post": { + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "requestBody": { + "description": "Network configuration", + "content": { + "application/json": { + "schema": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The network's name." + }, + "CheckDuplicate": { + "type": "boolean", + "description": "Check for networks with duplicate names. Since Network is primarily keyed based on a random ID and not on the name, and network name is strictly a user-friendly alias to the network which is uniquely identified using ID, there is no guaranteed way to check for duplicates. CheckDuplicate is there to provide a best effort checking of any networks which has the same name but it is not guaranteed to catch all name collisions." + }, + "Driver": { + "type": "string", + "description": "Name of the network driver plugin to use.", + "default": "bridge" + }, + "Internal": { + "type": "boolean", + "description": "Restrict external access to the network." + }, + "Attachable": { + "type": "boolean", + "description": "Globally scoped network is manually attachable by regular containers from workers in swarm mode." + }, + "Ingress": { + "type": "boolean", + "description": "Ingress network is the network which provides the routing-mesh in swarm mode." + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "EnableIPv6": { + "type": "boolean", + "description": "Enable IPv6 on the network." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Network specific options to be used by the drivers." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "isolated_nw", + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.20.0.0/16", + "IPRange": "172.20.10.0/24", + "Gateway": "172.20.10.11" + }, + { + "Subnet": "2001:db8:abcd::/64", + "Gateway": "2001:db8:abcd::1011" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": true, + "Attachable": false, + "Ingress": false, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created network." + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + } + } + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "networkConfig" + } + }, + "/networks/{id}/connect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "operationId": "NetworkConnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network." + }, + "EndpointConfig": { + "$ref": "#/components/schemas/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/{id}/disconnect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network." + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network." + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/prune": { + "post": { + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkPruneResponse", + "type": "object", + "properties": { + "NetworksDeleted": { + "type": "array", + "description": "Networks that were deleted", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "description": "Returns information about installed plugins.", + "operationId": "PluginList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the plugin list. Available filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/privileges": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "title": "PluginPrivilegeItem", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing the plugin." + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "title": "PluginPrivilegeItem", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing the plugin." + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/pull": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "operationId": "PluginPull", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the plugin." + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the plugin." + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/{name}/json": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the plugin is in use by a container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the plugin." + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the plugin." + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/create": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Path to tar containing plugin rootfs and manifest", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "tarContext" + } + }, + "/plugins/{name}/push": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "description": "Push a plugin to the registry.\n", + "operationId": "PluginPush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + "DEBUG=1" + ], + "items": { + "type": "string" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/nodes": { + "get": { + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required to avoid conflicting writes.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/init": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP). This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the default swarm listening port is used." + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the port number from the listen address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when possible." + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format: ``), for example, `192.168.1.1`,\nor an interface, like `eth0`. If `DataPathAddr` is unspecified, the same address as `AdvertiseAddr`\nis used.\n\nThe `DataPathAddr` specifies the address that global scope network drivers will publish towards other\nnodes in order to reach the containers running on this node. Using this parameter it is possible to\nseparate the container data traffic from the management traffic of the cluster.\n" + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP). This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the default swarm listening port is used." + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the port number from the listen address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when possible." + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format: ``), for example, `192.168.1.1`,\nor an interface, like `eth0`. If `DataPathAddr` is unspecified, the same address as `AdvertiseAddr`\nis used.\n\nThe `DataPathAddr` specifies the address that global scope network drivers will publish towards other\nnodes in order to reach the containers running on this node. Using this parameter it is possible to\nseparate the container data traffic from the management traffic of the cluster.\n" + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node gets promoted to manager, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP)." + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the port number from the listen address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when possible." + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format: ``), for example, `192.168.1.1`,\nor an interface, like `eth0`. If `DataPathAddr` is unspecified, the same address as `AdvertiseAddr`\nis used.\n\nThe `DataPathAddr` specifies the address that global scope network drivers will publish towards other\nnodes in order to reach the containers running on this node. Using this parameter it is possible to\nseparate the container data traffic from the management traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "string", + "description": "Addresses of manager nodes already participating in the swarm." + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node gets promoted to manager, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP)." + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the port number from the listen address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when possible." + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format: ``), for example, `192.168.1.1`,\nor an interface, like `eth0`. If `DataPathAddr` is unspecified, the same address as `AdvertiseAddr`\nis used.\n\nThe `DataPathAddr` specifies the address that global scope network drivers will publish towards other\nnodes in order to reach the containers running on this node. Using this parameter it is possible to\nseparate the container data traffic from the management traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "string", + "description": "Addresses of manager nodes already participating in the swarm." + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "name": "force", + "in": "query", + "description": "Force leave swarm, even if this is the last manager or that it will break the cluster.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is required to avoid conflicting writes.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/unlockkey": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/unlock": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the services list. Available filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/create": { + "post": { + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ] + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ServiceCreateResponse", + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the created service." + }, + "Warning": { + "type": "string", + "description": "Optional warning message" + } + }, + "example": { + "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is required to avoid conflicting writes.", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the X-Registry-Auth header is not specified, this parameter indicates where to find registry authorization credentials. The valid values are `spec` and `previous-spec`.", + "schema": { + "type": "string", + "default": "spec" + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback to the previous service spec. The supplied spec will be ignored in this case.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ] + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}/logs": { + "get": { + "tags": [ + "Service" + ], + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service.\n\n**Note**: This endpoint works only for services with the `json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the service", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Return the logs as a stream.\n\nThis will return a `101` HTTP response with a `Connection: upgrade` header, then hijack the HTTP connection to send raw output. For more information about hijacking and the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines.", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "101": { + "description": "logs returned as a stream", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "200": { + "description": "logs returned as a string in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such service: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks": { + "get": { + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the tasks list. Available filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ], + "items": { + "$ref": "#/components/schemas/Task" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\n\n**Note**: This endpoint works only for services with the `json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Return the logs as a stream.\n\nThis will return a `101` HTTP response with a `Connection: upgrade` header, then hijack the HTTP connection to send raw output. For more information about hijacking and the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines.", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "101": { + "description": "logs returned as a stream", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "200": { + "description": "logs returned as a string in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such task: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets": { + "get": { + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the secrets list. Available filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ], + "items": { + "$ref": "#/components/schemas/Secret" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/create": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/secrets/{id}": { + "get": { + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is required to avoid conflicting writes.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the secret to update. Currently, only the Labels field can be updated. All other fields must remain unchanged from the [SecretInspect endpoint](#operation/SecretInspect) response values.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs": { + "get": { + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the configs list. Available filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ], + "items": { + "$ref": "#/components/schemas/Config" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/create": { + "post": { + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs/{id}": { + "get": { + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is required to avoid conflicting writes.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the config to update. Currently, only the Labels field can be updated. All other fields must remain unchanged from the [ConfigInspect endpoint](#operation/ConfigInspect) response values.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/distribution/{name}/json": { + "get": { + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.", + "operationId": "DistributionInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "type": "object", + "properties": { + "Descriptor": { + "type": "object", + "properties": { + "MediaType": { + "type": "string" + }, + "Size": { + "type": "integer", + "format": "int64" + }, + "Digest": { + "type": "string" + }, + "URLs": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "A descriptor struct containing digest, media type, and size" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + }, + "OSVersion": { + "type": "string" + }, + "OSFeatures": { + "type": "array", + "items": { + "type": "string" + } + }, + "Variant": { + "type": "string" + }, + "Features": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "x-go-name": "DistributionInspect" + }, + "example": { + "Descriptor": { + "MediaType": "application/vnd.docker.distribution.manifest.v2+json", + "Digest": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96", + "Size": 3987495, + "URLs": [ + "" + ] + }, + "Platforms": [ + { + "Architecture": "amd64", + "OS": "linux", + "OSVersion": "", + "OSFeatures": [ + "" + ], + "Variant": "", + "Features": [ + "" + ] + } + ] + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/session": { + "post": { + "tags": [ + "Session (experimental)" + ], + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to call back to the client for advanced capabilities.\n\n> **Note**: This endpoint is *experimental* and only available if the daemon is started with experimental\n> features enabled. The specifications for this endpoint may still change in a future version of the API.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows the client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Port": { + "required": [ + "PrivatePort", + "Type" + ], + "type": "object", + "properties": { + "IP": { + "type": "string", + "format": "ip-address" + }, + "PrivatePort": { + "type": "integer", + "description": "Port on the container", + "format": "uint16", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "description": "Port exposed on the host", + "format": "uint16" + }, + "Type": { + "type": "string", + "nullable": false, + "enum": [ + "tcp", + "udp" + ] + } + }, + "description": "An open port on a container", + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountPoint": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Source": { + "type": "string" + }, + "Destination": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "Mode": { + "type": "string" + }, + "RW": { + "type": "boolean" + }, + "Propagation": { + "type": "string" + } + }, + "description": "A mount point inside a container" + }, + "DeviceMapping": { + "type": "object", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "description": "A device mapping between the host and container", + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Device path" + }, + "Rate": { + "minimum": 0, + "type": "integer", + "description": "Rate", + "format": "int64" + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "Container path." + }, + "Source": { + "type": "string", + "description": "Mount source (e.g. a volume name, a host path)." + }, + "Type": { + "type": "string", + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n", + "enum": [ + "bind", + "volume", + "tmpfs" + ] + }, + "ReadOnly": { + "type": "boolean", + "description": "Whether the mount should be read-only." + }, + "Consistency": { + "type": "string", + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + }, + "BindOptions": { + "type": "object", + "properties": { + "Propagation": { + "type": "string", + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + } + }, + "description": "Optional configuration for the `bind` type." + }, + "VolumeOptions": { + "type": "object", + "properties": { + "NoCopy": { + "type": "boolean", + "description": "Populate volume with data from the target.", + "default": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "DriverConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver to use to create the volume." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "key/value map of driver specific options." + } + }, + "description": "Map of driver specific options" + } + }, + "description": "Optional configuration for the `volume` type." + }, + "TmpfsOptions": { + "type": "object", + "properties": { + "SizeBytes": { + "type": "integer", + "description": "The size for the tmpfs mount in bytes.", + "format": "int64" + }, + "Mode": { + "type": "integer", + "description": "The permission mode for the tmpfs mount in an integer." + } + }, + "description": "Optional configuration for the `tmpfs` type." + } + } + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up" + } + }, + "description": "The behavior to apply when the container exits. The default is not to restart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is added before each restart to prevent flooding the server.\n" + }, + "Resources": { + "type": "object", + "properties": { + "CpuShares": { + "type": "integer", + "description": "An integer value representing this container's relative CPU weight versus other containers." + }, + "Memory": { + "type": "integer", + "description": "Memory limit in bytes.", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "type": "string", + "description": "Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist." + }, + "BlkioWeight": { + "maximum": 1000, + "minimum": 0, + "type": "integer", + "description": "Block IO weight (relative weight)." + }, + "BlkioWeightDevice": { + "type": "array", + "description": "Block IO weight (relative device weight) in the form `[{\"Path\": \"device_path\", \"Weight\": weight}]`.\n", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "minimum": 0, + "type": "integer" + } + } + } + }, + "BlkioDeviceReadBps": { + "type": "array", + "description": "Limit read rate (bytes per second) from a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "type": "array", + "description": "Limit write rate (bytes per second) to a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "type": "array", + "description": "Limit read rate (IO per second) from a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "type": "array", + "description": "Limit write rate (IO per second) to a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "format": "int64" + }, + "CpuQuota": { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "format": "int64" + }, + "CpuRealtimePeriod": { + "type": "integer", + "description": "The length of a CPU real-time period in microseconds. Set to 0 to allocate no time allocated to real-time tasks.", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "type": "integer", + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to allocate no time allocated to real-time tasks.", + "format": "int64" + }, + "CpusetCpus": { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`)", + "example": "0-3" + }, + "CpusetMems": { + "type": "string", + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems." + }, + "Devices": { + "type": "array", + "description": "A list of devices to add to the container.", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "type": "array", + "description": "a list of cgroup rules to apply to the container", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DiskQuota": { + "type": "integer", + "description": "Disk limit (in bytes).", + "format": "int64" + }, + "KernelMemory": { + "type": "integer", + "description": "Kernel memory limit in bytes.", + "format": "int64" + }, + "MemoryReservation": { + "type": "integer", + "description": "Memory soft limit in bytes.", + "format": "int64" + }, + "MemorySwap": { + "type": "integer", + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited swap.", + "format": "int64" + }, + "MemorySwappiness": { + "maximum": 100, + "minimum": 0, + "type": "integer", + "description": "Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.", + "format": "int64" + }, + "NanoCPUs": { + "type": "integer", + "description": "CPU quota in units of 10-9 CPUs.", + "format": "int64" + }, + "OomKillDisable": { + "type": "boolean", + "description": "Disable OOM Killer for the container." + }, + "PidsLimit": { + "type": "integer", + "description": "Tune a container's pids limit. Set -1 for unlimited.", + "format": "int64" + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + }, + "CpuCount": { + "type": "integer", + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are mutually exclusive. The order of precedence is `CPUCount` first, then `CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "CpuPercent": { + "type": "integer", + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are mutually exclusive. The order of precedence is `CPUCount` first, then `CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "IOMaximumIOps": { + "type": "integer", + "description": "Maximum IOps for the container system drive (Windows only)", + "format": "int64" + }, + "IOMaximumBandwidth": { + "type": "integer", + "description": "Maximum IO in bytes per second for the container system drive (Windows only)", + "format": "int64" + } + }, + "description": "A container's resources (cgroups config, ulimits, etc)" + }, + "ResourceObject": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + }, + "description": "An object describing the resources which can be advertised by a node and requested by a task" + }, + "GenericResources": { + "type": "array", + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or String resources (e.g, `GPU=UUID1`)", + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "HealthConfig": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit." + }, + "Timeout": { + "type": "integer", + "description": "The time to wait before considering the check to have hung. It should be 0 or at least 1000000 (1 ms). 0 means inherit." + }, + "Retries": { + "type": "integer", + "description": "The number of consecutive failures needed to consider a container as unhealthy. 0 means inherit." + }, + "StartPeriod": { + "type": "integer", + "description": "Start period for the container to initialize before starting health-retries countdown in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit." + } + }, + "description": "A test to perform to check that the container is healthy." + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding is a string in one of these forms:\n\n- `host-src:container-dest` to bind-mount a host path into the container. Both `host-src`, and `container-dest` must be an _absolute_ path.\n- `host-src:container-dest:ro` to make the bind mount read-only inside the container. Both `host-src`, and `container-dest` must be an _absolute_ path.\n- `volume-name:container-dest` to bind-mount a volume managed by a volume driver into the container. `container-dest` must be an _absolute_ path.\n- `volume-name:container-dest:ro` to mount the volume read-only inside the container. `container-dest` must be an _absolute_ path.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written" + }, + "LogConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "The logging configuration for this container" + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken as a custom network's name to which this container should connect to." + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process exits. This has no effect if `RestartPolicy` is set." + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in the form `[:]`.", + "items": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to the container.", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container.", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container.", + "items": { + "type": "string" + } + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts` file. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in order to tune OOM killer preferences.", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be either:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when the container starts.\nThe allocated port might be changed when restarting the container.\n\nThe port is selected from the ephemeral port range that depends on the kernel.\nFor example, on Linux the range is defined by `/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such as SELinux.", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n" + }, + "Tmpfs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of container directories which should be replaced by tmpfs mounts, and their corresponding mount options. For example: `{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }`.\n" + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace remapping option is enabled." + }, + "ShmSize": { + "minimum": 0, + "type": "integer", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB." + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A list of kernel parameters (sysctls) to set in the container. For example: `{\"net.ipv4.ip_forward\": \"1\"}`\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array. (Windows only)", + "items": { + "minimum": 0, + "type": "integer" + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)", + "enum": [ + "default", + "process", + "hyperv" + ] + } + } + } + ] + }, + "ContainerConfig": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname." + }, + "Domainname": { + "type": "string", + "description": "The domain name to use for the container." + }, + "User": { + "type": "string", + "description": "The user that commands are run as inside the container." + }, + "AttachStdin": { + "type": "boolean", + "description": "Whether to attach to `stdin`.", + "default": false + }, + "AttachStdout": { + "type": "boolean", + "description": "Whether to attach to `stdout`.", + "default": true + }, + "AttachStderr": { + "type": "boolean", + "description": "Whether to attach to `stderr`.", + "default": true + }, + "ExposedPorts": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n" + }, + "Tty": { + "type": "boolean", + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.", + "default": false + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`", + "default": false + }, + "StdinOnce": { + "type": "boolean", + "description": "Close `stdin` after one attached client disconnects", + "default": false + }, + "Env": { + "type": "array", + "description": "A list of environment variables to set inside the container in the form `[\"VAR=value\", ...]`. A variable without `=` is removed from the environment, rather than to have an empty value.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run specified as a string or an array of strings.", + "items": { + "type": "string" + } + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "type": "boolean", + "description": "Command is already escaped (Windows only)" + }, + "Image": { + "type": "string", + "description": "The name of the image to use when creating the container" + }, + "Volumes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping mount point paths inside the container to empty objects." + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "Entrypoint": { + "type": "array", + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the entry point is reset to system default (i.e., the entry point used by docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "items": { + "type": "string" + } + }, + "NetworkDisabled": { + "type": "boolean", + "description": "Disable networking for the container." + }, + "MacAddress": { + "type": "string", + "description": "MAC address of the container." + }, + "OnBuild": { + "type": "array", + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.", + "items": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop a container as a string or unsigned integer.", + "default": "SIGTERM" + }, + "StopTimeout": { + "type": "integer", + "description": "Timeout to stop a container in seconds." + }, + "Shell": { + "type": "array", + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.", + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a container that is portable between hosts" + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Bridge": { + "type": "string", + "description": "Name of the network'a bridge (for example, `docker0`).", + "example": "docker0" + }, + "SandboxID": { + "type": "string", + "description": "SandboxID uniquely represents a container's network stack.", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "HairpinMode": { + "type": "boolean", + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n", + "example": false + }, + "LinkLocalIPv6Address": { + "type": "string", + "description": "IPv6 unicast address using the link-local prefix.", + "example": "fe80::42:acff:fe11:1" + }, + "LinkLocalIPv6PrefixLen": { + "type": "integer", + "description": "Prefix length of the IPv6 unicast address.", + "example": 64 + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "SandboxKey": { + "type": "string", + "description": "SandboxKey identifies the sandbox", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "SecondaryIPv6Addresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "EndpointID": { + "type": "string", + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 64 + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address for this network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8:2::100" + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the container on the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "Information about all networks that the container is connected to.\n" + } + }, + "description": "NetworkSettings exposes the network settings in the API" + }, + "Address": { + "type": "object", + "properties": { + "Addr": { + "type": "string", + "description": "IP address." + }, + "PrefixLen": { + "type": "integer", + "description": "Mask length of the IP address." + } + }, + "description": "Address represents an IPv4 or IPv6 IP address." + }, + "PortMap": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for both `tcp` and `udp`, two separate\nentries are added to the mapping table.\n", + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ] + } + }, + "PortBinding": { + "type": "object", + "properties": { + "HostIp": { + "type": "string", + "description": "Host IP address that the container's port is mapped to.", + "example": "127.0.0.1" + }, + "HostPort": { + "type": "string", + "description": "Host port number that the container's port is mapped to.", + "example": "4443" + } + }, + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "nullable": true, + "x-nullable": true + }, + "GraphDriverData": { + "required": [ + "Data", + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": false + } + }, + "description": "Information about a container's graph driver." + }, + "Image": { + "required": [ + "Architecture", + "Author", + "Comment", + "Container", + "Created", + "DockerVersion", + "GraphDriver", + "Id", + "Os", + "Parent", + "RootFS", + "Size", + "VirtualSize" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "RepoTags": { + "type": "array", + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "items": { + "type": "string" + } + }, + "Parent": { + "type": "string", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "string", + "nullable": false + }, + "Container": { + "type": "string", + "nullable": false + }, + "ContainerConfig": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "DockerVersion": { + "type": "string", + "nullable": false + }, + "Author": { + "type": "string", + "nullable": false + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "Architecture": { + "type": "string", + "nullable": false + }, + "Os": { + "type": "string", + "nullable": false + }, + "OsVersion": { + "type": "string" + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "VirtualSize": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "RootFS": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + } + }, + "BaseLayer": { + "type": "string" + } + } + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "format": "dateTime" + } + } + } + } + }, + "ImageSummary": { + "required": [ + "Containers", + "Created", + "Id", + "Labels", + "ParentId", + "RepoDigests", + "RepoTags", + "SharedSize", + "Size", + "VirtualSize" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "ParentId": { + "type": "string", + "nullable": false + }, + "RepoTags": { + "type": "array", + "nullable": false, + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "nullable": false, + "items": { + "type": "string" + } + }, + "Created": { + "type": "integer", + "nullable": false + }, + "Size": { + "type": "integer", + "nullable": false + }, + "SharedSize": { + "type": "integer", + "nullable": false + }, + "VirtualSize": { + "type": "integer", + "nullable": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": false + }, + "Containers": { + "type": "integer", + "nullable": false + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "email": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "required": [ + "Driver", + "Labels", + "Mountpoint", + "Name", + "Options", + "Scope" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "nullable": false + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "nullable": false + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "nullable": false + }, + "CreatedAt": { + "type": "string", + "description": "Date/Time the volume was created.", + "format": "dateTime" + }, + "Status": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide, or `local` for machine level.", + "nullable": false, + "default": "local", + "enum": [ + "local", + "global" + ] + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The driver specific options used when creating the volume." + }, + "UsageData": { + "required": [ + "RefCount", + "Size" + ], + "type": "object", + "properties": { + "Size": { + "type": "integer", + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "nullable": false + }, + "RefCount": { + "type": "integer", + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "nullable": false + } + }, + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "nullable": true + } + }, + "example": { + "Name": "tardis", + "Driver": "custom", + "Mountpoint": "/var/lib/docker/volumes/tardis", + "Status": { + "hello": "world" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Scope": "local", + "CreatedAt": "2016-06-07T20:31:11.853781916Z" + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Scope": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "Internal": { + "type": "boolean" + }, + "Attachable": { + "type": "boolean" + }, + "Ingress": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/NetworkContainer" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Name": "net01", + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Created": "2016-10-19T04:33:30.360899459Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.19.0.0/16", + "Gateway": "172.19.0.1" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": false, + "Attachable": false, + "Ingress": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "IPAM": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "description": "Name of the IPAM driver to use.", + "default": "default" + }, + "Config": { + "type": "array", + "description": "List of IPAM configuration options, specified as a map: `{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }`", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "Options": { + "type": "array", + "description": "Driver-specific options, specified as a map.", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EndpointID": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "ImageID": { + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "description": "Image ID or Digest", + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The error message.", + "nullable": false + } + }, + "description": "Represents an error.", + "example": { + "message": "Something went wrong." + } + }, + "IdResponse": { + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The id of the newly created object.", + "nullable": false + } + }, + "description": "Response to an API call that returns just an Id" + }, + "EndpointSettings": { + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "example": [ + "container_1", + "container_2" + ], + "items": { + "type": "string" + } + }, + "Aliases": { + "type": "array", + "example": [ + "server_x", + "server_y" + ], + "items": { + "type": "string" + } + }, + "NetworkID": { + "type": "string", + "description": "Unique ID of the network.\n", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "type": "string", + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for this network.\n", + "example": "172.17.0.1" + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address.\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address.\n", + "example": "2001:db8:2::100" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address.\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n", + "format": "int64", + "example": 64 + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the endpoint on this network.\n", + "example": "02:42:ac:11:00:04" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "description": "Configuration for a network endpoint." + }, + "EndpointIPAMConfig": { + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "example": [ + "169.254.34.68", + "fe80::3468" + ], + "items": { + "type": "string" + } + } + }, + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "nullable": true, + "x-nullable": true + }, + "PluginMount": { + "required": [ + "Description", + "Destination", + "Name", + "Options", + "Settable", + "Source", + "Type" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "example": [ + "rbind", + "rw" + ], + "items": { + "type": "string" + } + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginDevice": { + "required": [ + "Description", + "Name", + "Path", + "Settable" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginEnv": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginInterfaceType": { + "required": [ + "Capability", + "Prefix", + "Version" + ], + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "nullable": false + }, + "Capability": { + "type": "string", + "nullable": false + }, + "Version": { + "type": "string", + "nullable": false + } + }, + "nullable": false, + "x-nullable": false + }, + "Plugin": { + "required": [ + "Config", + "Enabled", + "Name", + "Settings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "type": "boolean", + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "nullable": false, + "example": true + }, + "Settings": { + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "type": "object", + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + "DEBUG=0" + ], + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "description": "Settings that can be modified by users.", + "nullable": false + }, + "PluginReference": { + "type": "string", + "description": "plugin remote reference used to push/pull the plugin", + "nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "required": [ + "Args", + "Description", + "Documentation", + "Entrypoint", + "Env", + "Interface", + "IpcHost", + "Linux", + "Mounts", + "Network", + "PidHost", + "PropagatedMount", + "WorkDir" + ], + "type": "object", + "properties": { + "DockerVersion": { + "type": "string", + "description": "Docker Version used to create the plugin", + "nullable": false, + "example": "17.06.0-ce" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "required": [ + "Socket", + "Types" + ], + "type": "object", + "properties": { + "Types": { + "type": "array", + "example": [ + "docker.volumedriver/1.0" + ], + "items": { + "$ref": "#/components/schemas/PluginInterfaceType" + } + }, + "Socket": { + "type": "string", + "nullable": false, + "example": "plugins.sock" + } + }, + "description": "The interface between Docker and the plugin", + "nullable": false + }, + "Entrypoint": { + "type": "array", + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ], + "items": { + "type": "string" + } + }, + "WorkDir": { + "type": "string", + "nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "host" + } + }, + "nullable": false + }, + "Linux": { + "required": [ + "AllowAllDevices", + "Capabilities", + "Devices" + ], + "type": "object", + "properties": { + "Capabilities": { + "type": "array", + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "AllowAllDevices": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Value": "0" + } + ], + "items": { + "$ref": "#/components/schemas/PluginEnv" + } + }, + "Args": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "args" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ], + "items": { + "type": "string" + } + } + } + } + }, + "description": "The config of a plugin.", + "nullable": false + } + }, + "description": "A plugin for the Engine API" + }, + "ObjectVersion": { + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + }, + "description": "The version number of the object such as node, service, etc. This is needed to avoid conflicting writes.\nThe client must send the version number along with the modified specification when updating these objects.\nThis approach ensures safe concurrency and determinism in that the change on the object\nmay not be applied if the version number has changed from the last read. In other words,\nif two update requests specify the same base version, only one of the requests can succeed.\nAs a result, two separate update requests that happen at the same time will not\nunintentionally overwrite each other.\n" + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name for the node.", + "example": "my-node" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Role": { + "type": "string", + "description": "Role of the node.", + "example": "manager", + "enum": [ + "worker", + "manager" + ] + }, + "Availability": { + "type": "string", + "description": "Availability of the node.", + "example": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + }, + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n" + }, + "Platform": { + "type": "object", + "properties": { + "Architecture": { + "type": "string", + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "example": "x86_64" + }, + "OS": { + "type": "string", + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "example": "linux" + } + }, + "description": "Platform represents the platform (Arch/OS).\n" + }, + "EngineDescription": { + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "logentries" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ], + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + } + }, + "description": "EngineDescription provides information about an engine." + }, + "TLSInfo": { + "type": "object", + "properties": { + "TrustRoot": { + "type": "string", + "description": "The root CA certificate(s) that are used to validate leaf TLS certificates" + }, + "CertIssuerSubject": { + "type": "string", + "description": "The base64-url-safe-encoded raw subject bytes of the issuer" + }, + "CertIssuerPublicKey": { + "type": "string", + "description": "The base64-url-safe-encoded raw public key bytes of the issuer" + } + }, + "description": "Information about the issuer of leaf TLS certificates and the trusted root CA certificate", + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "type": "string", + "description": "IP address of the node.", + "example": "172.17.0.2" + } + }, + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n" + }, + "NodeState": { + "type": "string", + "description": "NodeState represents the state of a node.", + "example": "ready", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ] + }, + "ManagerStatus": { + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "example": true, + "default": false + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "type": "string", + "description": "The IP address and port at which the manager is reachable.\n", + "example": "10.0.0.46:2377" + } + }, + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "nullable": true, + "x-nullable": true + }, + "Reachability": { + "type": "string", + "description": "Reachability represents the reachability of a node.", + "example": "reachable", + "enum": [ + "unknown", + "unreachable", + "reachable" + ] + }, + "SwarmSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the swarm.", + "example": "default" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "type": "integer", + "description": "The number of historic tasks to keep per instance or node. If negative, never remove completed or failed tasks.", + "format": "int64", + "example": 10 + } + }, + "description": "Orchestration configuration.", + "nullable": true + }, + "Raft": { + "type": "object", + "properties": { + "SnapshotInterval": { + "type": "integer", + "description": "The number of log entries between snapshots.", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "type": "integer", + "description": "The number of snapshots to keep beyond the current snapshot.", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "type": "integer", + "description": "The number of log entries to keep around to sync up slow followers after a snapshot is created.", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "type": "integer", + "description": "The number of ticks that a follower will wait for a message from the leader before becoming a candidate and starting an election. `ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate directly to seconds currently, but this is NOT guaranteed.\n", + "example": 3 + }, + "HeartbeatTick": { + "type": "integer", + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks, the leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate directly to seconds currently, but this is NOT guaranteed.\n", + "example": 1 + } + }, + "description": "Raft configuration." + }, + "Dispatcher": { + "type": "object", + "properties": { + "HeartbeatPeriod": { + "type": "integer", + "description": "The delay for an agent to send a heartbeat to the dispatcher.", + "format": "int64", + "example": 5000000000 + } + }, + "description": "Dispatcher configuration.", + "nullable": true + }, + "CAConfig": { + "type": "object", + "properties": { + "NodeCertExpiry": { + "type": "integer", + "description": "The duration node certificates are issued for.", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "type": "array", + "description": "Configuration for forwarding signing requests to an external certificate authority.", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Protocol for communication with the external CA (currently only `cfssl` is supported).", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "type": "string", + "description": "URL where certificate signing requests should be sent." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object with key/value pairs that are interpreted as protocol-specific options for the external CA driver." + }, + "CACert": { + "type": "string", + "description": "The root CA certificate (in PEM format) this external CA uses to issue TLS certificates (assumed to be to the current swarm root CA certificate if not provided)." + } + } + } + }, + "SigningCACert": { + "type": "string", + "description": "The desired signing CA certificate for all swarm node TLS leaf certificates, in PEM format." + }, + "SigningCAKey": { + "type": "string", + "description": "The desired signing CA key for all swarm node TLS leaf certificates, in PEM format." + }, + "ForceRotate": { + "type": "integer", + "description": "An integer whose purpose is to force swarm to generate a new signing CA certificate and key, if none have been specified in `SigningCACert` and `SigningCAKey`", + "format": "uint64" + } + }, + "description": "CA configuration.", + "nullable": true + }, + "EncryptionConfig": { + "type": "object", + "properties": { + "AutoLockManagers": { + "type": "boolean", + "description": "If set, generate a key and use it to lock data stored on the managers.", + "example": false + } + }, + "description": "Parameters related to encryption-at-rest." + }, + "TaskDefaults": { + "type": "object", + "properties": { + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The log driver to use as a default for new tasks.\n", + "example": "json-file" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "example": { + "max-file": "10", + "max-size": "100m" + } + } + }, + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n" + } + }, + "description": "Defaults for creating tasks in this cluster." + } + }, + "description": "User modifiable swarm configuration." + }, + "ClusterInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the swarm.", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "type": "boolean", + "description": "Whether there is currently a root CA rotation in progress for the swarm", + "example": false + } + }, + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "nullable": true, + "x-nullable": true + }, + "JoinTokens": { + "type": "object", + "properties": { + "Worker": { + "type": "string", + "description": "The token workers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "type": "string", + "description": "The token managers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + }, + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n" + }, + "Swarm": { + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name or 'alias' to use for the plugin." + }, + "Remote": { + "type": "string", + "description": "The plugin image reference to use." + }, + "Disabled": { + "type": "boolean", + "description": "Disable the plugin once scheduled." + }, + "PluginPrivilege": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the plugin." + } + } + }, + "description": "Invalid when specified with `ContainerSpec`. *(Experimental release only.)*" + }, + "ContainerSpec": { + "type": "object", + "properties": { + "Image": { + "type": "string", + "description": "The image name to use for the container" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value data." + }, + "Command": { + "type": "array", + "description": "The command to be run in the image.", + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "description": "Arguments to the command.", + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `VAR=value`.", + "items": { + "type": "string" + } + }, + "Dir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "User": { + "type": "string", + "description": "The user inside the container." + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "properties": { + "CredentialSpec": { + "type": "object", + "properties": { + "File": { + "type": "string", + "description": "Load credential spec from this file. The file is read by the daemon, and must be present in the\n`CredentialSpecs` subdirectory in the docker data directory, which defaults to\n`C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads `C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File` and `CredentialSpec.Registry` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows registry. The specified registry value must be\nlocated in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File` and `CredentialSpec.Registry` are mutually exclusive.\n" + } + }, + "description": "CredentialSpec for managed service account (Windows only)" + }, + "SELinuxContext": { + "type": "object", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + }, + "description": "SELinux labels of the container" + } + }, + "description": "Security options for the container" + }, + "TTY": { + "type": "boolean", + "description": "Whether a pseudo-TTY should be allocated." + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`" + }, + "ReadOnly": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to containers created as part of the service.", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop the container." + }, + "StopGracePeriod": { + "type": "integer", + "description": "Amount of time to wait for the container to terminate before forcefully killing it.", + "format": "int64" + }, + "HealthCheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "type": "object", + "properties": { + "Nameservers": { + "type": "array", + "description": "The IP addresses of the name servers.", + "items": { + "type": "string" + } + }, + "Search": { + "type": "array", + "description": "A search list for host-name lookup.", + "items": { + "type": "string" + } + }, + "Options": { + "type": "array", + "description": "A list of internal resolver variables to be modified (e.g., `debug`, `ndots:3`, etc.).", + "items": { + "type": "string" + } + } + }, + "description": "Specification for DNS related configurations in resolver configuration file (`resolv.conf`)." + }, + "Secrets": { + "type": "array", + "description": "Secrets contains references to zero or more secrets that will be exposed to the service.", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem." + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file." + }, + "SecretID": { + "type": "string", + "description": "SecretID represents the ID of the specific secret that we're referencing." + }, + "SecretName": { + "type": "string", + "description": "SecretName is the name of the secret that this references, but this is just provided for\nlookup/display purposes. The secret in the reference will be identified by its ID.\n" + } + } + } + }, + "Configs": { + "type": "array", + "description": "Configs contains references to zero or more configs that will be exposed to the service.", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem." + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file." + }, + "ConfigID": { + "type": "string", + "description": "ConfigID represents the ID of the specific config that we're referencing." + }, + "ConfigName": { + "type": "string", + "description": "ConfigName is the name of the config that this references, but this is just provided for\nlookup/display purposes. The config in the reference will be identified by its ID.\n" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service. (Windows only)", + "enum": [ + "default", + "process", + "hyperv" + ] + } + }, + "description": "Invalid when specified with `PluginSpec`." + }, + "Resources": { + "type": "object", + "properties": { + "Limits": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Reservation": { + "$ref": "#/components/schemas/ResourceObject" + } + }, + "description": "Resource requirements which apply to each individual container created as part of the service." + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Condition": { + "type": "string", + "description": "Condition for restart.", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "type": "integer", + "description": "Delay between restart attempts.", + "format": "int64" + }, + "MaxAttempts": { + "type": "integer", + "description": "Maximum attempts to restart a given container before giving up (default value is 0, which is ignored).", + "format": "int64", + "default": 0 + }, + "Window": { + "type": "integer", + "description": "Windows is the time window used to evaluate the restart policy (default value is 0, which is unbounded).", + "format": "int64", + "default": 0 + } + }, + "description": "Specification for the restart policy which applies to containers created as part of this service." + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "description": "An array of constraints.", + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production" + ], + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "description": "Preferences provide a way to make the scheduler aware of factors such as topology. They are provided in order from highest to lowest precedence.", + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ], + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string", + "description": "label descriptor, such as engine.labels.az" + } + } + } + } + } + }, + "Platforms": { + "type": "array", + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "type": "integer", + "description": "A counter that triggers an update even if no relevant parameters have been changed." + }, + "Runtime": { + "type": "string", + "description": "Runtime is the type of runtime specified for the task executor." + }, + "Networks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "Specifies the log driver to use for tasks created from this spec. If not present, the default one for the swarm will be used, finally falling back to the engine default if not specified." + } + }, + "description": "User modifiable task configuration." + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected" + ] + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the task." + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "type": "string", + "description": "Name of the task." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "type": "string", + "description": "The ID of the service this task is part of." + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "type": "string", + "description": "The ID of the node that this task is on." + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "type": "object", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + } + } + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the service." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object", + "properties": {} + } + }, + "description": "Scheduling mode for the service." + }, + "UpdateConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be updated in one iteration (0 means unlimited parallelism).", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between updates, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an updated task fails to run, or stops running during the update.", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each updated task for failures, in nanoseconds.", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during an update before the failure action is invoked, specified as a floating point number between 0 and 1." + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling out an updated task. Either the old task is shut down before the new task is started, or the new task is started before the old task is shut down.", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the update strategy of the service." + }, + "RollbackConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be rolled back in one iteration (0 means unlimited parallelism).", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between rollback iterations, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an rolled back task fails to run, or stops running during the rollback.", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each rolled back task for failures, in nanoseconds.", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during a rollback before the failure action is invoked, specified as a floating point number between 0 and 1." + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling back a task. Either the old task is shut down before the new task is started, or the new task is started before the old task is shut down.", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the rollback strategy of the service." + }, + "Networks": { + "type": "array", + "description": "Array of network names or IDs to attach the service to.", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + }, + "description": "User modifiable configuration for a service." + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp" + ] + }, + "TargetPort": { + "type": "integer", + "description": "The port inside the container." + }, + "PublishedPort": { + "type": "integer", + "description": "The port on the swarm hosts." + }, + "PublishMode": { + "type": "string", + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "example": "ingress", + "default": "ingress", + "enum": [ + "ingress", + "host" + ] + } + } + }, + "EndpointSpec": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "description": "The mode of resolution to use for internal load balancing between tasks.", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "type": "array", + "description": "List of exposed ports that this service is accessible on from the outside. Ports can only be provided if `vip` resolution mode is used.", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "Properties that can be configured to access and load balance a service." + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + }, + "description": "The status of a service update." + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Untagged": { + "type": "string", + "description": "The image ID of an image that was untagged" + }, + "Deleted": { + "type": "string", + "description": "The image ID of an image that was deleted" + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "description": "Optional warning messages", + "items": { + "type": "string" + } + } + }, + "example": { + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + }, + "ContainerSummary": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of this container", + "x-go-name": "ID" + }, + "Names": { + "type": "array", + "description": "The names that this container has been given", + "items": { + "type": "string" + } + }, + "Image": { + "type": "string", + "description": "The name of the image used when creating this container" + }, + "ImageID": { + "type": "string", + "description": "The ID of the image that this container was created from" + }, + "Command": { + "type": "string", + "description": "Command to run when starting the container" + }, + "Created": { + "type": "integer", + "description": "When the container was created", + "format": "int64" + }, + "Ports": { + "type": "array", + "description": "The ports exposed by this container", + "items": { + "$ref": "#/components/schemas/Port" + } + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container", + "format": "int64" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "State": { + "type": "string", + "description": "The state of this container (e.g. `Exited`)" + }, + "Status": { + "type": "string", + "description": "Additional human-readable status of this container (e.g. `Exit 0`)" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "description": "A summary of the container's network settings" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + } + } + } + }, + "Driver": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver.", + "nullable": false, + "example": "some-driver" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key/value map of driver-specific options.", + "nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + }, + "description": "Driver represents a driver (network, logging, secrets)." + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the secret." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-3.2))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "example": "" + }, + "Driver": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the config." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-3.2))\nconfig data.\n" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "type": "integer", + "description": "Total number of containers on the host.", + "example": 14 + }, + "ContainersRunning": { + "type": "integer", + "description": "Number of containers with status `\"running\"`.\n", + "example": 3 + }, + "ContainersPaused": { + "type": "integer", + "description": "Number of containers with status `\"paused\"`.\n", + "example": 1 + }, + "ContainersStopped": { + "type": "integer", + "description": "Number of containers with status `\"stopped\"`.\n", + "example": 10 + }, + "Images": { + "type": "integer", + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "example": 508 + }, + "Driver": { + "type": "string", + "description": "Name of the storage driver in use.", + "example": "overlay2" + }, + "DriverStatus": { + "type": "array", + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "DockerRootDir": { + "type": "string", + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "example": "/var/lib/docker" + }, + "SystemStatus": { + "type": "array", + "description": "Status information about this node (standalone Swarm API).\n\n


\n\n> **Note**: The information returned in this field is only propagated\n> by the Swarm standalone API, and is empty (`null`) when using\n> built-in swarm mode.\n", + "example": [ + [ + "Role", + "primary" + ], + [ + "State", + "Healthy" + ], + [ + "Strategy", + "spread" + ], + [ + "Filters", + "health, port, containerslots, dependency, affinity, constraint, whitelist" + ], + [ + "Nodes", + "2" + ], + [ + " swarm-agent-00", + "192.168.99.102:2376" + ], + [ + " └ ID", + "5CT6:FBGO:RVGO:CZL4:PB2K:WCYN:2JSV:KSHH:GGFW:QOPG:6J5Q:IOZ2|192.168.99.102:2376" + ], + [ + " └ Status", + "Healthy" + ], + [ + " └ Containers", + "1 (1 Running, 0 Paused, 0 Stopped)" + ], + [ + " └ Reserved CPUs", + "0 / 1" + ], + [ + " └ Reserved Memory", + "0 B / 1.021 GiB" + ], + [ + " └ Labels", + "kernelversion=4.4.74-boot2docker, operatingsystem=Boot2Docker 17.06.0-ce (TCL 7.2); HEAD : 0672754 - Thu Jun 29 00:06:31 UTC 2017, ostype=linux, provider=virtualbox, storagedriver=aufs" + ], + [ + " └ UpdatedAt", + "2017-08-09T10:03:46Z" + ], + [ + " └ ServerVersion", + "17.06.0-ce" + ], + [ + " swarm-manager", + "192.168.99.101:2376" + ], + [ + " └ ID", + "TAMD:7LL3:SEF7:LW2W:4Q2X:WVFH:RTXX:JSYS:XY2P:JEHL:ZMJK:JGIW|192.168.99.101:2376" + ], + [ + " └ Status", + "Healthy" + ], + [ + " └ Containers", + "2 (2 Running, 0 Paused, 0 Stopped)" + ], + [ + " └ Reserved CPUs", + "0 / 1" + ], + [ + " └ Reserved Memory", + "0 B / 1.021 GiB" + ], + [ + " └ Labels", + "kernelversion=4.4.74-boot2docker, operatingsystem=Boot2Docker 17.06.0-ce (TCL 7.2); HEAD : 0672754 - Thu Jun 29 00:06:31 UTC 2017, ostype=linux, provider=virtualbox, storagedriver=aufs" + ], + [ + " └ UpdatedAt", + "2017-08-09T10:04:11Z" + ], + [ + " └ ServerVersion", + "17.06.0-ce" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "type": "boolean", + "description": "Indicates if the host has memory limit support enabled.", + "example": true + }, + "SwapLimit": { + "type": "boolean", + "description": "Indicates if the host has memory swap limit support enabled.", + "example": true + }, + "KernelMemory": { + "type": "boolean", + "description": "Indicates if the host has kernel memory limit support enabled.", + "example": true + }, + "CpuCfsPeriod": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by the host.", + "example": true + }, + "CpuCfsQuota": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by the host.", + "example": true + }, + "CPUShares": { + "type": "boolean", + "description": "Indicates if CPU Shares limiting is supported by the host.", + "example": true + }, + "CPUSet": { + "type": "boolean", + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "example": true + }, + "OomKillDisable": { + "type": "boolean", + "description": "Indicates if OOM killer disable is supported on the host." + }, + "IPv4Forwarding": { + "type": "boolean", + "description": "Indicates IPv4 forwarding is enabled.", + "example": true + }, + "BridgeNfIptables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "example": true + }, + "BridgeNfIp6tables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "example": true + }, + "Debug": { + "type": "boolean", + "description": "Indicates if the daemon is running in debug-mode / with debug-level logging enabled.", + "example": true + }, + "NFd": { + "type": "integer", + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 64 + }, + "NGoroutines": { + "type": "integer", + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 174 + }, + "SystemTime": { + "type": "string", + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "type": "string", + "description": "The logging driver to use as a default for new containers.\n" + }, + "CgroupDriver": { + "type": "string", + "description": "The driver to use for managing cgroups.\n", + "example": "cgroupfs", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd" + ] + }, + "NEventsListener": { + "type": "integer", + "description": "Number of event listeners subscribed.", + "example": 30 + }, + "KernelVersion": { + "type": "string", + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "example": "4.9.38-moby" + }, + "OperatingSystem": { + "type": "string", + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "example": "Alpine Linux v3.5" + }, + "OSType": { + "type": "string", + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "linux" + }, + "Architecture": { + "type": "string", + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "x86_64" + }, + "NCPU": { + "type": "integer", + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "example": 4 + }, + "MemTotal": { + "type": "integer", + "description": "Total amount of physical memory available on the host, in kilobytes (kB).\n", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "type": "string", + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "example": "https://index.docker.io/v1/", + "default": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "type": "string", + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "http://user:pass@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "type": "string", + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "https://user:pass@proxy.corp.example.com:4443" + }, + "NoProxy": { + "type": "string", + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "*.local, 169.254/16" + }, + "Name": { + "type": "string", + "description": "Hostname of the host.", + "example": "node5.corp.example.com" + }, + "Labels": { + "type": "array", + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "example": [ + "storage=ssd", + "production" + ], + "items": { + "type": "string" + } + }, + "ExperimentalBuild": { + "type": "boolean", + "description": "Indicates if experimental features are enabled on the daemon.\n", + "example": true + }, + "ServerVersion": { + "type": "string", + "description": "Version string of the daemon.\n\n> **Note**: the [standalone Swarm API](https://docs.docker.com/swarm/swarm-api/)\n> returns the Swarm version instead of the daemon version, for example\n> `swarm/1.2.8`.\n", + "example": "17.06.0-ce" + }, + "ClusterStore": { + "type": "string", + "description": "URL of the distributed storage backend.\n\n\nThe storage backend is used for multihost networking (to store\nnetwork and endpoint information) and by the node discovery mechanism.\n\n


\n\n> **Note**: This field is only propagated when using standalone Swarm\n> mode, and overlay networking using an external k/v store. Overlay\n> networks with Swarm mode enabled use the built-in raft store, and\n> this field will be empty.\n", + "example": "consul://consul.corp.example.com:8600/some/path" + }, + "ClusterAdvertise": { + "type": "string", + "description": "The network endpoint that the Engine advertises for the purpose of\nnode discovery. ClusterAdvertise is a `host:port` combination on which\nthe daemon is reachable by other hosts.\n\n


\n\n> **Note**: This field is only propagated when using standalone Swarm\n> mode, and overlay networking using an external k/v store. Overlay\n> networks with Swarm mode enabled use the built-in raft store, and\n> this field will be empty.\n", + "example": "node5.corp.example.com:8000" + }, + "Runtimes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "example": { + "runc": { + "path": "docker-runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "type": "string", + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "example": "runc", + "default": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "type": "boolean", + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "example": false, + "default": false + }, + "Isolation": { + "type": "string", + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "InitBinary": { + "type": "string", + "description": "Name and, optional, path of the the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "type": "array", + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, and user-namespaces (userns).\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns" + ], + "items": { + "type": "string" + } + } + } + }, + "PluginsInfo": { + "type": "object", + "properties": { + "Volume": { + "type": "array", + "description": "Names of available volume-drivers, and network-driver plugins.", + "example": [ + "local" + ], + "items": { + "type": "string" + } + }, + "Network": { + "type": "array", + "description": "Names of available network-drivers, and network-driver plugins.", + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ], + "items": { + "type": "string" + } + }, + "Authorization": { + "type": "array", + "description": "Names of available authorization plugins.", + "example": [ + "img-authz-plugin", + "hbm" + ], + "items": { + "type": "string" + } + }, + "Log": { + "type": "array", + "description": "Names of available logging-drivers, and logging-driver plugins.", + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "logentries", + "splunk", + "syslog" + ], + "items": { + "type": "string" + } + } + }, + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n" + }, + "RegistryServiceConfig": { + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "type": "array", + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "AllowNondistributableArtifactsHostnames": { + "type": "array", + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `[:]` or `[:]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ], + "items": { + "type": "string" + } + }, + "InsecureRegistryCIDRs": { + "type": "array", + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "type": "array", + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ], + "items": { + "type": "string" + } + } + }, + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "nullable": true, + "x-nullable": true + }, + "IndexInfo": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the registry, such as \"docker.io\".\n", + "example": "docker.io" + }, + "Mirrors": { + "type": "array", + "description": "List of mirrors, expressed as URIs.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ], + "items": { + "type": "string" + } + }, + "Secure": { + "type": "boolean", + "description": "Indicates if the the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "example": true + }, + "Official": { + "type": "boolean", + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "example": true + } + }, + "description": "IndexInfo contains information about a registry.", + "nullable": true, + "x-nullable": true + }, + "Runtime": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "type": "array", + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "items": { + "type": "string" + } + } + }, + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n" + }, + "Commit": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Actual commit ID of external tool.", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + }, + "Expected": { + "type": "string", + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + } + }, + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n" + }, + "SwarmInfo": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm.", + "example": "k67qz4598weg5unwwffg6z1m1", + "default": "" + }, + "NodeAddr": { + "type": "string", + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "example": "10.0.0.46", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "example": true, + "default": false + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "type": "array", + "description": "List of ID's and addresses of other managers in the swarm.\n", + "nullable": true, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "items": { + "$ref": "#/components/schemas/PeerNode" + } + }, + "Nodes": { + "type": "integer", + "description": "Total number of nodes in the swarm.", + "nullable": true, + "example": 4 + }, + "Managers": { + "type": "integer", + "description": "Total number of managers in the swarm.", + "nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + }, + "description": "Represents generic information about swarm.\n" + }, + "LocalNodeState": { + "type": "string", + "description": "Current local status of this node.", + "example": "active", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ] + }, + "PeerNode": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm." + }, + "Addr": { + "type": "string", + "description": "IP address and ports at which this node can be reached.\n" + } + }, + "description": "Represents a peer-node in the swarm" + } + } + } +} \ No newline at end of file diff --git a/app/vendor/beluga-php/docker-php-api/spec/v1.41.json b/app/vendor/beluga-php/docker-php-api/spec/v1.41.json new file mode 100644 index 000000000..5b645f059 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/spec/v1.41.json @@ -0,0 +1,16074 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Docker Engine API", + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.41) is used.\nFor example, calling `/info` is the same as calling `/v1.41/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"email\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n", + "version": "1.41", + "x-logo": { + "url": "https://docs.docker.com/images/logo-docker-main.png" + } + }, + "servers": [ + { + "url": "/v1.41" + } + ], + "tags": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "x-displayName": "Networks" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "x-displayName": "Volumes" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "x-displayName": "Exec" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "x-displayName": "Swarm" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "x-displayName": "Nodes" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Services" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Tasks" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Secrets" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerSummary" + }, + "example": [ + { + "Id": "8dfafdbc3a40", + "Names": [ + "/boring_feynman" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 1", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + }, + { + "Id": "9cd87474be90", + "Names": [ + "/coolName" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 222222", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:08" + } + } + }, + "Mounts": [] + }, + { + "Id": "3176a2479c92", + "Names": [ + "/sleepy_dog" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:06" + } + } + }, + "Mounts": [] + }, + { + "Id": "4cb07b47f9fb", + "Names": [ + "/running_cat" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:05" + } + } + }, + "Mounts": [] + } + ] + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/create": { + "post": { + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$", + "type": "string" + } + } + ], + "requestBody": { + "description": "Container to create", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created container", + "nullable": false + }, + "Warnings": { + "type": "array", + "description": "Warnings encountered when creating the container", + "nullable": false, + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerCreate operation" + }, + "example": { + "Id": "e90e34656806", + "Warnings": [] + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/containers/{id}/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerInspectResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the container" + }, + "Created": { + "type": "string", + "description": "The time the container was created" + }, + "Path": { + "type": "string", + "description": "The path to the command being run" + }, + "Args": { + "type": "array", + "description": "The arguments to the command being run", + "items": { + "type": "string" + } + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "type": "string", + "description": "The container's image ID" + }, + "ResolvConfPath": { + "type": "string" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "Driver": { + "type": "string" + }, + "Platform": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "AppArmorProfile": { + "type": "string" + }, + "ExecIDs": { + "type": "array", + "description": "IDs of exec instances that are running in the container.", + "nullable": true, + "items": { + "type": "string" + } + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this\ncontainer.\n", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container.", + "format": "int64" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "example": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "exit 0" + ] + }, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "StopSignal": "SIGTERM", + "StopTimeout": 10 + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "ExecIDs": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "HostConfig": { + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuPercent": 80, + "CpuShares": 0, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "Devices": [], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "IpcMode": "", + "LxcConf": [], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "KernelMemory": 0, + "OomKillDisable": false, + "OomScoreAdj": 500, + "NetworkMode": "bridge", + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Type": "json-file" + }, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "SandboxKey": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "MacAddress": "", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2019-12-22T10:59:05.6385933Z", + "End": "2019-12-22T10:59:05.8078452Z", + "ExitCode": 0, + "Output": "" + } + ] + }, + "OOMKilled": false, + "Dead": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ], + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + }, + "text/plain": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/plain": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified\n- `1`: Added\n- `2`: Deleted\n", + "operationId": "ContainerChanges", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ContainerChangeResponseItem", + "required": [ + "Kind", + "Path" + ], + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Path to file that has changed", + "nullable": false + }, + "Kind": { + "type": "integer", + "description": "Kind of change", + "format": "uint8", + "nullable": false + } + }, + "description": "change item in response to ContainerChanges operation", + "x-go-name": "ContainerChangeResponseItem" + } + }, + "example": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "tags": [ + "Container" + ], + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache`\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "example": { + "read": "2015-01-08T22:57:31.547920715Z", + "pids_stats": { + "current": 3 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "memory_stats": { + "stats": { + "total_pgmajfault": 0, + "cache": 0, + "mapped_file": 0, + "total_inactive_file": 0, + "pgpgout": 414, + "rss": 6537216, + "total_mapped_file": 0, + "writeback": 0, + "unevictable": 0, + "pgpgin": 477, + "total_unevictable": 0, + "pgmajfault": 0, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_writeback": 0, + "total_inactive_anon": 0, + "rss_huge": 6291456, + "hierarchical_memory_limit": 67108864, + "total_pgfault": 964, + "total_active_file": 0, + "active_anon": 6537216, + "total_active_anon": 6537216, + "total_pgpgout": 414, + "total_cache": 0, + "inactive_anon": 0, + "active_file": 0, + "pgfault": 964, + "inactive_file": 0, + "total_pgpgin": 477 + }, + "max_usage": 6651904, + "usage": 6537216, + "failcnt": 0, + "limit": 67108864 + }, + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100215355, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 739306590000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100093996, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 9492140000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already started", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already stopped", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "tags": [ + "Container" + ], + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`)", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/update": { + "post": { + "tags": [ + "Container" + ], + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "title": "ContainerUpdateResponse", + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerUpdate operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "update" + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "New name for the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach/ws": { + "get": { + "tags": [ + "Container" + ], + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition, either\n'not-running' (default), 'next-exit', or 'removed'.\n", + "schema": { + "type": "string", + "default": "not-running" + } + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "type": "object", + "properties": { + "StatusCode": { + "type": "integer", + "description": "Exit code of the container", + "nullable": false + }, + "Error": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Details of an error" + } + }, + "description": "container waiting error, if any" + } + }, + "description": "OK response to ContainerWait operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "type": "object", + "properties": { + "ErrorResponse": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "message": { + "type": "string", + "description": "The error message. Either \"must specify path parameter\"\n(path cannot be empty) or \"not a directory\" (path was\nasserted to be a directory but exists as a file).\n", + "nullable": false + } + } + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.", + "operationId": "PutContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The content was extracted successfully", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + }, + "head": { + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + }, + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ErrorResponse": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "message": { + "type": "string", + "description": "The error message. Either \"must specify path parameter\"\n(path cannot be empty) or \"not a directory\" (path was\nasserted to be a directory but exists as a file).\n", + "nullable": false + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "ErrorResponse": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "message": { + "type": "string", + "description": "The error message. Either \"must specify path parameter\"\n(path cannot be empty) or \"not a directory\" (path was\nasserted to be a directory but exists as a file).\n", + "nullable": false + } + } + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/prune": { + "post": { + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ContainerPruneResponse", + "type": "object", + "properties": { + "ContainersDeleted": { + "type": "array", + "description": "Container IDs that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n", + "schema": { + "type": "string" + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "example": [ + { + "Id": "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8", + "ParentId": "", + "RepoTags": [ + "ubuntu:12.04", + "ubuntu:precise" + ], + "RepoDigests": [ + "ubuntu@sha256:992069aee4016783df6345315302fa59681aae51a8eeb2f889dea59290f21787" + ], + "Created": 1474925151, + "Size": 103579269, + "VirtualSize": 103579269, + "SharedSize": 0, + "Labels": {}, + "Containers": 2 + }, + { + "Id": "sha256:3e314f95dcace0f5e4fd37b10862fe8398e3c60ed36600bc0ca5fda78b087175", + "ParentId": "", + "RepoTags": [ + "ubuntu:12.10", + "ubuntu:quantal" + ], + "RepoDigests": [ + "ubuntu@sha256:002fba3e3255af10be97ea26e476692a7ebed0bb074a9ab960b2e7a1526b15d7", + "ubuntu@sha256:68ea0200f0b90df725d99d823905b04cf844f6039ef60c60bf3e019915017bd3" + ], + "Created": 1403128455, + "Size": 172064416, + "VirtualSize": 172064416, + "SharedSize": 0, + "Labels": {}, + "Containers": 5 + } + ] + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/build": { + "post": { + "tags": [ + "Image" + ], + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "default": "application/x-tar", + "enum": [ + "application/x-tar" + ] + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + } + }, + "/build/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "keep-storage", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=`: duration relative to daemon's time, during which build cache was not used, in Go's duration format (e.g., '24h')\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "BuildPruneResponse", + "type": "object", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "type": "string", + "description": "ID of build cache object" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/create": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create an image", + "description": "Create an image by either pulling it from a registry or importing it.", + "operationId": "ImageCreate", + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputImage" + } + }, + "/images/{name}/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Image" + }, + "example": { + "Id": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", + "Container": "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", + "Comment": "", + "Os": "linux", + "Architecture": "amd64", + "Parent": "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "ContainerConfig": { + "Tty": false, + "Hostname": "e611e15f9c9d", + "Domainname": "", + "AttachStdout": false, + "PublishService": "", + "AttachStdin": false, + "OpenStdin": false, + "StdinOnce": false, + "NetworkDisabled": false, + "OnBuild": [], + "Image": "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "User": "", + "WorkingDir": "", + "MacAddress": "", + "AttachStderr": false, + "Labels": { + "com.example.license": "GPL", + "com.example.version": "1.0", + "com.example.vendor": "Acme" + }, + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Cmd": [ + "/bin/sh", + "-c", + "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" + ] + }, + "DockerVersion": "1.9.0-dev", + "VirtualSize": 188359297, + "Size": 0, + "Author": "", + "Created": "2015-09-10T08:30:53.26995814Z", + "GraphDriver": { + "Name": "aufs", + "Data": {} + }, + "RepoDigests": [ + "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" + ], + "RepoTags": [ + "example:1.0", + "example:latest", + "example:stable" + ], + "Config": { + "Image": "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "NetworkDisabled": false, + "OnBuild": [], + "StdinOnce": false, + "PublishService": "", + "AttachStdin": false, + "OpenStdin": false, + "Domainname": "", + "AttachStdout": false, + "Tty": false, + "Hostname": "e611e15f9c9d", + "Cmd": [ + "/bin/bash" + ], + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.version": "1.0", + "com.example.license": "GPL" + }, + "MacAddress": "", + "AttachStderr": false, + "WorkingDir": "", + "User": "" + }, + "RootFS": { + "Type": "layers", + "Layers": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "HistoryResponseItem", + "required": [ + "Comment", + "Created", + "CreatedBy", + "Id", + "Size", + "Tags" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + }, + "description": "individual image layer information in response to ImageHistory operation", + "x-go-name": "HistoryResponseItem" + } + }, + "example": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "tags": [ + "Image" + ], + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The tag to associate with the image on the registry.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "tags": [ + "Image" + ], + "summary": "Tag an image", + "description": "Tag an image so that it becomes part of a repository.", + "operationId": "ImageTag", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}": { + "delete": { + "tags": [ + "Image" + ], + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "example": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/search": { + "get": { + "tags": [ + "Image" + ], + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-automated=(true|false)`\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ImageSearchResponseItem", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "example": [ + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ImagePruneResponse", + "type": "object", + "properties": { + "ImagesDeleted": { + "type": "array", + "description": "Images that were deleted", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/auth": { + "post": { + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "requestBody": { + "description": "Authentication to check", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the authentication", + "nullable": false + }, + "IdentityToken": { + "type": "string", + "description": "An opaque token used to authenticate a user after a successful login", + "nullable": false + } + } + }, + "example": { + "Status": "Login Succeeded", + "IdentityToken": "9cbaf023786cd7..." + } + } + } + }, + "204": { + "description": "No error", + "content": {} + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "authConfig" + } + }, + "/info": { + "get": { + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/version": { + "get": { + "tags": [ + "System" + ], + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/_ping": { + "get": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "head": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/commit": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The container configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "containerConfig" + } + }, + "/events": { + "get": { + "tags": [ + "System" + ], + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemEventsResponse", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The type of object emitting the event" + }, + "Action": { + "type": "string", + "description": "The type of event" + }, + "Actor": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the object emitting the event" + }, + "Attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Various key/value attributes of the object, depending on its type" + } + } + }, + "time": { + "type": "integer", + "description": "Timestamp of event" + }, + "timeNano": { + "type": "integer", + "description": "Timestamp of event, with nanosecond accuracy", + "format": "int64" + } + } + }, + "example": { + "Type": "container", + "Action": "create", + "Actor": { + "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", + "Attributes": { + "com.example.some-label": "some-label-value", + "image": "alpine", + "name": "my-container" + } + }, + "time": 1461943101 + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/system/df": { + "get": { + "tags": [ + "System" + ], + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ] + } + } + }, + "text/plain": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ] + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/load": { + "post": { + "tags": [ + "Image" + ], + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "description": "Tar archive containing images", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "imagesTarball" + } + }, + "/containers/{id}/exec": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Exec configuration", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execConfig" + } + }, + "/exec/{id}/start": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + } + }, + "example": { + "Detach": false, + "Tty": false + } + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execStartConfig" + } + }, + "/exec/{id}/resize": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ExecInspectResponse", + "type": "object", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "example": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes": { + "get": { + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "title": "VolumeListResponse", + "required": [ + "Volumes", + "Warnings" + ], + "type": "object", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "nullable": false, + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "nullable": false, + "items": { + "type": "string" + } + } + }, + "description": "Volume list response" + }, + "example": { + "Volumes": [ + { + "CreatedAt": "2017-07-19T12:00:26Z", + "Name": "tardis", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/tardis", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Scope": "local", + "Options": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + } + ], + "Warnings": [] + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/create": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "requestBody": { + "description": "Volume configuration", + "content": { + "application/json": { + "schema": { + "title": "VolumeConfig", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "nullable": false + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver to use.", + "nullable": false, + "default": "local" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "description": "Volume configuration", + "example": { + "Name": "tardis", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Driver": "custom" + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "volumeConfig" + } + }, + "/volumes/{name}": { + "get": { + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "The volume was removed", + "content": {} + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/prune": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "VolumePruneResponse", + "type": "object", + "properties": { + "VolumesDeleted": { + "type": "array", + "description": "Volumes that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks": { + "get": { + "tags": [ + "Network" + ], + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Network" + } + }, + "example": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/{id}": { + "get": { + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/create": { + "post": { + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "requestBody": { + "description": "Network configuration", + "content": { + "application/json": { + "schema": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The network's name." + }, + "CheckDuplicate": { + "type": "boolean", + "description": "Check for networks with duplicate names. Since Network is\nprimarily keyed based on a random ID and not on the name, and\nnetwork name is strictly a user-friendly alias to the network\nwhich is uniquely identified using ID, there is no guaranteed\nway to check for duplicates. CheckDuplicate is there to provide\na best effort checking of any networks which has the same name\nbut it is not guaranteed to catch all name collisions.\n" + }, + "Driver": { + "type": "string", + "description": "Name of the network driver plugin to use.", + "default": "bridge" + }, + "Internal": { + "type": "boolean", + "description": "Restrict external access to the network." + }, + "Attachable": { + "type": "boolean", + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n" + }, + "Ingress": { + "type": "boolean", + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "EnableIPv6": { + "type": "boolean", + "description": "Enable IPv6 on the network." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Network specific options to be used by the drivers." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "isolated_nw", + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.20.0.0/16", + "IPRange": "172.20.10.0/24", + "Gateway": "172.20.10.11" + }, + { + "Subnet": "2001:db8:abcd::/64", + "Gateway": "2001:db8:abcd::1011" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": true, + "Attachable": false, + "Ingress": false, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created network." + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + } + } + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "networkConfig" + } + }, + "/networks/{id}/connect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "operationId": "NetworkConnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network." + }, + "EndpointConfig": { + "$ref": "#/components/schemas/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/{id}/disconnect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.\n" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.\n" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/prune": { + "post": { + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkPruneResponse", + "type": "object", + "properties": { + "NetworksDeleted": { + "type": "array", + "description": "Networks that were deleted", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "description": "Returns information about installed plugins.", + "operationId": "PluginList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/privileges": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "title": "PluginPrivilegeItem", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "title": "PluginPrivilegeItem", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/pull": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "operationId": "PluginPull", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the\nplugin.\n" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the\nplugin.\n" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/{name}/json": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the\nplugin.\n" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the\nplugin.\n" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/create": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Path to tar containing plugin rootfs and manifest", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "tarContext" + } + }, + "/plugins/{name}/push": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "description": "Push a plugin to the registry.\n", + "operationId": "PluginPush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + "DEBUG=1" + ], + "items": { + "type": "string" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/nodes": { + "get": { + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/init": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same addres\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same addres\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "name": "force", + "in": "query", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/unlockkey": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/unlock": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/create": { + "post": { + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ] + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ServiceCreateResponse", + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the created service." + }, + "Warning": { + "type": "string", + "description": "Optional warning message" + } + }, + "example": { + "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "default": "spec", + "enum": [ + "spec", + "previous-spec" + ] + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ] + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}/logs": { + "get": { + "tags": [ + "Service" + ], + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the service", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/plain": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such service: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks": { + "get": { + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ], + "items": { + "$ref": "#/components/schemas/Task" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "tags": [ + "Task" + ], + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/plain": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such task: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets": { + "get": { + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ], + "items": { + "$ref": "#/components/schemas/Secret" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/create": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/secrets/{id}": { + "get": { + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs": { + "get": { + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ], + "items": { + "$ref": "#/components/schemas/Config" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/create": { + "post": { + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs/{id}": { + "get": { + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/distribution/{name}/json": { + "get": { + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "type": "object", + "properties": { + "Descriptor": { + "type": "object", + "properties": { + "MediaType": { + "type": "string" + }, + "Size": { + "type": "integer", + "format": "int64" + }, + "Digest": { + "type": "string" + }, + "URLs": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "A descriptor struct containing digest, media type, and size.\n" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + }, + "OSVersion": { + "type": "string" + }, + "OSFeatures": { + "type": "array", + "items": { + "type": "string" + } + }, + "Variant": { + "type": "string" + }, + "Features": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "x-go-name": "DistributionInspect" + }, + "example": { + "Descriptor": { + "MediaType": "application/vnd.docker.distribution.manifest.v2+json", + "Digest": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96", + "Size": 3987495, + "URLs": [ + "" + ] + }, + "Platforms": [ + { + "Architecture": "amd64", + "OS": "linux", + "OSVersion": "", + "OSFeatures": [ + "" + ], + "Variant": "", + "Features": [ + "" + ] + } + ] + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/session": { + "post": { + "tags": [ + "Session" + ], + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Port": { + "required": [ + "PrivatePort", + "Type" + ], + "type": "object", + "properties": { + "IP": { + "type": "string", + "description": "Host IP address that the container's port is mapped to", + "format": "ip-address" + }, + "PrivatePort": { + "type": "integer", + "description": "Port on the container", + "format": "uint16", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "description": "Port exposed on the host", + "format": "uint16" + }, + "Type": { + "type": "string", + "nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "description": "An open port on a container", + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountPoint": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Source": { + "type": "string" + }, + "Destination": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "Mode": { + "type": "string" + }, + "RW": { + "type": "boolean" + }, + "Propagation": { + "type": "string" + } + }, + "description": "A mount point inside a container" + }, + "DeviceMapping": { + "type": "object", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "description": "A device mapping between the host and container", + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "items": { + "type": "string" + } + }, + "Capabilities": { + "type": "array", + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n", + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n" + } + }, + "description": "A request for devices to be sent to device drivers" + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Device path" + }, + "Rate": { + "minimum": 0, + "type": "integer", + "description": "Rate", + "format": "int64" + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "Container path." + }, + "Source": { + "type": "string", + "description": "Mount source (e.g. a volume name, a host path)." + }, + "Type": { + "type": "string", + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe" + ] + }, + "ReadOnly": { + "type": "boolean", + "description": "Whether the mount should be read-only." + }, + "Consistency": { + "type": "string", + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + }, + "BindOptions": { + "type": "object", + "properties": { + "Propagation": { + "type": "string", + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "type": "boolean", + "description": "Disable recursive bind mount.", + "default": false + } + }, + "description": "Optional configuration for the `bind` type." + }, + "VolumeOptions": { + "type": "object", + "properties": { + "NoCopy": { + "type": "boolean", + "description": "Populate volume with data from the target.", + "default": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "DriverConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver to use to create the volume." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "key/value map of driver specific options." + } + }, + "description": "Map of driver specific options" + } + }, + "description": "Optional configuration for the `volume` type." + }, + "TmpfsOptions": { + "type": "object", + "properties": { + "SizeBytes": { + "type": "integer", + "description": "The size for the tmpfs mount in bytes.", + "format": "int64" + }, + "Mode": { + "type": "integer", + "description": "The permission mode for the tmpfs mount in an integer." + } + }, + "description": "Optional configuration for the `tmpfs` type." + } + } + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + }, + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n" + }, + "Resources": { + "type": "object", + "properties": { + "CpuShares": { + "type": "integer", + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n" + }, + "Memory": { + "type": "integer", + "description": "Memory limit in bytes.", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "type": "string", + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n" + }, + "BlkioWeight": { + "maximum": 1000, + "minimum": 0, + "type": "integer", + "description": "Block IO weight (relative weight)." + }, + "BlkioWeightDevice": { + "type": "array", + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "minimum": 0, + "type": "integer" + } + } + } + }, + "BlkioDeviceReadBps": { + "type": "array", + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "type": "array", + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "type": "array", + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "type": "array", + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "format": "int64" + }, + "CpuQuota": { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "format": "int64" + }, + "CpuRealtimePeriod": { + "type": "integer", + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "type": "integer", + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpusetCpus": { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "example": "0-3" + }, + "CpusetMems": { + "type": "string", + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n" + }, + "Devices": { + "type": "array", + "description": "A list of devices to add to the container.", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "type": "array", + "description": "a list of cgroup rules to apply to the container", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "type": "array", + "description": "A list of requests for devices to be sent to device drivers.\n", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "KernelMemory": { + "type": "integer", + "description": "Kernel memory limit in bytes.\n\n


\n\n> **Deprecated**: This field is deprecated as the kernel 5.4 deprecated\n> `kmem.limit_in_bytes`.\n", + "format": "int64", + "example": 209715200 + }, + "KernelMemoryTCP": { + "type": "integer", + "description": "Hard limit for kernel TCP buffer memory (in bytes).", + "format": "int64" + }, + "MemoryReservation": { + "type": "integer", + "description": "Memory soft limit in bytes.", + "format": "int64" + }, + "MemorySwap": { + "type": "integer", + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "format": "int64" + }, + "MemorySwappiness": { + "maximum": 100, + "minimum": 0, + "type": "integer", + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "format": "int64" + }, + "NanoCPUs": { + "type": "integer", + "description": "CPU quota in units of 10-9 CPUs.", + "format": "int64" + }, + "OomKillDisable": { + "type": "boolean", + "description": "Disable OOM Killer for the container." + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "PidsLimit": { + "type": "integer", + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + }, + "CpuCount": { + "type": "integer", + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "CpuPercent": { + "type": "integer", + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "IOMaximumIOps": { + "type": "integer", + "description": "Maximum IOps for the container system drive (Windows only)", + "format": "int64" + }, + "IOMaximumBandwidth": { + "type": "integer", + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "format": "int64" + } + }, + "description": "A container's resources (cgroups config, ulimits, etc)" + }, + "Limit": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "type": "integer", + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "format": "int64", + "example": 100, + "default": 0 + } + }, + "description": "An object describing a limit on resources which can be requested by a task.\n" + }, + "ResourceObject": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + }, + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n" + }, + "GenericResources": { + "type": "array", + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "HealthConfig": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n" + }, + "Timeout": { + "type": "integer", + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n" + }, + "Retries": { + "type": "integer", + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n" + }, + "StartPeriod": { + "type": "integer", + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n" + } + }, + "description": "A test to perform to check that the container is healthy." + }, + "Health": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "example": "healthy", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ] + }, + "FailingStreak": { + "type": "integer", + "description": "FailingStreak is the number of consecutive failures", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "description": "Health stores information about the container's healthcheck results.\n" + }, + "HealthcheckResult": { + "type": "object", + "properties": { + "Start": { + "type": "string", + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "type": "string", + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "type": "integer", + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "example": 0 + }, + "Output": { + "type": "string", + "description": "Output from last check" + } + }, + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n" + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written" + }, + "LogConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "The logging configuration for this container" + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to the container.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n", + "enum": [ + "private", + "host" + ] + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such as SELinux.", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n" + }, + "Tmpfs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n" + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "minimum": 0, + "type": "integer", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n" + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A list of kernel parameters (sysctls) to set in the container.\nFor example:\n\n```\n{\"net.ipv4.ip_forward\": \"1\"}\n```\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array. (Windows only)\n", + "items": { + "minimum": 0, + "type": "integer" + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + } + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + } + } + } + } + ] + }, + "ContainerConfig": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname." + }, + "Domainname": { + "type": "string", + "description": "The domain name to use for the container." + }, + "User": { + "type": "string", + "description": "The user that commands are run as inside the container." + }, + "AttachStdin": { + "type": "boolean", + "description": "Whether to attach to `stdin`.", + "default": false + }, + "AttachStdout": { + "type": "boolean", + "description": "Whether to attach to `stdout`.", + "default": true + }, + "AttachStderr": { + "type": "boolean", + "description": "Whether to attach to `stderr`.", + "default": true + }, + "ExposedPorts": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n" + }, + "Tty": { + "type": "boolean", + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "default": false + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`", + "default": false + }, + "StdinOnce": { + "type": "boolean", + "description": "Close `stdin` after one attached client disconnects", + "default": false + }, + "Env": { + "type": "array", + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run specified as a string or an array of strings.\n", + "items": { + "type": "string" + } + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "type": "boolean", + "description": "Command is already escaped (Windows only)" + }, + "Image": { + "type": "string", + "description": "The name of the image to use when creating the container/\n" + }, + "Volumes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "Entrypoint": { + "type": "array", + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "items": { + "type": "string" + } + }, + "NetworkDisabled": { + "type": "boolean", + "description": "Disable networking for the container." + }, + "MacAddress": { + "type": "string", + "description": "MAC address of the container." + }, + "OnBuild": { + "type": "array", + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "items": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop a container as a string or unsigned integer.\n", + "default": "SIGTERM" + }, + "StopTimeout": { + "type": "integer", + "description": "Timeout to stop a container in seconds." + }, + "Shell": { + "type": "array", + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a container that is portable between hosts" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network.\n" + } + }, + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + } + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Bridge": { + "type": "string", + "description": "Name of the network'a bridge (for example, `docker0`).", + "example": "docker0" + }, + "SandboxID": { + "type": "string", + "description": "SandboxID uniquely represents a container's network stack.", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "HairpinMode": { + "type": "boolean", + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n", + "example": false + }, + "LinkLocalIPv6Address": { + "type": "string", + "description": "IPv6 unicast address using the link-local prefix.", + "example": "fe80::42:acff:fe11:1" + }, + "LinkLocalIPv6PrefixLen": { + "type": "integer", + "description": "Prefix length of the IPv6 unicast address.", + "example": 64 + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "SandboxKey": { + "type": "string", + "description": "SandboxKey identifies the sandbox", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "SecondaryIPv6Addresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "EndpointID": { + "type": "string", + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 64 + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address for this network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8:2::100" + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the container on the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "Information about all networks that the container is connected to.\n" + } + }, + "description": "NetworkSettings exposes the network settings in the API" + }, + "Address": { + "type": "object", + "properties": { + "Addr": { + "type": "string", + "description": "IP address." + }, + "PrefixLen": { + "type": "integer", + "description": "Mask length of the IP address." + } + }, + "description": "Address represents an IPv4 or IPv6 IP address." + }, + "PortMap": { + "type": "object", + "additionalProperties": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ] + } + }, + "PortBinding": { + "type": "object", + "properties": { + "HostIp": { + "type": "string", + "description": "Host IP address that the container's port is mapped to.", + "example": "127.0.0.1" + }, + "HostPort": { + "type": "string", + "description": "Host port number that the container's port is mapped to.", + "example": "4443" + } + }, + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n" + }, + "GraphDriverData": { + "required": [ + "Data", + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": false + } + }, + "description": "Information about a container's graph driver." + }, + "Image": { + "required": [ + "Architecture", + "Author", + "Comment", + "Container", + "Created", + "DockerVersion", + "GraphDriver", + "Id", + "Os", + "Parent", + "RootFS", + "Size", + "VirtualSize" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "RepoTags": { + "type": "array", + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "items": { + "type": "string" + } + }, + "Parent": { + "type": "string", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "string", + "nullable": false + }, + "Container": { + "type": "string", + "nullable": false + }, + "ContainerConfig": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "DockerVersion": { + "type": "string", + "nullable": false + }, + "Author": { + "type": "string", + "nullable": false + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "Architecture": { + "type": "string", + "nullable": false + }, + "Os": { + "type": "string", + "nullable": false + }, + "OsVersion": { + "type": "string" + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "VirtualSize": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "RootFS": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + } + }, + "BaseLayer": { + "type": "string" + } + } + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "format": "dateTime" + } + } + } + } + }, + "ImageSummary": { + "required": [ + "Containers", + "Created", + "Id", + "Labels", + "ParentId", + "RepoDigests", + "RepoTags", + "SharedSize", + "Size", + "VirtualSize" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "ParentId": { + "type": "string", + "nullable": false + }, + "RepoTags": { + "type": "array", + "nullable": false, + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "nullable": false, + "items": { + "type": "string" + } + }, + "Created": { + "type": "integer", + "nullable": false + }, + "Size": { + "type": "integer", + "nullable": false + }, + "SharedSize": { + "type": "integer", + "nullable": false + }, + "VirtualSize": { + "type": "integer", + "nullable": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": false + }, + "Containers": { + "type": "integer", + "nullable": false + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "email": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "required": [ + "Driver", + "Labels", + "Mountpoint", + "Name", + "Options", + "Scope" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "nullable": false + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "nullable": false + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "nullable": false + }, + "CreatedAt": { + "type": "string", + "description": "Date/Time the volume was created.", + "format": "dateTime" + }, + "Status": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "nullable": false, + "default": "local", + "enum": [ + "local", + "global" + ] + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The driver specific options used when creating the volume.\n" + }, + "UsageData": { + "required": [ + "RefCount", + "Size" + ], + "type": "object", + "properties": { + "Size": { + "type": "integer", + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "nullable": false + }, + "RefCount": { + "type": "integer", + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "nullable": false + } + }, + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "nullable": true + } + }, + "example": { + "Name": "tardis", + "Driver": "custom", + "Mountpoint": "/var/lib/docker/volumes/tardis", + "Status": { + "hello": "world" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Scope": "local", + "CreatedAt": "2016-06-07T20:31:11.853781916Z" + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Scope": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "Internal": { + "type": "boolean" + }, + "Attachable": { + "type": "boolean" + }, + "Ingress": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/NetworkContainer" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Name": "net01", + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Created": "2016-10-19T04:33:30.360899459Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.19.0.0/16", + "Gateway": "172.19.0.1" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": false, + "Attachable": false, + "Ingress": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "IPAM": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "description": "Name of the IPAM driver to use.", + "default": "default" + }, + "Config": { + "type": "array", + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a map." + } + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EndpointID": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Parent": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "InUse": { + "type": "boolean" + }, + "Shared": { + "type": "boolean" + }, + "Size": { + "type": "integer", + "description": "Amount of disk space used by the build cache (in bytes).\n" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "type": "string", + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer" + } + } + }, + "ImageID": { + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "description": "Image ID or Digest", + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The error message.", + "nullable": false + } + }, + "description": "Represents an error.", + "example": { + "message": "Something went wrong." + } + }, + "IdResponse": { + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The id of the newly created object.", + "nullable": false + } + }, + "description": "Response to an API call that returns just an Id" + }, + "EndpointSettings": { + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "example": [ + "container_1", + "container_2" + ], + "items": { + "type": "string" + } + }, + "Aliases": { + "type": "array", + "example": [ + "server_x", + "server_y" + ], + "items": { + "type": "string" + } + }, + "NetworkID": { + "type": "string", + "description": "Unique ID of the network.\n", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "type": "string", + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for this network.\n", + "example": "172.17.0.1" + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address.\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address.\n", + "example": "2001:db8:2::100" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address.\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n", + "format": "int64", + "example": 64 + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the endpoint on this network.\n", + "example": "02:42:ac:11:00:04" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "description": "Configuration for a network endpoint." + }, + "EndpointIPAMConfig": { + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "example": [ + "169.254.34.68", + "fe80::3468" + ], + "items": { + "type": "string" + } + } + }, + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "nullable": true, + "x-nullable": true + }, + "PluginMount": { + "required": [ + "Description", + "Destination", + "Name", + "Options", + "Settable", + "Source", + "Type" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "example": [ + "rbind", + "rw" + ], + "items": { + "type": "string" + } + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginDevice": { + "required": [ + "Description", + "Name", + "Path", + "Settable" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginEnv": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginInterfaceType": { + "required": [ + "Capability", + "Prefix", + "Version" + ], + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "nullable": false + }, + "Capability": { + "type": "string", + "nullable": false + }, + "Version": { + "type": "string", + "nullable": false + } + }, + "nullable": false, + "x-nullable": false + }, + "Plugin": { + "required": [ + "Config", + "Enabled", + "Name", + "Settings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "type": "boolean", + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "nullable": false, + "example": true + }, + "Settings": { + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "type": "object", + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + "DEBUG=0" + ], + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "description": "Settings that can be modified by users.", + "nullable": false + }, + "PluginReference": { + "type": "string", + "description": "plugin remote reference used to push/pull the plugin", + "nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "required": [ + "Args", + "Description", + "Documentation", + "Entrypoint", + "Env", + "Interface", + "IpcHost", + "Linux", + "Mounts", + "Network", + "PidHost", + "PropagatedMount", + "WorkDir" + ], + "type": "object", + "properties": { + "DockerVersion": { + "type": "string", + "description": "Docker Version used to create the plugin", + "nullable": false, + "example": "17.06.0-ce" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "required": [ + "Socket", + "Types" + ], + "type": "object", + "properties": { + "Types": { + "type": "array", + "example": [ + "docker.volumedriver/1.0" + ], + "items": { + "$ref": "#/components/schemas/PluginInterfaceType" + } + }, + "Socket": { + "type": "string", + "nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "description": "Protocol to use for clients connecting to the plugin.", + "example": "some.protocol/v1.0", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "description": "The interface between Docker and the plugin", + "nullable": false + }, + "Entrypoint": { + "type": "array", + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ], + "items": { + "type": "string" + } + }, + "WorkDir": { + "type": "string", + "nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "host" + } + }, + "nullable": false + }, + "Linux": { + "required": [ + "AllowAllDevices", + "Capabilities", + "Devices" + ], + "type": "object", + "properties": { + "Capabilities": { + "type": "array", + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "AllowAllDevices": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Value": "0" + } + ], + "items": { + "$ref": "#/components/schemas/PluginEnv" + } + }, + "Args": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "args" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ], + "items": { + "type": "string" + } + } + } + } + }, + "description": "The config of a plugin.", + "nullable": false + } + }, + "description": "A plugin for the Engine API" + }, + "ObjectVersion": { + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + }, + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n" + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name for the node.", + "example": "my-node" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Role": { + "type": "string", + "description": "Role of the node.", + "example": "manager", + "enum": [ + "worker", + "manager" + ] + }, + "Availability": { + "type": "string", + "description": "Availability of the node.", + "example": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + }, + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n" + }, + "Platform": { + "type": "object", + "properties": { + "Architecture": { + "type": "string", + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "example": "x86_64" + }, + "OS": { + "type": "string", + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "example": "linux" + } + }, + "description": "Platform represents the platform (Arch/OS).\n" + }, + "EngineDescription": { + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "logentries" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ], + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + } + }, + "description": "EngineDescription provides information about an engine." + }, + "TLSInfo": { + "type": "object", + "properties": { + "TrustRoot": { + "type": "string", + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n" + }, + "CertIssuerSubject": { + "type": "string", + "description": "The base64-url-safe-encoded raw subject bytes of the issuer." + }, + "CertIssuerPublicKey": { + "type": "string", + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n" + } + }, + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "type": "string", + "description": "IP address of the node.", + "example": "172.17.0.2" + } + }, + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n" + }, + "NodeState": { + "type": "string", + "description": "NodeState represents the state of a node.", + "example": "ready", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ] + }, + "ManagerStatus": { + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "example": true, + "default": false + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "type": "string", + "description": "The IP address and port at which the manager is reachable.\n", + "example": "10.0.0.46:2377" + } + }, + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "nullable": true, + "x-nullable": true + }, + "Reachability": { + "type": "string", + "description": "Reachability represents the reachability of a node.", + "example": "reachable", + "enum": [ + "unknown", + "unreachable", + "reachable" + ] + }, + "SwarmSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the swarm.", + "example": "default" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "type": "integer", + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "format": "int64", + "example": 10 + } + }, + "description": "Orchestration configuration.", + "nullable": true + }, + "Raft": { + "type": "object", + "properties": { + "SnapshotInterval": { + "type": "integer", + "description": "The number of log entries between snapshots.", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "type": "integer", + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "type": "integer", + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "type": "integer", + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 3 + }, + "HeartbeatTick": { + "type": "integer", + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 1 + } + }, + "description": "Raft configuration." + }, + "Dispatcher": { + "type": "object", + "properties": { + "HeartbeatPeriod": { + "type": "integer", + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "format": "int64", + "example": 5000000000 + } + }, + "description": "Dispatcher configuration.", + "nullable": true + }, + "CAConfig": { + "type": "object", + "properties": { + "NodeCertExpiry": { + "type": "integer", + "description": "The duration node certificates are issued for.", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "type": "array", + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "type": "string", + "description": "URL where certificate signing requests should be sent.\n" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n" + }, + "CACert": { + "type": "string", + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n" + } + } + } + }, + "SigningCACert": { + "type": "string", + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n" + }, + "SigningCAKey": { + "type": "string", + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n" + }, + "ForceRotate": { + "type": "integer", + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64" + } + }, + "description": "CA configuration.", + "nullable": true + }, + "EncryptionConfig": { + "type": "object", + "properties": { + "AutoLockManagers": { + "type": "boolean", + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "example": false + } + }, + "description": "Parameters related to encryption-at-rest." + }, + "TaskDefaults": { + "type": "object", + "properties": { + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The log driver to use as a default for new tasks.\n", + "example": "json-file" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "example": { + "max-file": "10", + "max-size": "100m" + } + } + }, + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n" + } + }, + "description": "Defaults for creating tasks in this cluster." + } + }, + "description": "User modifiable swarm configuration." + }, + "ClusterInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the swarm.", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "type": "boolean", + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "example": false + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "format": "uint32", + "example": 4789 + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "items": { + "type": "string", + "format": "CIDR", + "example": "" + } + }, + "SubnetSize": { + "maximum": 29, + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "format": "uint32", + "example": 24 + } + }, + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "nullable": true, + "x-nullable": true + }, + "JoinTokens": { + "type": "object", + "properties": { + "Worker": { + "type": "string", + "description": "The token workers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "type": "string", + "description": "The token managers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + }, + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n" + }, + "Swarm": { + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name or 'alias' to use for the plugin." + }, + "Remote": { + "type": "string", + "description": "The plugin image reference to use." + }, + "Disabled": { + "type": "boolean", + "description": "Disable the plugin once scheduled." + }, + "PluginPrivilege": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission accepted by the user upon installing the\nplugin.\n" + } + } + }, + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "ContainerSpec": { + "type": "object", + "properties": { + "Image": { + "type": "string", + "description": "The image name to use for the container" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value data." + }, + "Command": { + "type": "array", + "description": "The command to be run in the image.", + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "description": "Arguments to the command.", + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n" + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `VAR=value`.\n", + "items": { + "type": "string" + } + }, + "Dir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "User": { + "type": "string", + "description": "The user inside the container." + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "properties": { + "CredentialSpec": { + "type": "object", + "properties": { + "Config": { + "type": "string", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "0bt9dmxjvjiqermk6xrop3ekq" + }, + "File": { + "type": "string", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "spec.json" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + }, + "description": "CredentialSpec for managed service account (Windows only)" + }, + "SELinuxContext": { + "type": "object", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + }, + "description": "SELinux labels of the container" + } + }, + "description": "Security options for the container" + }, + "TTY": { + "type": "boolean", + "description": "Whether a pseudo-TTY should be allocated." + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`" + }, + "ReadOnly": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop the container." + }, + "StopGracePeriod": { + "type": "integer", + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "format": "int64" + }, + "HealthCheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "type": "object", + "properties": { + "Nameservers": { + "type": "array", + "description": "The IP addresses of the name servers.", + "items": { + "type": "string" + } + }, + "Search": { + "type": "array", + "description": "A search list for host-name lookup.", + "items": { + "type": "string" + } + }, + "Options": { + "type": "array", + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "items": { + "type": "string" + } + } + }, + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n" + }, + "Secrets": { + "type": "array", + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n" + }, + "SecretID": { + "type": "string", + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n" + }, + "SecretName": { + "type": "string", + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n" + } + } + } + }, + "Configs": { + "type": "array", + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n" + }, + "Runtime": { + "type": "object", + "properties": {}, + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n" + }, + "ConfigID": { + "type": "string", + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n" + }, + "ConfigName": { + "type": "string", + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n" + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW" + ], + "items": { + "type": "string" + } + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + } + }, + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "NetworkAttachmentSpec": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string", + "description": "ID of the container represented by this task" + } + }, + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "Resources": { + "type": "object", + "properties": { + "Limits": { + "$ref": "#/components/schemas/Limit" + }, + "Reservation": { + "$ref": "#/components/schemas/ResourceObject" + } + }, + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n" + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Condition": { + "type": "string", + "description": "Condition for restart.", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "type": "integer", + "description": "Delay between restart attempts.", + "format": "int64" + }, + "MaxAttempts": { + "type": "integer", + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "format": "int64", + "default": 0 + }, + "Window": { + "type": "integer", + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "format": "int64", + "default": 0 + } + }, + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n" + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ], + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ], + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string", + "description": "label descriptor, such as `engine.labels.az`.\n" + } + } + } + } + } + }, + "MaxReplicas": { + "type": "integer", + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "format": "int64", + "default": 0 + }, + "Platforms": { + "type": "array", + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "type": "integer", + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime is the type of runtime specified for the task executor.\n" + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n" + } + }, + "description": "User modifiable task configuration." + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the task." + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "type": "string", + "description": "Name of the task." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "type": "string", + "description": "The ID of the service this task is part of." + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "type": "string", + "description": "The ID of the node that this task is on." + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "type": "object", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + } + } + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the service." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "integer", + "description": "The maximum number of replicas to run simultaneously.\n", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "type": "integer", + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "format": "int64" + } + }, + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n" + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "description": "The mode used for services which run a task to the completed state\non each valid node.\n" + } + }, + "description": "Scheduling mode for the service." + }, + "UpdateConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between updates, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the update strategy of the service." + }, + "RollbackConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the rollback strategy of the service." + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + }, + "description": "User modifiable configuration for a service." + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "type": "integer", + "description": "The port inside the container." + }, + "PublishedPort": { + "type": "integer", + "description": "The port on the swarm hosts." + }, + "PublishMode": { + "type": "string", + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "example": "ingress", + "default": "ingress", + "enum": [ + "ingress", + "host" + ] + } + } + }, + "EndpointSpec": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "type": "array", + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "Properties that can be configured to access and load balance a service." + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + }, + "description": "The status of a service update." + }, + "ServiceStatus": { + "type": "object", + "properties": { + "RunningTasks": { + "type": "integer", + "description": "The number of tasks for the service currently in the Running state.\n", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "type": "integer", + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "type": "integer", + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "format": "uint64" + } + }, + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n" + }, + "JobStatus": { + "type": "object", + "properties": { + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "LastExecution": { + "type": "string", + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "format": "dateTime" + } + }, + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n" + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Untagged": { + "type": "string", + "description": "The image ID of an image that was untagged" + }, + "Deleted": { + "type": "string", + "description": "The image ID of an image that was deleted" + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "description": "Optional warning messages", + "items": { + "type": "string" + } + } + }, + "example": { + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + }, + "ContainerSummary": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of this container", + "x-go-name": "ID" + }, + "Names": { + "type": "array", + "description": "The names that this container has been given", + "items": { + "type": "string" + } + }, + "Image": { + "type": "string", + "description": "The name of the image used when creating this container" + }, + "ImageID": { + "type": "string", + "description": "The ID of the image that this container was created from" + }, + "Command": { + "type": "string", + "description": "Command to run when starting the container" + }, + "Created": { + "type": "integer", + "description": "When the container was created", + "format": "int64" + }, + "Ports": { + "type": "array", + "description": "The ports exposed by this container", + "items": { + "$ref": "#/components/schemas/Port" + } + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container", + "format": "int64" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "State": { + "type": "string", + "description": "The state of this container (e.g. `Exited`)" + }, + "Status": { + "type": "string", + "description": "Additional human-readable status of this container (e.g. `Exit 0`)" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "description": "A summary of the container's network settings" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + } + } + } + }, + "Driver": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver.", + "nullable": false, + "example": "some-driver" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key/value map of driver-specific options.", + "nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + }, + "description": "Driver represents a driver (network, logging, secrets)." + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the secret." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "example": "" + }, + "Driver": { + "$ref": "#/components/schemas/Driver" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the config." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\nconfig data.\n" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "example": "running", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + }, + "Running": { + "type": "boolean", + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "example": true + }, + "Paused": { + "type": "boolean", + "description": "Whether this container is paused.", + "example": false + }, + "Restarting": { + "type": "boolean", + "description": "Whether this container is restarting.", + "example": false + }, + "OOMKilled": { + "type": "boolean", + "description": "Whether this container has been killed because it ran out of memory.\n", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "type": "integer", + "description": "The process ID of this container", + "example": 1234 + }, + "ExitCode": { + "type": "integer", + "description": "The last exit code of this container", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "description": "The time when this container was last started.", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "type": "string", + "description": "The time when this container last exited.", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n" + }, + "SystemVersion": { + "type": "object", + "properties": { + "Platform": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "required": [ + "Name", + "Version" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the component\n", + "example": "Engine" + }, + "Version": { + "type": "string", + "description": "Version of the component\n", + "nullable": false, + "example": "19.03.12" + }, + "Details": { + "type": "object", + "properties": {}, + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "nullable": true + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Version": { + "type": "string", + "description": "The version of the daemon", + "example": "19.03.12" + }, + "ApiVersion": { + "type": "string", + "description": "The default (and highest) API version that is supported by the daemon\n", + "example": "1.40" + }, + "MinAPIVersion": { + "type": "string", + "description": "The minimum API version that is supported by the daemon\n", + "example": "1.12" + }, + "GitCommit": { + "type": "string", + "description": "The Git commit of the source code that was used to build the daemon\n", + "example": "48a66213fe" + }, + "GoVersion": { + "type": "string", + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "example": "go1.13.14" + }, + "Os": { + "type": "string", + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "example": "linux" + }, + "Arch": { + "type": "string", + "description": "The architecture that the daemon is running on\n", + "example": "amd64" + }, + "KernelVersion": { + "type": "string", + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "example": "4.19.76-linuxkit" + }, + "Experimental": { + "type": "boolean", + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "example": true + }, + "BuildTime": { + "type": "string", + "description": "The date and time that the daemon was compiled.\n", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + }, + "description": "Response of Engine API: GET \"/version\"\n" + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "type": "integer", + "description": "Total number of containers on the host.", + "example": 14 + }, + "ContainersRunning": { + "type": "integer", + "description": "Number of containers with status `\"running\"`.\n", + "example": 3 + }, + "ContainersPaused": { + "type": "integer", + "description": "Number of containers with status `\"paused\"`.\n", + "example": 1 + }, + "ContainersStopped": { + "type": "integer", + "description": "Number of containers with status `\"stopped\"`.\n", + "example": 10 + }, + "Images": { + "type": "integer", + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "example": 508 + }, + "Driver": { + "type": "string", + "description": "Name of the storage driver in use.", + "example": "overlay2" + }, + "DriverStatus": { + "type": "array", + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "DockerRootDir": { + "type": "string", + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "type": "boolean", + "description": "Indicates if the host has memory limit support enabled.", + "example": true + }, + "SwapLimit": { + "type": "boolean", + "description": "Indicates if the host has memory swap limit support enabled.", + "example": true + }, + "KernelMemory": { + "type": "boolean", + "description": "Indicates if the host has kernel memory limit support enabled.\n\n


\n\n> **Deprecated**: This field is deprecated as the kernel 5.4 deprecated\n> `kmem.limit_in_bytes`.\n", + "example": true + }, + "CpuCfsPeriod": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "example": true + }, + "CpuCfsQuota": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "example": true + }, + "CPUShares": { + "type": "boolean", + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "example": true + }, + "CPUSet": { + "type": "boolean", + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "example": true + }, + "PidsLimit": { + "type": "boolean", + "description": "Indicates if the host kernel has PID limit support enabled.", + "example": true + }, + "OomKillDisable": { + "type": "boolean", + "description": "Indicates if OOM killer disable is supported on the host." + }, + "IPv4Forwarding": { + "type": "boolean", + "description": "Indicates IPv4 forwarding is enabled.", + "example": true + }, + "BridgeNfIptables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "example": true + }, + "BridgeNfIp6tables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "example": true + }, + "Debug": { + "type": "boolean", + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "example": true + }, + "NFd": { + "type": "integer", + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 64 + }, + "NGoroutines": { + "type": "integer", + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 174 + }, + "SystemTime": { + "type": "string", + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "type": "string", + "description": "The logging driver to use as a default for new containers.\n" + }, + "CgroupDriver": { + "type": "string", + "description": "The driver to use for managing cgroups.\n", + "example": "cgroupfs", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd", + "none" + ] + }, + "CgroupVersion": { + "type": "string", + "description": "The version of the cgroup.\n", + "example": "1", + "default": "1", + "enum": [ + "1", + "2" + ] + }, + "NEventsListener": { + "type": "integer", + "description": "Number of event listeners subscribed.", + "example": 30 + }, + "KernelVersion": { + "type": "string", + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "example": "4.9.38-moby" + }, + "OperatingSystem": { + "type": "string", + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "example": "Alpine Linux v3.5" + }, + "OSVersion": { + "type": "string", + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "example": "16.04" + }, + "OSType": { + "type": "string", + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "linux" + }, + "Architecture": { + "type": "string", + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "x86_64" + }, + "NCPU": { + "type": "integer", + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "example": 4 + }, + "MemTotal": { + "type": "integer", + "description": "Total amount of physical memory available on the host, in bytes.\n", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "type": "string", + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "example": "https://index.docker.io/v1/", + "default": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "type": "string", + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "type": "string", + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "type": "string", + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "*.local, 169.254/16" + }, + "Name": { + "type": "string", + "description": "Hostname of the host.", + "example": "node5.corp.example.com" + }, + "Labels": { + "type": "array", + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "example": [ + "storage=ssd", + "production" + ], + "items": { + "type": "string" + } + }, + "ExperimentalBuild": { + "type": "boolean", + "description": "Indicates if experimental features are enabled on the daemon.\n", + "example": true + }, + "ServerVersion": { + "type": "string", + "description": "Version string of the daemon.\n\n> **Note**: the [standalone Swarm API](https://docs.docker.com/swarm/swarm-api/)\n> returns the Swarm version instead of the daemon version, for example\n> `swarm/1.2.8`.\n", + "example": "17.06.0-ce" + }, + "ClusterStore": { + "type": "string", + "description": "URL of the distributed storage backend.\n\n\nThe storage backend is used for multihost networking (to store\nnetwork and endpoint information) and by the node discovery mechanism.\n\n


\n\n> **Deprecated**: This field is only propagated when using standalone Swarm\n> mode, and overlay networking using an external k/v store. Overlay\n> networks with Swarm mode enabled use the built-in raft store, and\n> this field will be empty.\n", + "example": "consul://consul.corp.example.com:8600/some/path" + }, + "ClusterAdvertise": { + "type": "string", + "description": "The network endpoint that the Engine advertises for the purpose of\nnode discovery. ClusterAdvertise is a `host:port` combination on which\nthe daemon is reachable by other hosts.\n\n


\n\n> **Deprecated**: This field is only propagated when using standalone Swarm\n> mode, and overlay networking using an external k/v store. Overlay\n> networks with Swarm mode enabled use the built-in raft store, and\n> this field will be empty.\n", + "example": "node5.corp.example.com:8000" + }, + "Runtimes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "type": "string", + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "example": "runc", + "default": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "type": "boolean", + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "example": false, + "default": false + }, + "Isolation": { + "type": "string", + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "InitBinary": { + "type": "string", + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "type": "array", + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), and rootless.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ], + "items": { + "type": "string" + } + }, + "ProductLicense": { + "type": "string", + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "type": "array", + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "items": { + "type": "object", + "properties": { + "Base": { + "type": "string", + "description": "The network address in CIDR format", + "example": "10.10.0.0/16" + }, + "Size": { + "type": "integer", + "description": "The network pool size", + "example": 24 + } + } + } + }, + "Warnings": { + "type": "array", + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "example": [ + "WARNING: No memory limit support", + "WARNING: bridge-nf-call-iptables is disabled", + "WARNING: bridge-nf-call-ip6tables is disabled" + ], + "items": { + "type": "string" + } + } + } + }, + "PluginsInfo": { + "type": "object", + "properties": { + "Volume": { + "type": "array", + "description": "Names of available volume-drivers, and network-driver plugins.", + "example": [ + "local" + ], + "items": { + "type": "string" + } + }, + "Network": { + "type": "array", + "description": "Names of available network-drivers, and network-driver plugins.", + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ], + "items": { + "type": "string" + } + }, + "Authorization": { + "type": "array", + "description": "Names of available authorization plugins.", + "example": [ + "img-authz-plugin", + "hbm" + ], + "items": { + "type": "string" + } + }, + "Log": { + "type": "array", + "description": "Names of available logging-drivers, and logging-driver plugins.", + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "logentries", + "splunk", + "syslog" + ], + "items": { + "type": "string" + } + } + }, + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n" + }, + "RegistryServiceConfig": { + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "type": "array", + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "AllowNondistributableArtifactsHostnames": { + "type": "array", + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `[:]` or `[:]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ], + "items": { + "type": "string" + } + }, + "InsecureRegistryCIDRs": { + "type": "array", + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "type": "array", + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ], + "items": { + "type": "string" + } + } + }, + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "nullable": true, + "x-nullable": true + }, + "IndexInfo": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the registry, such as \"docker.io\".\n", + "example": "docker.io" + }, + "Mirrors": { + "type": "array", + "description": "List of mirrors, expressed as URIs.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ], + "items": { + "type": "string" + } + }, + "Secure": { + "type": "boolean", + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "example": true + }, + "Official": { + "type": "boolean", + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "example": true + } + }, + "description": "IndexInfo contains information about a registry.", + "nullable": true, + "x-nullable": true + }, + "Runtime": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "type": "array", + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "items": { + "type": "string" + } + } + }, + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n" + }, + "Commit": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Actual commit ID of external tool.", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + }, + "Expected": { + "type": "string", + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + } + }, + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n" + }, + "SwarmInfo": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm.", + "example": "k67qz4598weg5unwwffg6z1m1", + "default": "" + }, + "NodeAddr": { + "type": "string", + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "example": "10.0.0.46", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "example": true, + "default": false + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "type": "array", + "description": "List of ID's and addresses of other managers in the swarm.\n", + "nullable": true, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "items": { + "$ref": "#/components/schemas/PeerNode" + } + }, + "Nodes": { + "type": "integer", + "description": "Total number of nodes in the swarm.", + "nullable": true, + "example": 4 + }, + "Managers": { + "type": "integer", + "description": "Total number of managers in the swarm.", + "nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + }, + "description": "Represents generic information about swarm.\n" + }, + "LocalNodeState": { + "type": "string", + "description": "Current local status of this node.", + "example": "active", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ] + }, + "PeerNode": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm." + }, + "Addr": { + "type": "string", + "description": "IP address and ports at which this node can be reached.\n" + } + }, + "description": "Represents a peer-node in the swarm" + }, + "NetworkAttachmentConfig": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "The target network for attachment. Must be a network name or ID.\n" + }, + "Aliases": { + "type": "array", + "description": "Discoverable alternate names for the service on this network.\n", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver attachment options for the network target.\n" + } + }, + "description": "Specifies how a service should be attached to a particular network.\n" + } + } + } +} \ No newline at end of file diff --git a/app/vendor/beluga-php/docker-php-api/spec/v1.42.json b/app/vendor/beluga-php/docker-php-api/spec/v1.42.json new file mode 100644 index 000000000..541cb2159 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/spec/v1.42.json @@ -0,0 +1,16631 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Docker Engine API", + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.42) is used.\nFor example, calling `/info` is the same as calling `/v1.42/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"email\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n", + "version": "1.42", + "x-logo": { + "url": "https://docs.docker.com/assets/images/logo-docker-main.png" + } + }, + "servers": [ + { + "url": "/v1.42" + } + ], + "tags": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "x-displayName": "Networks" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "x-displayName": "Volumes" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "x-displayName": "Exec" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "x-displayName": "Swarm" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "x-displayName": "Nodes" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Services" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Tasks" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Secrets" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "example": [ + { + "Id": "8dfafdbc3a40", + "Names": [ + "/boring_feynman" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 1", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + }, + { + "Id": "9cd87474be90", + "Names": [ + "/coolName" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 222222", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:08" + } + } + }, + "Mounts": [] + }, + { + "Id": "3176a2479c92", + "Names": [ + "/sleepy_dog" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:06" + } + } + }, + "Mounts": [] + }, + { + "Id": "4cb07b47f9fb", + "Names": [ + "/running_cat" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:05" + } + } + }, + "Mounts": [] + } + ] + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/create": { + "post": { + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$", + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Container to create", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/containers/{id}/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerInspectResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the container" + }, + "Created": { + "type": "string", + "description": "The time the container was created" + }, + "Path": { + "type": "string", + "description": "The path to the command being run" + }, + "Args": { + "type": "array", + "description": "The arguments to the command being run", + "items": { + "type": "string" + } + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "type": "string", + "description": "The container's image ID" + }, + "ResolvConfPath": { + "type": "string" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "Driver": { + "type": "string" + }, + "Platform": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "AppArmorProfile": { + "type": "string" + }, + "ExecIDs": { + "type": "array", + "description": "IDs of exec instances that are running in the container.", + "nullable": true, + "items": { + "type": "string" + } + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this\ncontainer.\n", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container.", + "format": "int64" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "example": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "exit 0" + ] + }, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "StopSignal": "SIGTERM", + "StopTimeout": 10 + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "ExecIDs": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "HostConfig": { + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuPercent": 80, + "CpuShares": 0, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "Devices": [], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "IpcMode": "", + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "OomKillDisable": false, + "OomScoreAdj": 500, + "NetworkMode": "bridge", + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Type": "json-file" + }, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "SandboxKey": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "MacAddress": "", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2019-12-22T10:59:05.6385933Z", + "End": "2019-12-22T10:59:05.8078452Z", + "ExitCode": 0, + "Output": "" + } + ] + }, + "OOMKilled": false, + "Dead": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ], + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + }, + "text/plain": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified\n- `1`: Added\n- `2`: Deleted\n", + "operationId": "ContainerChanges", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ContainerChangeResponseItem", + "required": [ + "Kind", + "Path" + ], + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Path to file that has changed", + "nullable": false + }, + "Kind": { + "type": "integer", + "description": "Kind of change", + "format": "uint8", + "nullable": false + } + }, + "description": "change item in response to ContainerChanges operation", + "x-go-name": "ContainerChangeResponseItem" + } + }, + "example": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "tags": [ + "Container" + ], + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache`\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "example": { + "read": "2015-01-08T22:57:31.547920715Z", + "pids_stats": { + "current": 3 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "memory_stats": { + "stats": { + "total_pgmajfault": 0, + "cache": 0, + "mapped_file": 0, + "total_inactive_file": 0, + "pgpgout": 414, + "rss": 6537216, + "total_mapped_file": 0, + "writeback": 0, + "unevictable": 0, + "pgpgin": 477, + "total_unevictable": 0, + "pgmajfault": 0, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_writeback": 0, + "total_inactive_anon": 0, + "rss_huge": 6291456, + "hierarchical_memory_limit": 67108864, + "total_pgfault": 964, + "total_active_file": 0, + "active_anon": 6537216, + "total_active_anon": 6537216, + "total_pgpgout": 414, + "total_cache": 0, + "inactive_anon": 0, + "active_file": 0, + "pgfault": 964, + "inactive_file": 0, + "total_pgpgin": 477 + }, + "max_usage": 6651904, + "usage": 6537216, + "failcnt": 0, + "limit": 67108864 + }, + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100215355, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 739306590000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100093996, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 9492140000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already started", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already stopped", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "tags": [ + "Container" + ], + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/update": { + "post": { + "tags": [ + "Container" + ], + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "title": "ContainerUpdateResponse", + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerUpdate operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "update" + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "New name for the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\nand the stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach/ws": { + "get": { + "tags": [ + "Container" + ], + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "default": "not-running", + "enum": [ + "not-running", + "next-exit", + "removed" + ] + } + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.\n`path` parameter is asserted to be a directory. If it exists as a file, 400 error\nwill be returned with message \"not a directory\".\n", + "operationId": "PutContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The content was extracted successfully", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "not a directory" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + }, + "head": { + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + }, + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/prune": { + "post": { + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ContainerPruneResponse", + "type": "object", + "properties": { + "ContainersDeleted": { + "type": "array", + "description": "Container IDs that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/build": { + "post": { + "tags": [ + "Image" + ], + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "default": "application/x-tar", + "enum": [ + "application/x-tar" + ] + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + } + }, + "/build/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "keep-storage", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=`: duration relative to daemon's time, during which build cache was not used, in Go's duration format (e.g., '24h')\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "BuildPruneResponse", + "type": "object", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "type": "string", + "description": "ID of build cache object" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/create": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create an image", + "description": "Create an image by either pulling it from a registry or importing it.", + "operationId": "ImageCreate", + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputImage" + } + }, + "/images/{name}/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "HistoryResponseItem", + "required": [ + "Comment", + "Created", + "CreatedBy", + "Id", + "Size", + "Tags" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + }, + "description": "individual image layer information in response to ImageHistory operation", + "x-go-name": "HistoryResponseItem" + } + }, + "example": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "tags": [ + "Image" + ], + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The tag to associate with the image on the registry.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "tags": [ + "Image" + ], + "summary": "Tag an image", + "description": "Tag an image so that it becomes part of a repository.", + "operationId": "ImageTag", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}": { + "delete": { + "tags": [ + "Image" + ], + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "example": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/search": { + "get": { + "tags": [ + "Image" + ], + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-automated=(true|false)`\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ImageSearchResponseItem", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "example": [ + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ImagePruneResponse", + "type": "object", + "properties": { + "ImagesDeleted": { + "type": "array", + "description": "Images that were deleted", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/auth": { + "post": { + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "requestBody": { + "description": "Authentication to check", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the authentication", + "nullable": false + }, + "IdentityToken": { + "type": "string", + "description": "An opaque token used to authenticate a user after a successful login", + "nullable": false + } + } + }, + "example": { + "Status": "Login Succeeded", + "IdentityToken": "9cbaf023786cd7..." + } + } + } + }, + "204": { + "description": "No error", + "content": {} + }, + "401": { + "description": "Auth error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "authConfig" + } + }, + "/info": { + "get": { + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/version": { + "get": { + "tags": [ + "System" + ], + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/_ping": { + "get": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder\n\nThe default on Linux is version \"2\" (BuildKit), but the daemon\ncan be configured to recommend version \"1\" (classic Builder).\nWindows does not yet support BuildKit for native Windows images,\nand uses \"1\" (classic builder) as a default.\n\nThis value is a recommendation as advertised by the daemon, and\nit is up to the client to choose which builder to use.\n", + "schema": { + "type": "string", + "default": "2" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "head": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/commit": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The container configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "containerConfig" + } + }, + "/events": { + "get": { + "tags": [ + "System" + ], + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/system/df": { + "get": { + "tags": [ + "System" + ], + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + }, + "text/plain": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/load": { + "post": { + "tags": [ + "Image" + ], + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "description": "Tar archive containing images", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "imagesTarball" + } + }, + "/containers/{id}/exec": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Exec configuration", + "content": { + "application/json": { + "schema": { + "title": "ExecConfig", + "type": "object", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execConfig" + } + }, + "/exec/{id}/start": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ExecStartConfig", + "type": "object", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + } + }, + "example": { + "Detach": false, + "Tty": true, + "ConsoleSize": [ + 80, + 64 + ] + } + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execStartConfig" + } + }, + "/exec/{id}/resize": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ExecInspectResponse", + "type": "object", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "example": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes": { + "get": { + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/create": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "requestBody": { + "description": "Volume configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateOptions" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "volumeConfig" + } + }, + "/volumes/{name}": { + "get": { + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Volume" + ], + "summary": "\"Update a volume. Valid only for Swarm cluster volumes\"\n", + "operationId": "VolumeUpdate", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + }, + "delete": { + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "The volume was removed", + "content": {} + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/prune": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "VolumePruneResponse", + "type": "object", + "properties": { + "VolumesDeleted": { + "type": "array", + "description": "Volumes that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks": { + "get": { + "tags": [ + "Network" + ], + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Network" + } + }, + "example": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/{id}": { + "get": { + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/create": { + "post": { + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "requestBody": { + "description": "Network configuration", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The network's name." + }, + "CheckDuplicate": { + "type": "boolean", + "description": "Check for networks with duplicate names. Since Network is\nprimarily keyed based on a random ID and not on the name, and\nnetwork name is strictly a user-friendly alias to the network\nwhich is uniquely identified using ID, there is no guaranteed\nway to check for duplicates. CheckDuplicate is there to provide\na best effort checking of any networks which has the same name\nbut it is not guaranteed to catch all name collisions.\n" + }, + "Driver": { + "type": "string", + "description": "Name of the network driver plugin to use.", + "default": "bridge" + }, + "Internal": { + "type": "boolean", + "description": "Restrict external access to the network." + }, + "Attachable": { + "type": "boolean", + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n" + }, + "Ingress": { + "type": "boolean", + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "EnableIPv6": { + "type": "boolean", + "description": "Enable IPv6 on the network." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Network specific options to be used by the drivers." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "isolated_nw", + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.20.0.0/16", + "IPRange": "172.20.10.0/24", + "Gateway": "172.20.10.11" + }, + { + "Subnet": "2001:db8:abcd::/64", + "Gateway": "2001:db8:abcd::1011" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": true, + "Attachable": false, + "Ingress": false, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created network." + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + } + } + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "networkConfig" + } + }, + "/networks/{id}/connect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "operationId": "NetworkConnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkConnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network." + }, + "EndpointConfig": { + "$ref": "#/components/schemas/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/{id}/disconnect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkDisconnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.\n" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.\n" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/prune": { + "post": { + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkPruneResponse", + "type": "object", + "properties": { + "NetworksDeleted": { + "type": "array", + "description": "Networks that were deleted", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "description": "Returns information about installed plugins.", + "operationId": "PluginList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/privileges": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/pull": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "operationId": "PluginPull", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/{name}/json": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/create": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Path to tar containing plugin rootfs and manifest", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "tarContext" + } + }, + "/plugins/{name}/push": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "description": "Push a plugin to the registry.\n", + "operationId": "PluginPush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + "DEBUG=1" + ], + "items": { + "type": "string" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/nodes": { + "get": { + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/init": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "name": "force", + "in": "query", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/unlockkey": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/unlock": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmUnlockRequest", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/create": { + "post": { + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ] + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ServiceCreateResponse", + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the created service." + }, + "Warning": { + "type": "string", + "description": "Optional warning message" + } + }, + "example": { + "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "default": "spec", + "enum": [ + "spec", + "previous-spec" + ] + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ] + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}/logs": { + "get": { + "tags": [ + "Service" + ], + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the service", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such service: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks": { + "get": { + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ], + "items": { + "$ref": "#/components/schemas/Task" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "tags": [ + "Task" + ], + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such task: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets": { + "get": { + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ], + "items": { + "$ref": "#/components/schemas/Secret" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/create": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/secrets/{id}": { + "get": { + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs": { + "get": { + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ], + "items": { + "$ref": "#/components/schemas/Config" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/create": { + "post": { + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs/{id}": { + "get": { + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/distribution/{name}/json": { + "get": { + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/session": { + "post": { + "tags": [ + "Session" + ], + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Port": { + "required": [ + "PrivatePort", + "Type" + ], + "type": "object", + "properties": { + "IP": { + "type": "string", + "description": "Host IP address that the container's port is mapped to", + "format": "ip-address" + }, + "PrivatePort": { + "type": "integer", + "description": "Port on the container", + "format": "uint16", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "description": "Port exposed on the host", + "format": "uint16" + }, + "Type": { + "type": "string", + "nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "description": "An open port on a container", + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountPoint": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `volume` a docker volume with the given `Name`.\n- `tmpfs` a `tmpfs`.\n- `npipe` a named pipe from the host into the container.\n- `cluster` a Swarm cluster volume\n", + "example": "volume", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "Name": { + "type": "string", + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "example": "myvolume" + }, + "Source": { + "type": "string", + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "type": "string", + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "type": "string", + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "example": "local" + }, + "Mode": { + "type": "string", + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "example": "z" + }, + "RW": { + "type": "boolean", + "description": "Whether the mount is mounted writable (read-write).\n", + "example": true + }, + "Propagation": { + "type": "string", + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "example": "" + } + }, + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n" + }, + "DeviceMapping": { + "type": "object", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "description": "A device mapping between the host and container", + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "items": { + "type": "string" + } + }, + "Capabilities": { + "type": "array", + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n", + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n" + } + }, + "description": "A request for devices to be sent to device drivers" + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Device path" + }, + "Rate": { + "minimum": 0, + "type": "integer", + "description": "Rate", + "format": "int64" + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "Container path." + }, + "Source": { + "type": "string", + "description": "Mount source (e.g. a volume name, a host path)." + }, + "Type": { + "type": "string", + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "ReadOnly": { + "type": "boolean", + "description": "Whether the mount should be read-only." + }, + "Consistency": { + "type": "string", + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + }, + "BindOptions": { + "type": "object", + "properties": { + "Propagation": { + "type": "string", + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "type": "boolean", + "description": "Disable recursive bind mount.", + "default": false + }, + "CreateMountpoint": { + "type": "boolean", + "description": "Create mount point on host if missing", + "default": false + } + }, + "description": "Optional configuration for the `bind` type." + }, + "VolumeOptions": { + "type": "object", + "properties": { + "NoCopy": { + "type": "boolean", + "description": "Populate volume with data from the target.", + "default": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "DriverConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver to use to create the volume." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "key/value map of driver specific options." + } + }, + "description": "Map of driver specific options" + } + }, + "description": "Optional configuration for the `volume` type." + }, + "TmpfsOptions": { + "type": "object", + "properties": { + "SizeBytes": { + "type": "integer", + "description": "The size for the tmpfs mount in bytes.", + "format": "int64" + }, + "Mode": { + "type": "integer", + "description": "The permission mode for the tmpfs mount in an integer." + } + }, + "description": "Optional configuration for the `tmpfs` type." + } + } + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + }, + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n" + }, + "Resources": { + "type": "object", + "properties": { + "CpuShares": { + "type": "integer", + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n" + }, + "Memory": { + "type": "integer", + "description": "Memory limit in bytes.", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "type": "string", + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n" + }, + "BlkioWeight": { + "maximum": 1000, + "minimum": 0, + "type": "integer", + "description": "Block IO weight (relative weight)." + }, + "BlkioWeightDevice": { + "type": "array", + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "minimum": 0, + "type": "integer" + } + } + } + }, + "BlkioDeviceReadBps": { + "type": "array", + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "type": "array", + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "type": "array", + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "type": "array", + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "format": "int64" + }, + "CpuQuota": { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "format": "int64" + }, + "CpuRealtimePeriod": { + "type": "integer", + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "type": "integer", + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpusetCpus": { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "example": "0-3" + }, + "CpusetMems": { + "type": "string", + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n" + }, + "Devices": { + "type": "array", + "description": "A list of devices to add to the container.", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "type": "array", + "description": "a list of cgroup rules to apply to the container", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "type": "array", + "description": "A list of requests for devices to be sent to device drivers.\n", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "KernelMemoryTCP": { + "type": "integer", + "description": "Hard limit for kernel TCP buffer memory (in bytes). Depending on the\nOCI runtime in use, this option may be ignored. It is no longer supported\nby the default (runc) runtime.\n\nThis field is omitted when empty.\n", + "format": "int64" + }, + "MemoryReservation": { + "type": "integer", + "description": "Memory soft limit in bytes.", + "format": "int64" + }, + "MemorySwap": { + "type": "integer", + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "format": "int64" + }, + "MemorySwappiness": { + "maximum": 100, + "minimum": 0, + "type": "integer", + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "format": "int64" + }, + "NanoCpus": { + "type": "integer", + "description": "CPU quota in units of 10-9 CPUs.", + "format": "int64" + }, + "OomKillDisable": { + "type": "boolean", + "description": "Disable OOM Killer for the container." + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "PidsLimit": { + "type": "integer", + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + }, + "CpuCount": { + "type": "integer", + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "CpuPercent": { + "type": "integer", + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "IOMaximumIOps": { + "type": "integer", + "description": "Maximum IOps for the container system drive (Windows only)", + "format": "int64" + }, + "IOMaximumBandwidth": { + "type": "integer", + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "format": "int64" + } + }, + "description": "A container's resources (cgroups config, ulimits, etc)" + }, + "Limit": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "type": "integer", + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "format": "int64", + "example": 100, + "default": 0 + } + }, + "description": "An object describing a limit on resources which can be requested by a task.\n" + }, + "ResourceObject": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + }, + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n" + }, + "GenericResources": { + "type": "array", + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "HealthConfig": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Timeout": { + "type": "integer", + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Retries": { + "type": "integer", + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n" + }, + "StartPeriod": { + "type": "integer", + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + } + }, + "description": "A test to perform to check that the container is healthy." + }, + "Health": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "example": "healthy", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ] + }, + "FailingStreak": { + "type": "integer", + "description": "FailingStreak is the number of consecutive failures", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "description": "Health stores information about the container's healthcheck results.\n", + "nullable": true, + "x-nullable": true + }, + "HealthcheckResult": { + "type": "object", + "properties": { + "Start": { + "type": "string", + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "type": "string", + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "type": "integer", + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "example": 0 + }, + "Output": { + "type": "string", + "description": "Output from last check" + } + }, + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "nullable": true, + "x-nullable": true + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written" + }, + "LogConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "The logging configuration for this container" + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to the container.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n", + "enum": [ + "private", + "host" + ] + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n" + }, + "Tmpfs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n" + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "minimum": 0, + "type": "integer", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "format": "int64" + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A list of kernel parameters (sysctls) to set in the container.\nFor example:\n\n```\n{\"net.ipv4.ip_forward\": \"1\"}\n```\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + } + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + } + } + } + } + ] + }, + "ContainerConfig": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "example": "439f4e91bd1d" + }, + "Domainname": { + "type": "string", + "description": "The domain name to use for the container.\n" + }, + "User": { + "type": "string", + "description": "The user that commands are run as inside the container." + }, + "AttachStdin": { + "type": "boolean", + "description": "Whether to attach to `stdin`.", + "default": false + }, + "AttachStdout": { + "type": "boolean", + "description": "Whether to attach to `stdout`.", + "default": true + }, + "AttachStderr": { + "type": "boolean", + "description": "Whether to attach to `stderr`.", + "default": true + }, + "ExposedPorts": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "nullable": true, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "type": "boolean", + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "default": false + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`", + "default": false + }, + "StdinOnce": { + "type": "boolean", + "description": "Close `stdin` after one attached client disconnects", + "default": false + }, + "Env": { + "type": "array", + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run specified as a string or an array of strings.\n", + "example": [ + "/bin/sh" + ], + "items": { + "type": "string" + } + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "type": "boolean", + "description": "Command is already escaped (Windows only)", + "nullable": true, + "example": false, + "default": false + }, + "Image": { + "type": "string", + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "example": "example-image:1.0" + }, + "Volumes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for commands to run in.", + "example": "/public/" + }, + "Entrypoint": { + "type": "array", + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "example": [], + "items": { + "type": "string" + } + }, + "NetworkDisabled": { + "type": "boolean", + "description": "Disable networking for the container.", + "nullable": true + }, + "MacAddress": { + "type": "string", + "description": "MAC address of the container.", + "nullable": true + }, + "OnBuild": { + "type": "array", + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "nullable": true, + "example": [], + "items": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop a container as a string or unsigned integer.\n", + "nullable": true, + "example": "SIGTERM" + }, + "StopTimeout": { + "type": "integer", + "description": "Timeout to stop a container in seconds.", + "nullable": true + }, + "Shell": { + "type": "array", + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "nullable": true, + "example": [ + "/bin/sh", + "-c" + ], + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a container that is portable between hosts.\n\nWhen used as `ContainerConfig` field in an image, `ContainerConfig` is an\noptional field containing the configuration of the container that was last\ncommitted when creating the image.\n\nPrevious versions of Docker builder used this field to store build cache,\nand it is not in active use anymore.\n" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network.\n" + } + }, + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + } + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Bridge": { + "type": "string", + "description": "Name of the network's bridge (for example, `docker0`).", + "example": "docker0" + }, + "SandboxID": { + "type": "string", + "description": "SandboxID uniquely represents a container's network stack.", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "HairpinMode": { + "type": "boolean", + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n", + "example": false + }, + "LinkLocalIPv6Address": { + "type": "string", + "description": "IPv6 unicast address using the link-local prefix.", + "example": "fe80::42:acff:fe11:1" + }, + "LinkLocalIPv6PrefixLen": { + "type": "integer", + "description": "Prefix length of the IPv6 unicast address.", + "example": 64 + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "SandboxKey": { + "type": "string", + "description": "SandboxKey identifies the sandbox", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "SecondaryIPv6Addresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "EndpointID": { + "type": "string", + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 64 + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address for this network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8:2::100" + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the container on the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "Information about all networks that the container is connected to.\n" + } + }, + "description": "NetworkSettings exposes the network settings in the API" + }, + "Address": { + "type": "object", + "properties": { + "Addr": { + "type": "string", + "description": "IP address." + }, + "PrefixLen": { + "type": "integer", + "description": "Mask length of the IP address." + } + }, + "description": "Address represents an IPv4 or IPv6 IP address." + }, + "PortMap": { + "type": "object", + "additionalProperties": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ] + } + }, + "PortBinding": { + "type": "object", + "properties": { + "HostIp": { + "type": "string", + "description": "Host IP address that the container's port is mapped to.", + "example": "127.0.0.1" + }, + "HostPort": { + "type": "string", + "description": "Host port number that the container's port is mapped to.", + "example": "4443" + } + }, + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n" + }, + "GraphDriverData": { + "required": [ + "Data", + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the storage driver.", + "nullable": false, + "example": "overlay2" + }, + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "nullable": false, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + }, + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n" + }, + "ImageInspect": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Parent": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "Comment": { + "type": "string", + "description": "Optional message that was set when committing or importing the image.\n", + "nullable": false, + "example": "" + }, + "Created": { + "type": "string", + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "nullable": false, + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Container": { + "type": "string", + "description": "The ID of the container that was used to create the image.\n\nDepending on how the image was created, this field may be empty.\n", + "nullable": false, + "example": "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735" + }, + "ContainerConfig": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "DockerVersion": { + "type": "string", + "description": "The version of Docker that was used to build the image.\n\nDepending on how the image was created, this field may be empty.\n", + "nullable": false, + "example": "20.10.7" + }, + "Author": { + "type": "string", + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "nullable": false, + "example": "" + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "Architecture": { + "type": "string", + "description": "Hardware CPU architecture that the image runs on.\n", + "nullable": false, + "example": "arm" + }, + "Variant": { + "type": "string", + "description": "CPU architecture variant (presently ARM-only).\n", + "nullable": true, + "example": "v7" + }, + "Os": { + "type": "string", + "description": "Operating System the image is built to run on.\n", + "nullable": false, + "example": "linux" + }, + "OsVersion": { + "type": "string", + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "nullable": true, + "example": "" + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nIn versions of Docker before v1.10, this field was calculated from\nthe image itself and all of its parent images. Docker v1.10 and up\nstore images self-contained, and no longer use a parent-chain, making\nthis field an equivalent of the Size field.\n\nThis field is kept for backward compatibility, but may be removed in\na future version of the API.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "RootFS": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "layers" + }, + "Layers": { + "type": "array", + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ], + "items": { + "type": "string" + } + } + }, + "description": "Information about the image's RootFS, including the layer IDs.\n" + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "format": "dateTime", + "nullable": true, + "example": "2022-02-28T14:40:02.623929178Z" + } + }, + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n" + } + }, + "description": "Information about an image in the local image cache.\n" + }, + "ImageSummary": { + "required": [ + "Containers", + "Created", + "Id", + "Labels", + "ParentId", + "RepoDigests", + "RepoTags", + "SharedSize", + "Size", + "VirtualSize" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "nullable": false, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "nullable": false, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Created": { + "type": "integer", + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds sinds EPOCH).\n", + "nullable": false, + "example": 1644009612 + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 172064416 + }, + "SharedSize": { + "type": "integer", + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nIn versions of Docker before v1.10, this field was calculated from\nthe image itself and all of its parent images. Docker v1.10 and up\nstore images self-contained, and no longer use a parent-chain, making\nthis field an equivalent of the Size field.\n\nThis field is kept for backward compatibility, but may be removed in\na future version of the API.\n", + "format": "int64", + "nullable": false, + "example": 172064416 + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "type": "integer", + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\nThis size is not calculated by default, and depends on which API endpoint\nis used. `-1` indicates that the value has not been set / calculated.\n", + "nullable": false, + "example": 2 + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "email": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "required": [ + "Driver", + "Labels", + "Mountpoint", + "Name", + "Options", + "Scope" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "nullable": false, + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "nullable": false, + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "description": "Date/Time the volume was created.", + "format": "dateTime", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "nullable": false, + "example": "local", + "default": "local", + "enum": [ + "local", + "global" + ] + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The driver specific options used when creating the volume.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "required": [ + "RefCount", + "Size" + ], + "type": "object", + "properties": { + "Size": { + "type": "integer", + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "format": "int64", + "nullable": false, + "default": -1 + }, + "RefCount": { + "type": "integer", + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "format": "int64", + "nullable": false, + "default": -1 + } + }, + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "nullable": true, + "x-go-name": "UsageData" + } + } + }, + "VolumeCreateOptions": { + "title": "VolumeConfig", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver to use.", + "nullable": false, + "example": "custom", + "default": "local" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration", + "x-go-name": "CreateOptions" + }, + "VolumeListResponse": { + "title": "VolumeListResponse", + "type": "object", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "Volume list response", + "x-go-name": "ListResponse" + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Scope": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "Internal": { + "type": "boolean" + }, + "Attachable": { + "type": "boolean" + }, + "Ingress": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/NetworkContainer" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Name": "net01", + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Created": "2016-10-19T04:33:30.360899459Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.19.0.0/16", + "Gateway": "172.19.0.1" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": false, + "Attachable": false, + "Ingress": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "IPAM": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "description": "Name of the IPAM driver to use.", + "default": "default" + }, + "Config": { + "type": "array", + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a map." + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string" + }, + "IPRange": { + "type": "string" + }, + "Gateway": { + "type": "string" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EndpointID": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parent": { + "type": "string", + "description": "ID of the parent build cache record.\n\n> **Deprecated**: This field is deprecated, and omitted if empty.\n", + "nullable": true, + "example": "" + }, + "Parents": { + "type": "array", + "description": "List of parent build cache record IDs.\n", + "nullable": true, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ], + "items": { + "type": "string" + } + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "type": "integer", + "description": "Amount of disk space used by the build cache (in bytes).\n", + "example": 51 + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "type": "string", + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + }, + "description": "BuildCache contains information about a build cache record.\n" + }, + "ImageID": { + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "description": "Image ID or Digest", + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The error message.", + "nullable": false + } + }, + "description": "Represents an error.", + "example": { + "message": "Something went wrong." + } + }, + "IdResponse": { + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The id of the newly created object.", + "nullable": false + } + }, + "description": "Response to an API call that returns just an Id" + }, + "EndpointSettings": { + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "example": [ + "container_1", + "container_2" + ], + "items": { + "type": "string" + } + }, + "Aliases": { + "type": "array", + "example": [ + "server_x", + "server_y" + ], + "items": { + "type": "string" + } + }, + "NetworkID": { + "type": "string", + "description": "Unique ID of the network.\n", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "type": "string", + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for this network.\n", + "example": "172.17.0.1" + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address.\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address.\n", + "example": "2001:db8:2::100" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address.\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n", + "format": "int64", + "example": 64 + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the endpoint on this network.\n", + "example": "02:42:ac:11:00:04" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "description": "Configuration for a network endpoint." + }, + "EndpointIPAMConfig": { + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "example": [ + "169.254.34.68", + "fe80::3468" + ], + "items": { + "type": "string" + } + } + }, + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "nullable": true, + "x-nullable": true + }, + "PluginMount": { + "required": [ + "Description", + "Destination", + "Name", + "Options", + "Settable", + "Source", + "Type" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "example": [ + "rbind", + "rw" + ], + "items": { + "type": "string" + } + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginDevice": { + "required": [ + "Description", + "Name", + "Path", + "Settable" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginEnv": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginInterfaceType": { + "required": [ + "Capability", + "Prefix", + "Version" + ], + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "nullable": false + }, + "Capability": { + "type": "string", + "nullable": false + }, + "Version": { + "type": "string", + "nullable": false + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginPrivilege": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "example": [ + "host" + ], + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "x-go-name": "PluginPrivilege" + }, + "Plugin": { + "required": [ + "Config", + "Enabled", + "Name", + "Settings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "type": "boolean", + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "nullable": false, + "example": true + }, + "Settings": { + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "type": "object", + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + "DEBUG=0" + ], + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "description": "Settings that can be modified by users.", + "nullable": false + }, + "PluginReference": { + "type": "string", + "description": "plugin remote reference used to push/pull the plugin", + "nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "required": [ + "Args", + "Description", + "Documentation", + "Entrypoint", + "Env", + "Interface", + "IpcHost", + "Linux", + "Mounts", + "Network", + "PidHost", + "PropagatedMount", + "WorkDir" + ], + "type": "object", + "properties": { + "DockerVersion": { + "type": "string", + "description": "Docker Version used to create the plugin", + "nullable": false, + "example": "17.06.0-ce" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "required": [ + "Socket", + "Types" + ], + "type": "object", + "properties": { + "Types": { + "type": "array", + "example": [ + "docker.volumedriver/1.0" + ], + "items": { + "$ref": "#/components/schemas/PluginInterfaceType" + } + }, + "Socket": { + "type": "string", + "nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "description": "Protocol to use for clients connecting to the plugin.", + "example": "some.protocol/v1.0", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "description": "The interface between Docker and the plugin", + "nullable": false + }, + "Entrypoint": { + "type": "array", + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ], + "items": { + "type": "string" + } + }, + "WorkDir": { + "type": "string", + "nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "host" + } + }, + "nullable": false + }, + "Linux": { + "required": [ + "AllowAllDevices", + "Capabilities", + "Devices" + ], + "type": "object", + "properties": { + "Capabilities": { + "type": "array", + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "AllowAllDevices": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Value": "0" + } + ], + "items": { + "$ref": "#/components/schemas/PluginEnv" + } + }, + "Args": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "args" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ], + "items": { + "type": "string" + } + } + } + } + }, + "description": "The config of a plugin.", + "nullable": false + } + }, + "description": "A plugin for the Engine API" + }, + "ObjectVersion": { + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + }, + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n" + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name for the node.", + "example": "my-node" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Role": { + "type": "string", + "description": "Role of the node.", + "example": "manager", + "enum": [ + "worker", + "manager" + ] + }, + "Availability": { + "type": "string", + "description": "Availability of the node.", + "example": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + }, + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n" + }, + "Platform": { + "type": "object", + "properties": { + "Architecture": { + "type": "string", + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "example": "x86_64" + }, + "OS": { + "type": "string", + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "example": "linux" + } + }, + "description": "Platform represents the platform (Arch/OS).\n" + }, + "EngineDescription": { + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "logentries" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ], + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + } + }, + "description": "EngineDescription provides information about an engine." + }, + "TLSInfo": { + "type": "object", + "properties": { + "TrustRoot": { + "type": "string", + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n" + }, + "CertIssuerSubject": { + "type": "string", + "description": "The base64-url-safe-encoded raw subject bytes of the issuer." + }, + "CertIssuerPublicKey": { + "type": "string", + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n" + } + }, + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "type": "string", + "description": "IP address of the node.", + "example": "172.17.0.2" + } + }, + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n" + }, + "NodeState": { + "type": "string", + "description": "NodeState represents the state of a node.", + "example": "ready", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ] + }, + "ManagerStatus": { + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "example": true, + "default": false + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "type": "string", + "description": "The IP address and port at which the manager is reachable.\n", + "example": "10.0.0.46:2377" + } + }, + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "nullable": true, + "x-nullable": true + }, + "Reachability": { + "type": "string", + "description": "Reachability represents the reachability of a node.", + "example": "reachable", + "enum": [ + "unknown", + "unreachable", + "reachable" + ] + }, + "SwarmSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the swarm.", + "example": "default" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "type": "integer", + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "format": "int64", + "example": 10 + } + }, + "description": "Orchestration configuration.", + "nullable": true + }, + "Raft": { + "type": "object", + "properties": { + "SnapshotInterval": { + "type": "integer", + "description": "The number of log entries between snapshots.", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "type": "integer", + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "type": "integer", + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "type": "integer", + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 3 + }, + "HeartbeatTick": { + "type": "integer", + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 1 + } + }, + "description": "Raft configuration." + }, + "Dispatcher": { + "type": "object", + "properties": { + "HeartbeatPeriod": { + "type": "integer", + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "format": "int64", + "example": 5000000000 + } + }, + "description": "Dispatcher configuration.", + "nullable": true + }, + "CAConfig": { + "type": "object", + "properties": { + "NodeCertExpiry": { + "type": "integer", + "description": "The duration node certificates are issued for.", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "type": "array", + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "type": "string", + "description": "URL where certificate signing requests should be sent.\n" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n" + }, + "CACert": { + "type": "string", + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n" + } + } + } + }, + "SigningCACert": { + "type": "string", + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n" + }, + "SigningCAKey": { + "type": "string", + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n" + }, + "ForceRotate": { + "type": "integer", + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64" + } + }, + "description": "CA configuration.", + "nullable": true + }, + "EncryptionConfig": { + "type": "object", + "properties": { + "AutoLockManagers": { + "type": "boolean", + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "example": false + } + }, + "description": "Parameters related to encryption-at-rest." + }, + "TaskDefaults": { + "type": "object", + "properties": { + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The log driver to use as a default for new tasks.\n", + "example": "json-file" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "example": { + "max-file": "10", + "max-size": "100m" + } + } + }, + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n" + } + }, + "description": "Defaults for creating tasks in this cluster." + } + }, + "description": "User modifiable swarm configuration." + }, + "ClusterInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the swarm.", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "type": "boolean", + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "example": false + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "format": "uint32", + "example": 4789 + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "items": { + "type": "string", + "format": "CIDR", + "example": "" + } + }, + "SubnetSize": { + "maximum": 29, + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "format": "uint32", + "example": 24 + } + }, + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "nullable": true, + "x-nullable": true + }, + "JoinTokens": { + "type": "object", + "properties": { + "Worker": { + "type": "string", + "description": "The token workers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "type": "string", + "description": "The token managers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + }, + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n" + }, + "Swarm": { + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name or 'alias' to use for the plugin." + }, + "Remote": { + "type": "string", + "description": "The plugin image reference to use." + }, + "Disabled": { + "type": "boolean", + "description": "Disable the plugin once scheduled." + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "ContainerSpec": { + "type": "object", + "properties": { + "Image": { + "type": "string", + "description": "The image name to use for the container" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value data." + }, + "Command": { + "type": "array", + "description": "The command to be run in the image.", + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "description": "Arguments to the command.", + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n" + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `VAR=value`.\n", + "items": { + "type": "string" + } + }, + "Dir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "User": { + "type": "string", + "description": "The user inside the container." + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "properties": { + "CredentialSpec": { + "type": "object", + "properties": { + "Config": { + "type": "string", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "0bt9dmxjvjiqermk6xrop3ekq" + }, + "File": { + "type": "string", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "spec.json" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + }, + "description": "CredentialSpec for managed service account (Windows only)" + }, + "SELinuxContext": { + "type": "object", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + }, + "description": "SELinux labels of the container" + } + }, + "description": "Security options for the container" + }, + "TTY": { + "type": "boolean", + "description": "Whether a pseudo-TTY should be allocated." + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`" + }, + "ReadOnly": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop the container." + }, + "StopGracePeriod": { + "type": "integer", + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "format": "int64" + }, + "HealthCheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "type": "object", + "properties": { + "Nameservers": { + "type": "array", + "description": "The IP addresses of the name servers.", + "items": { + "type": "string" + } + }, + "Search": { + "type": "array", + "description": "A search list for host-name lookup.", + "items": { + "type": "string" + } + }, + "Options": { + "type": "array", + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "items": { + "type": "string" + } + } + }, + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n" + }, + "Secrets": { + "type": "array", + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n" + }, + "SecretID": { + "type": "string", + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n" + }, + "SecretName": { + "type": "string", + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n" + } + } + } + }, + "Configs": { + "type": "array", + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n" + }, + "Runtime": { + "type": "object", + "properties": {}, + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n" + }, + "ConfigID": { + "type": "string", + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n" + }, + "ConfigName": { + "type": "string", + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n" + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW" + ], + "items": { + "type": "string" + } + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + } + }, + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "NetworkAttachmentSpec": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string", + "description": "ID of the container represented by this task" + } + }, + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "Resources": { + "type": "object", + "properties": { + "Limits": { + "$ref": "#/components/schemas/Limit" + }, + "Reservations": { + "$ref": "#/components/schemas/ResourceObject" + } + }, + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n" + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Condition": { + "type": "string", + "description": "Condition for restart.", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "type": "integer", + "description": "Delay between restart attempts.", + "format": "int64" + }, + "MaxAttempts": { + "type": "integer", + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "format": "int64", + "default": 0 + }, + "Window": { + "type": "integer", + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "format": "int64", + "default": 0 + } + }, + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n" + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ], + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ], + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string", + "description": "label descriptor, such as `engine.labels.az`.\n" + } + } + } + } + } + }, + "MaxReplicas": { + "type": "integer", + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "format": "int64", + "default": 0 + }, + "Platforms": { + "type": "array", + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "type": "integer", + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime is the type of runtime specified for the task executor.\n" + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n" + } + }, + "description": "User modifiable task configuration." + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the task." + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "type": "string", + "description": "Name of the task." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "type": "string", + "description": "The ID of the service this task is part of." + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "type": "string", + "description": "The ID of the node that this task is on." + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "type": "object", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + } + } + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the service." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "integer", + "description": "The maximum number of replicas to run simultaneously.\n", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "type": "integer", + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "format": "int64" + } + }, + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n" + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "description": "The mode used for services which run a task to the completed state\non each valid node.\n" + } + }, + "description": "Scheduling mode for the service." + }, + "UpdateConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between updates, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the update strategy of the service." + }, + "RollbackConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the rollback strategy of the service." + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + }, + "description": "User modifiable configuration for a service." + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "type": "integer", + "description": "The port inside the container." + }, + "PublishedPort": { + "type": "integer", + "description": "The port on the swarm hosts." + }, + "PublishMode": { + "type": "string", + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "example": "ingress", + "default": "ingress", + "enum": [ + "ingress", + "host" + ] + } + } + }, + "EndpointSpec": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "type": "array", + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "Properties that can be configured to access and load balance a service." + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + }, + "description": "The status of a service update." + }, + "ServiceStatus": { + "type": "object", + "properties": { + "RunningTasks": { + "type": "integer", + "description": "The number of tasks for the service currently in the Running state.\n", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "type": "integer", + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "type": "integer", + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "format": "uint64" + } + }, + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n" + }, + "JobStatus": { + "type": "object", + "properties": { + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "LastExecution": { + "type": "string", + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "format": "dateTime" + } + }, + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n" + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Untagged": { + "type": "string", + "description": "The image ID of an image that was untagged" + }, + "Deleted": { + "type": "string", + "description": "The image ID of an image that was deleted" + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "description": "Optional warning messages", + "items": { + "type": "string" + } + } + }, + "example": { + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of this container", + "x-go-name": "ID" + }, + "Names": { + "type": "array", + "description": "The names that this container has been given", + "items": { + "type": "string" + } + }, + "Image": { + "type": "string", + "description": "The name of the image used when creating this container" + }, + "ImageID": { + "type": "string", + "description": "The ID of the image that this container was created from" + }, + "Command": { + "type": "string", + "description": "Command to run when starting the container" + }, + "Created": { + "type": "integer", + "description": "When the container was created", + "format": "int64" + }, + "Ports": { + "type": "array", + "description": "The ports exposed by this container", + "items": { + "$ref": "#/components/schemas/Port" + } + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container", + "format": "int64" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "State": { + "type": "string", + "description": "The state of this container (e.g. `Exited`)" + }, + "Status": { + "type": "string", + "description": "Additional human-readable status of this container (e.g. `Exit 0`)" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "description": "A summary of the container's network settings" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + } + } + }, + "Driver": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver.", + "nullable": false, + "example": "some-driver" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key/value map of driver-specific options.", + "nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + }, + "description": "Driver represents a driver (network, logging, secrets)." + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the secret." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "example": "" + }, + "Driver": { + "$ref": "#/components/schemas/Driver" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the config." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\nconfig data.\n" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "example": "running", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + }, + "Running": { + "type": "boolean", + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "example": true + }, + "Paused": { + "type": "boolean", + "description": "Whether this container is paused.", + "example": false + }, + "Restarting": { + "type": "boolean", + "description": "Whether this container is restarting.", + "example": false + }, + "OOMKilled": { + "type": "boolean", + "description": "Whether this container has been killed because it ran out of memory.\n", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "type": "integer", + "description": "The process ID of this container", + "example": 1234 + }, + "ExitCode": { + "type": "integer", + "description": "The last exit code of this container", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "description": "The time when this container was last started.", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "type": "string", + "description": "The time when this container last exited.", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "nullable": true, + "x-nullable": true + }, + "ContainerCreateResponse": { + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created container", + "nullable": false, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "type": "array", + "description": "Warnings encountered when creating the container", + "nullable": false, + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerCreate operation", + "x-go-name": "CreateResponse" + }, + "ContainerWaitResponse": { + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "type": "object", + "properties": { + "StatusCode": { + "type": "integer", + "description": "Exit code of the container", + "format": "int64", + "nullable": false + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + }, + "description": "OK response to ContainerWait operation", + "x-go-name": "WaitResponse" + }, + "ContainerWaitExitError": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Details of an error" + } + }, + "description": "container waiting error, if any", + "x-go-name": "WaitExitError" + }, + "SystemVersion": { + "type": "object", + "properties": { + "Platform": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "required": [ + "Name", + "Version" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the component\n", + "example": "Engine" + }, + "Version": { + "type": "string", + "description": "Version of the component\n", + "nullable": false, + "example": "19.03.12" + }, + "Details": { + "type": "object", + "properties": {}, + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "nullable": true + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Version": { + "type": "string", + "description": "The version of the daemon", + "example": "19.03.12" + }, + "ApiVersion": { + "type": "string", + "description": "The default (and highest) API version that is supported by the daemon\n", + "example": "1.40" + }, + "MinAPIVersion": { + "type": "string", + "description": "The minimum API version that is supported by the daemon\n", + "example": "1.12" + }, + "GitCommit": { + "type": "string", + "description": "The Git commit of the source code that was used to build the daemon\n", + "example": "48a66213fe" + }, + "GoVersion": { + "type": "string", + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "example": "go1.13.14" + }, + "Os": { + "type": "string", + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "example": "linux" + }, + "Arch": { + "type": "string", + "description": "The architecture that the daemon is running on\n", + "example": "amd64" + }, + "KernelVersion": { + "type": "string", + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "example": "4.19.76-linuxkit" + }, + "Experimental": { + "type": "boolean", + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "example": true + }, + "BuildTime": { + "type": "string", + "description": "The date and time that the daemon was compiled.\n", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + }, + "description": "Response of Engine API: GET \"/version\"\n" + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "type": "integer", + "description": "Total number of containers on the host.", + "example": 14 + }, + "ContainersRunning": { + "type": "integer", + "description": "Number of containers with status `\"running\"`.\n", + "example": 3 + }, + "ContainersPaused": { + "type": "integer", + "description": "Number of containers with status `\"paused\"`.\n", + "example": 1 + }, + "ContainersStopped": { + "type": "integer", + "description": "Number of containers with status `\"stopped\"`.\n", + "example": 10 + }, + "Images": { + "type": "integer", + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "example": 508 + }, + "Driver": { + "type": "string", + "description": "Name of the storage driver in use.", + "example": "overlay2" + }, + "DriverStatus": { + "type": "array", + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "DockerRootDir": { + "type": "string", + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "type": "boolean", + "description": "Indicates if the host has memory limit support enabled.", + "example": true + }, + "SwapLimit": { + "type": "boolean", + "description": "Indicates if the host has memory swap limit support enabled.", + "example": true + }, + "KernelMemoryTCP": { + "type": "boolean", + "description": "Indicates if the host has kernel memory TCP limit support enabled. This\nfield is omitted if not supported.\n\nKernel memory TCP limits are not supported when using cgroups v2, which\ndoes not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup.\n", + "example": true + }, + "CpuCfsPeriod": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "example": true + }, + "CpuCfsQuota": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "example": true + }, + "CPUShares": { + "type": "boolean", + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "example": true + }, + "CPUSet": { + "type": "boolean", + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "example": true + }, + "PidsLimit": { + "type": "boolean", + "description": "Indicates if the host kernel has PID limit support enabled.", + "example": true + }, + "OomKillDisable": { + "type": "boolean", + "description": "Indicates if OOM killer disable is supported on the host." + }, + "IPv4Forwarding": { + "type": "boolean", + "description": "Indicates IPv4 forwarding is enabled.", + "example": true + }, + "BridgeNfIptables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "example": true + }, + "BridgeNfIp6tables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "example": true + }, + "Debug": { + "type": "boolean", + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "example": true + }, + "NFd": { + "type": "integer", + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 64 + }, + "NGoroutines": { + "type": "integer", + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 174 + }, + "SystemTime": { + "type": "string", + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "type": "string", + "description": "The logging driver to use as a default for new containers.\n" + }, + "CgroupDriver": { + "type": "string", + "description": "The driver to use for managing cgroups.\n", + "example": "cgroupfs", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd", + "none" + ] + }, + "CgroupVersion": { + "type": "string", + "description": "The version of the cgroup.\n", + "example": "1", + "default": "1", + "enum": [ + "1", + "2" + ] + }, + "NEventsListener": { + "type": "integer", + "description": "Number of event listeners subscribed.", + "example": 30 + }, + "KernelVersion": { + "type": "string", + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "example": "4.9.38-moby" + }, + "OperatingSystem": { + "type": "string", + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "example": "Alpine Linux v3.5" + }, + "OSVersion": { + "type": "string", + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "example": "16.04" + }, + "OSType": { + "type": "string", + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "linux" + }, + "Architecture": { + "type": "string", + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "x86_64" + }, + "NCPU": { + "type": "integer", + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "example": 4 + }, + "MemTotal": { + "type": "integer", + "description": "Total amount of physical memory available on the host, in bytes.\n", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "type": "string", + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "example": "https://index.docker.io/v1/", + "default": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "type": "string", + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "type": "string", + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "type": "string", + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "*.local, 169.254/16" + }, + "Name": { + "type": "string", + "description": "Hostname of the host.", + "example": "node5.corp.example.com" + }, + "Labels": { + "type": "array", + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "example": [ + "storage=ssd", + "production" + ], + "items": { + "type": "string" + } + }, + "ExperimentalBuild": { + "type": "boolean", + "description": "Indicates if experimental features are enabled on the daemon.\n", + "example": true + }, + "ServerVersion": { + "type": "string", + "description": "Version string of the daemon.\n", + "example": "23.0.0" + }, + "Runtimes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "type": "string", + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "example": "runc", + "default": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "type": "boolean", + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "example": false, + "default": false + }, + "Isolation": { + "type": "string", + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "InitBinary": { + "type": "string", + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "type": "array", + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), and rootless.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ], + "items": { + "type": "string" + } + }, + "ProductLicense": { + "type": "string", + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "type": "array", + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "items": { + "type": "object", + "properties": { + "Base": { + "type": "string", + "description": "The network address in CIDR format", + "example": "10.10.0.0/16" + }, + "Size": { + "type": "integer", + "description": "The network pool size", + "example": 24 + } + } + } + }, + "Warnings": { + "type": "array", + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "example": [ + "WARNING: No memory limit support", + "WARNING: bridge-nf-call-iptables is disabled", + "WARNING: bridge-nf-call-ip6tables is disabled" + ], + "items": { + "type": "string" + } + } + } + }, + "PluginsInfo": { + "type": "object", + "properties": { + "Volume": { + "type": "array", + "description": "Names of available volume-drivers, and network-driver plugins.", + "example": [ + "local" + ], + "items": { + "type": "string" + } + }, + "Network": { + "type": "array", + "description": "Names of available network-drivers, and network-driver plugins.", + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ], + "items": { + "type": "string" + } + }, + "Authorization": { + "type": "array", + "description": "Names of available authorization plugins.", + "example": [ + "img-authz-plugin", + "hbm" + ], + "items": { + "type": "string" + } + }, + "Log": { + "type": "array", + "description": "Names of available logging-drivers, and logging-driver plugins.", + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "logentries", + "splunk", + "syslog" + ], + "items": { + "type": "string" + } + } + }, + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n" + }, + "RegistryServiceConfig": { + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "type": "array", + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "AllowNondistributableArtifactsHostnames": { + "type": "array", + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `[:]` or `[:]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ], + "items": { + "type": "string" + } + }, + "InsecureRegistryCIDRs": { + "type": "array", + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "type": "array", + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ], + "items": { + "type": "string" + } + } + }, + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "nullable": true, + "x-nullable": true + }, + "IndexInfo": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the registry, such as \"docker.io\".\n", + "example": "docker.io" + }, + "Mirrors": { + "type": "array", + "description": "List of mirrors, expressed as URIs.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ], + "items": { + "type": "string" + } + }, + "Secure": { + "type": "boolean", + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "example": true + }, + "Official": { + "type": "boolean", + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "example": true + } + }, + "description": "IndexInfo contains information about a registry.", + "nullable": true, + "x-nullable": true + }, + "Runtime": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "type": "array", + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "items": { + "type": "string" + } + } + }, + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n" + }, + "Commit": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Actual commit ID of external tool.", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + }, + "Expected": { + "type": "string", + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + } + }, + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n" + }, + "SwarmInfo": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm.", + "example": "k67qz4598weg5unwwffg6z1m1", + "default": "" + }, + "NodeAddr": { + "type": "string", + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "example": "10.0.0.46", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "example": true, + "default": false + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "type": "array", + "description": "List of ID's and addresses of other managers in the swarm.\n", + "nullable": true, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "items": { + "$ref": "#/components/schemas/PeerNode" + } + }, + "Nodes": { + "type": "integer", + "description": "Total number of nodes in the swarm.", + "nullable": true, + "example": 4 + }, + "Managers": { + "type": "integer", + "description": "Total number of managers in the swarm.", + "nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + }, + "description": "Represents generic information about swarm.\n" + }, + "LocalNodeState": { + "type": "string", + "description": "Current local status of this node.", + "example": "active", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ] + }, + "PeerNode": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm." + }, + "Addr": { + "type": "string", + "description": "IP address and ports at which this node can be reached.\n" + } + }, + "description": "Represents a peer-node in the swarm" + }, + "NetworkAttachmentConfig": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "The target network for attachment. Must be a network name or ID.\n" + }, + "Aliases": { + "type": "array", + "description": "Discoverable alternate names for the service on this network.\n", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver attachment options for the network target.\n" + } + }, + "description": "Specifies how a service should be attached to a particular network.\n" + }, + "EventActor": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the object emitting the event", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Various key/value attributes of the object, depending on its type.\n", + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + }, + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n" + }, + "EventMessage": { + "title": "SystemEventsResponse", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The type of object emitting the event", + "example": "container", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ] + }, + "Action": { + "type": "string", + "description": "The type of event", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "type": "string", + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "type": "integer", + "description": "Timestamp of event", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "type": "integer", + "description": "Timestamp of event, with nanosecond accuracy", + "format": "int64", + "example": 1629574695515050000 + } + }, + "description": "EventMessage represents the information an event contains.\n" + }, + "OCIDescriptor": { + "type": "object", + "properties": { + "mediaType": { + "type": "string", + "description": "The media type of the object this schema refers to.\n", + "example": "application/vnd.docker.distribution.manifest.v2+json" + }, + "digest": { + "type": "string", + "description": "The digest of the targeted content.\n", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "type": "integer", + "description": "The size in bytes of the blob.\n", + "format": "int64", + "example": 3987495 + } + }, + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "x-go-name": "Descriptor" + }, + "OCIPlatform": { + "type": "object", + "properties": { + "architecture": { + "type": "string", + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "example": "arm" + }, + "os": { + "type": "string", + "description": "The operating system, for example `linux` or `windows`.\n", + "example": "windows" + }, + "os.version": { + "type": "string", + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "example": "10.0.19041.1165" + }, + "os.features": { + "type": "array", + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "example": [ + "win32k" + ], + "items": { + "type": "string" + } + }, + "variant": { + "type": "string", + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "example": "v7" + } + }, + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "x-go-name": "Platform" + }, + "DistributionInspect": { + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "type": "object", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + }, + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "x-go-name": "DistributionInspect" + }, + "ClusterVolume": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "properties": { + "CapacityBytes": { + "type": "integer", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n", + "format": "int64" + }, + "VolumeContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n" + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Information about the global status of the volume.\n" + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n" + } + } + } + } + }, + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n" + }, + "ClusterVolumeSpec": { + "type": "object", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "nullable": false, + "default": "single", + "enum": [ + "single", + "multi" + ] + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "nullable": false, + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ] + }, + "MountVolume": { + "type": "object", + "properties": {}, + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + }, + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n" + } + }, + "AccessibilityRequirements": { + "type": "object", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n" + }, + "CapacityRange": { + "type": "object", + "properties": { + "RequiredBytes": { + "type": "integer", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n", + "format": "int64" + }, + "LimitBytes": { + "type": "integer", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n", + "format": "int64" + } + }, + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n" + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "nullable": false, + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "description": "Defines how the volume is used by tasks.\n" + } + }, + "description": "Cluster-specific options used to create the volume.\n" + }, + "Topology": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n" + } + } + } +} \ No newline at end of file diff --git a/app/vendor/beluga-php/docker-php-api/spec/v1.43.json b/app/vendor/beluga-php/docker-php-api/spec/v1.43.json new file mode 100644 index 000000000..6207d5cc4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/spec/v1.43.json @@ -0,0 +1,16645 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Docker Engine API", + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.43) is used.\nFor example, calling `/info` is the same as calling `/v1.43/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"email\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n", + "version": "1.43", + "x-logo": { + "url": "https://docs.docker.com/assets/images/logo-docker-main.png" + } + }, + "servers": [ + { + "url": "/v1.43" + } + ], + "tags": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "x-displayName": "Networks" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "x-displayName": "Volumes" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "x-displayName": "Exec" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "x-displayName": "Swarm" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "x-displayName": "Nodes" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Services" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Tasks" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Secrets" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "example": [ + { + "Id": "8dfafdbc3a40", + "Names": [ + "/boring_feynman" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 1", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + }, + { + "Id": "9cd87474be90", + "Names": [ + "/coolName" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 222222", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:08" + } + } + }, + "Mounts": [] + }, + { + "Id": "3176a2479c92", + "Names": [ + "/sleepy_dog" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:06" + } + } + }, + "Mounts": [] + }, + { + "Id": "4cb07b47f9fb", + "Names": [ + "/running_cat" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:05" + } + } + }, + "Mounts": [] + } + ] + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/create": { + "post": { + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$", + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Container to create", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/containers/{id}/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerInspectResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the container" + }, + "Created": { + "type": "string", + "description": "The time the container was created" + }, + "Path": { + "type": "string", + "description": "The path to the command being run" + }, + "Args": { + "type": "array", + "description": "The arguments to the command being run", + "items": { + "type": "string" + } + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "type": "string", + "description": "The container's image ID" + }, + "ResolvConfPath": { + "type": "string" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "Driver": { + "type": "string" + }, + "Platform": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "AppArmorProfile": { + "type": "string" + }, + "ExecIDs": { + "type": "array", + "description": "IDs of exec instances that are running in the container.", + "nullable": true, + "items": { + "type": "string" + } + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this\ncontainer.\n", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container.", + "format": "int64" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "example": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "exit 0" + ] + }, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "StopSignal": "SIGTERM", + "StopTimeout": 10 + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "ExecIDs": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "HostConfig": { + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuPercent": 80, + "CpuShares": 0, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "Devices": [], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "IpcMode": "", + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "OomKillDisable": false, + "OomScoreAdj": 500, + "NetworkMode": "bridge", + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Type": "json-file" + }, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "SandboxKey": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "MacAddress": "", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2019-12-22T10:59:05.6385933Z", + "End": "2019-12-22T10:59:05.8078452Z", + "ExitCode": 0, + "Output": "" + } + ] + }, + "OOMKilled": false, + "Dead": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ], + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + }, + "text/plain": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "operationId": "ContainerChanges", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "example": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "tags": [ + "Container" + ], + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache`\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "example": { + "read": "2015-01-08T22:57:31.547920715Z", + "pids_stats": { + "current": 3 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "memory_stats": { + "stats": { + "total_pgmajfault": 0, + "cache": 0, + "mapped_file": 0, + "total_inactive_file": 0, + "pgpgout": 414, + "rss": 6537216, + "total_mapped_file": 0, + "writeback": 0, + "unevictable": 0, + "pgpgin": 477, + "total_unevictable": 0, + "pgmajfault": 0, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_writeback": 0, + "total_inactive_anon": 0, + "rss_huge": 6291456, + "hierarchical_memory_limit": 67108864, + "total_pgfault": 964, + "total_active_file": 0, + "active_anon": 6537216, + "total_active_anon": 6537216, + "total_pgpgout": 414, + "total_cache": 0, + "inactive_anon": 0, + "active_file": 0, + "pgfault": 964, + "inactive_file": 0, + "total_pgpgin": 477 + }, + "max_usage": 6651904, + "usage": 6537216, + "failcnt": 0, + "limit": 67108864 + }, + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100215355, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 739306590000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100093996, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 9492140000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already started", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already stopped", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "tags": [ + "Container" + ], + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/update": { + "post": { + "tags": [ + "Container" + ], + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "title": "ContainerUpdateResponse", + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerUpdate operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "update" + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "New name for the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\nand the stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach/ws": { + "get": { + "tags": [ + "Container" + ], + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "default": "not-running", + "enum": [ + "not-running", + "next-exit", + "removed" + ] + } + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.\n`path` parameter is asserted to be a directory. If it exists as a file, 400 error\nwill be returned with message \"not a directory\".\n", + "operationId": "PutContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The content was extracted successfully", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "not a directory" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + }, + "head": { + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + }, + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/prune": { + "post": { + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ContainerPruneResponse", + "type": "object", + "properties": { + "ContainersDeleted": { + "type": "array", + "description": "Container IDs that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/build": { + "post": { + "tags": [ + "Image" + ], + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "default": "application/x-tar", + "enum": [ + "application/x-tar" + ] + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + } + }, + "/build/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "keep-storage", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "BuildPruneResponse", + "type": "object", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "type": "string", + "description": "ID of build cache object" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/create": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create an image", + "description": "Create an image by either pulling it from a registry or importing it.", + "operationId": "ImageCreate", + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputImage" + } + }, + "/images/{name}/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "HistoryResponseItem", + "required": [ + "Comment", + "Created", + "CreatedBy", + "Id", + "Size", + "Tags" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + }, + "description": "individual image layer information in response to ImageHistory operation", + "x-go-name": "HistoryResponseItem" + } + }, + "example": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "tags": [ + "Image" + ], + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The tag to associate with the image on the registry.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "tags": [ + "Image" + ], + "summary": "Tag an image", + "description": "Tag an image so that it becomes part of a repository.", + "operationId": "ImageTag", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}": { + "delete": { + "tags": [ + "Image" + ], + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "example": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/search": { + "get": { + "tags": [ + "Image" + ], + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-automated=(true|false)`\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ImageSearchResponseItem", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "example": [ + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ImagePruneResponse", + "type": "object", + "properties": { + "ImagesDeleted": { + "type": "array", + "description": "Images that were deleted", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/auth": { + "post": { + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "requestBody": { + "description": "Authentication to check", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the authentication", + "nullable": false + }, + "IdentityToken": { + "type": "string", + "description": "An opaque token used to authenticate a user after a successful login", + "nullable": false + } + } + }, + "example": { + "Status": "Login Succeeded", + "IdentityToken": "9cbaf023786cd7..." + } + } + } + }, + "204": { + "description": "No error", + "content": {} + }, + "401": { + "description": "Auth error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "authConfig" + } + }, + "/info": { + "get": { + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/version": { + "get": { + "tags": [ + "System" + ], + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/_ping": { + "get": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder\n\nThe default on Linux is version \"2\" (BuildKit), but the daemon\ncan be configured to recommend version \"1\" (classic Builder).\nWindows does not yet support BuildKit for native Windows images,\nand uses \"1\" (classic builder) as a default.\n\nThis value is a recommendation as advertised by the daemon, and\nit is up to the client to choose which builder to use.\n", + "schema": { + "type": "string", + "default": "2" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "head": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/commit": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The container configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "containerConfig" + } + }, + "/events": { + "get": { + "tags": [ + "System" + ], + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/system/df": { + "get": { + "tags": [ + "System" + ], + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + }, + "text/plain": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "VirtualSize": 1092588, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/load": { + "post": { + "tags": [ + "Image" + ], + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "description": "Tar archive containing images", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "imagesTarball" + } + }, + "/containers/{id}/exec": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Exec configuration", + "content": { + "application/json": { + "schema": { + "title": "ExecConfig", + "type": "object", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execConfig" + } + }, + "/exec/{id}/start": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ExecStartConfig", + "type": "object", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + } + }, + "example": { + "Detach": false, + "Tty": true, + "ConsoleSize": [ + 80, + 64 + ] + } + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execStartConfig" + } + }, + "/exec/{id}/resize": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ExecInspectResponse", + "type": "object", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "example": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes": { + "get": { + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/create": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "requestBody": { + "description": "Volume configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateOptions" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "volumeConfig" + } + }, + "/volumes/{name}": { + "get": { + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Volume" + ], + "summary": "\"Update a volume. Valid only for Swarm cluster volumes\"\n", + "operationId": "VolumeUpdate", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + }, + "delete": { + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "The volume was removed", + "content": {} + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/prune": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "VolumePruneResponse", + "type": "object", + "properties": { + "VolumesDeleted": { + "type": "array", + "description": "Volumes that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks": { + "get": { + "tags": [ + "Network" + ], + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Network" + } + }, + "example": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/{id}": { + "get": { + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/create": { + "post": { + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "requestBody": { + "description": "Network configuration", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The network's name." + }, + "CheckDuplicate": { + "type": "boolean", + "description": "Check for networks with duplicate names. Since Network is\nprimarily keyed based on a random ID and not on the name, and\nnetwork name is strictly a user-friendly alias to the network\nwhich is uniquely identified using ID, there is no guaranteed\nway to check for duplicates. CheckDuplicate is there to provide\na best effort checking of any networks which has the same name\nbut it is not guaranteed to catch all name collisions.\n" + }, + "Driver": { + "type": "string", + "description": "Name of the network driver plugin to use.", + "default": "bridge" + }, + "Internal": { + "type": "boolean", + "description": "Restrict external access to the network." + }, + "Attachable": { + "type": "boolean", + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n" + }, + "Ingress": { + "type": "boolean", + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "EnableIPv6": { + "type": "boolean", + "description": "Enable IPv6 on the network." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Network specific options to be used by the drivers." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "isolated_nw", + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.20.0.0/16", + "IPRange": "172.20.10.0/24", + "Gateway": "172.20.10.11" + }, + { + "Subnet": "2001:db8:abcd::/64", + "Gateway": "2001:db8:abcd::1011" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": true, + "Attachable": false, + "Ingress": false, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created network." + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + } + } + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "networkConfig" + } + }, + "/networks/{id}/connect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "operationId": "NetworkConnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkConnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network." + }, + "EndpointConfig": { + "$ref": "#/components/schemas/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/{id}/disconnect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkDisconnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.\n" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.\n" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/prune": { + "post": { + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkPruneResponse", + "type": "object", + "properties": { + "NetworksDeleted": { + "type": "array", + "description": "Networks that were deleted", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "description": "Returns information about installed plugins.", + "operationId": "PluginList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/privileges": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/pull": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "operationId": "PluginPull", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/{name}/json": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/create": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Path to tar containing plugin rootfs and manifest", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "tarContext" + } + }, + "/plugins/{name}/push": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "description": "Push a plugin to the registry.\n", + "operationId": "PluginPush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + "DEBUG=1" + ], + "items": { + "type": "string" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/nodes": { + "get": { + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/init": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "name": "force", + "in": "query", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/unlockkey": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/unlock": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmUnlockRequest", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/create": { + "post": { + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ] + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ServiceCreateResponse", + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the created service." + }, + "Warning": { + "type": "string", + "description": "Optional warning message" + } + }, + "example": { + "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "default": "spec", + "enum": [ + "spec", + "previous-spec" + ] + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ] + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}/logs": { + "get": { + "tags": [ + "Service" + ], + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the service", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such service: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks": { + "get": { + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ], + "items": { + "$ref": "#/components/schemas/Task" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "tags": [ + "Task" + ], + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such task: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets": { + "get": { + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ], + "items": { + "$ref": "#/components/schemas/Secret" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/create": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/secrets/{id}": { + "get": { + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs": { + "get": { + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ], + "items": { + "$ref": "#/components/schemas/Config" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/create": { + "post": { + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs/{id}": { + "get": { + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/distribution/{name}/json": { + "get": { + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/session": { + "post": { + "tags": [ + "Session" + ], + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Port": { + "required": [ + "PrivatePort", + "Type" + ], + "type": "object", + "properties": { + "IP": { + "type": "string", + "description": "Host IP address that the container's port is mapped to", + "format": "ip-address" + }, + "PrivatePort": { + "type": "integer", + "description": "Port on the container", + "format": "uint16", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "description": "Port exposed on the host", + "format": "uint16" + }, + "Type": { + "type": "string", + "nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "description": "An open port on a container", + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountPoint": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `volume` a docker volume with the given `Name`.\n- `tmpfs` a `tmpfs`.\n- `npipe` a named pipe from the host into the container.\n- `cluster` a Swarm cluster volume\n", + "example": "volume", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "Name": { + "type": "string", + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "example": "myvolume" + }, + "Source": { + "type": "string", + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "type": "string", + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "type": "string", + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "example": "local" + }, + "Mode": { + "type": "string", + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "example": "z" + }, + "RW": { + "type": "boolean", + "description": "Whether the mount is mounted writable (read-write).\n", + "example": true + }, + "Propagation": { + "type": "string", + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "example": "" + } + }, + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n" + }, + "DeviceMapping": { + "type": "object", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "description": "A device mapping between the host and container", + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "items": { + "type": "string" + } + }, + "Capabilities": { + "type": "array", + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n", + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n" + } + }, + "description": "A request for devices to be sent to device drivers" + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Device path" + }, + "Rate": { + "minimum": 0, + "type": "integer", + "description": "Rate", + "format": "int64" + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "Container path." + }, + "Source": { + "type": "string", + "description": "Mount source (e.g. a volume name, a host path)." + }, + "Type": { + "type": "string", + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "ReadOnly": { + "type": "boolean", + "description": "Whether the mount should be read-only." + }, + "Consistency": { + "type": "string", + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + }, + "BindOptions": { + "type": "object", + "properties": { + "Propagation": { + "type": "string", + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "type": "boolean", + "description": "Disable recursive bind mount.", + "default": false + }, + "CreateMountpoint": { + "type": "boolean", + "description": "Create mount point on host if missing", + "default": false + } + }, + "description": "Optional configuration for the `bind` type." + }, + "VolumeOptions": { + "type": "object", + "properties": { + "NoCopy": { + "type": "boolean", + "description": "Populate volume with data from the target.", + "default": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "DriverConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver to use to create the volume." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "key/value map of driver specific options." + } + }, + "description": "Map of driver specific options" + } + }, + "description": "Optional configuration for the `volume` type." + }, + "TmpfsOptions": { + "type": "object", + "properties": { + "SizeBytes": { + "type": "integer", + "description": "The size for the tmpfs mount in bytes.", + "format": "int64" + }, + "Mode": { + "type": "integer", + "description": "The permission mode for the tmpfs mount in an integer." + } + }, + "description": "Optional configuration for the `tmpfs` type." + } + } + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + }, + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n" + }, + "Resources": { + "type": "object", + "properties": { + "CpuShares": { + "type": "integer", + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n" + }, + "Memory": { + "type": "integer", + "description": "Memory limit in bytes.", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "type": "string", + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n" + }, + "BlkioWeight": { + "maximum": 1000, + "minimum": 0, + "type": "integer", + "description": "Block IO weight (relative weight)." + }, + "BlkioWeightDevice": { + "type": "array", + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "minimum": 0, + "type": "integer" + } + } + } + }, + "BlkioDeviceReadBps": { + "type": "array", + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "type": "array", + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "type": "array", + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "type": "array", + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "format": "int64" + }, + "CpuQuota": { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "format": "int64" + }, + "CpuRealtimePeriod": { + "type": "integer", + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "type": "integer", + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpusetCpus": { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "example": "0-3" + }, + "CpusetMems": { + "type": "string", + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n" + }, + "Devices": { + "type": "array", + "description": "A list of devices to add to the container.", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "type": "array", + "description": "a list of cgroup rules to apply to the container", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "type": "array", + "description": "A list of requests for devices to be sent to device drivers.\n", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "KernelMemoryTCP": { + "type": "integer", + "description": "Hard limit for kernel TCP buffer memory (in bytes). Depending on the\nOCI runtime in use, this option may be ignored. It is no longer supported\nby the default (runc) runtime.\n\nThis field is omitted when empty.\n", + "format": "int64" + }, + "MemoryReservation": { + "type": "integer", + "description": "Memory soft limit in bytes.", + "format": "int64" + }, + "MemorySwap": { + "type": "integer", + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "format": "int64" + }, + "MemorySwappiness": { + "maximum": 100, + "minimum": 0, + "type": "integer", + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "format": "int64" + }, + "NanoCpus": { + "type": "integer", + "description": "CPU quota in units of 10-9 CPUs.", + "format": "int64" + }, + "OomKillDisable": { + "type": "boolean", + "description": "Disable OOM Killer for the container." + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "PidsLimit": { + "type": "integer", + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + }, + "CpuCount": { + "type": "integer", + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "CpuPercent": { + "type": "integer", + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "IOMaximumIOps": { + "type": "integer", + "description": "Maximum IOps for the container system drive (Windows only)", + "format": "int64" + }, + "IOMaximumBandwidth": { + "type": "integer", + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "format": "int64" + } + }, + "description": "A container's resources (cgroups config, ulimits, etc)" + }, + "Limit": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "type": "integer", + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "format": "int64", + "example": 100, + "default": 0 + } + }, + "description": "An object describing a limit on resources which can be requested by a task.\n" + }, + "ResourceObject": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + }, + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n" + }, + "GenericResources": { + "type": "array", + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "HealthConfig": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Timeout": { + "type": "integer", + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Retries": { + "type": "integer", + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n" + }, + "StartPeriod": { + "type": "integer", + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + } + }, + "description": "A test to perform to check that the container is healthy." + }, + "Health": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "example": "healthy", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ] + }, + "FailingStreak": { + "type": "integer", + "description": "FailingStreak is the number of consecutive failures", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "description": "Health stores information about the container's healthcheck results.\n", + "nullable": true, + "x-nullable": true + }, + "HealthcheckResult": { + "type": "object", + "properties": { + "Start": { + "type": "string", + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "type": "string", + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "type": "integer", + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "example": 0 + }, + "Output": { + "type": "string", + "description": "Output from last check" + } + }, + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "nullable": true, + "x-nullable": true + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written" + }, + "LogConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "The logging configuration for this container" + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to the container.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "Annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n" + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n", + "enum": [ + "private", + "host" + ] + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n" + }, + "Tmpfs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n" + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "minimum": 0, + "type": "integer", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "format": "int64" + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A list of kernel parameters (sysctls) to set in the container.\nFor example:\n\n```\n{\"net.ipv4.ip_forward\": \"1\"}\n```\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + } + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + } + } + } + } + ] + }, + "ContainerConfig": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "example": "439f4e91bd1d" + }, + "Domainname": { + "type": "string", + "description": "The domain name to use for the container.\n" + }, + "User": { + "type": "string", + "description": "The user that commands are run as inside the container." + }, + "AttachStdin": { + "type": "boolean", + "description": "Whether to attach to `stdin`.", + "default": false + }, + "AttachStdout": { + "type": "boolean", + "description": "Whether to attach to `stdout`.", + "default": true + }, + "AttachStderr": { + "type": "boolean", + "description": "Whether to attach to `stderr`.", + "default": true + }, + "ExposedPorts": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "nullable": true, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "type": "boolean", + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "default": false + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`", + "default": false + }, + "StdinOnce": { + "type": "boolean", + "description": "Close `stdin` after one attached client disconnects", + "default": false + }, + "Env": { + "type": "array", + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run specified as a string or an array of strings.\n", + "example": [ + "/bin/sh" + ], + "items": { + "type": "string" + } + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "type": "boolean", + "description": "Command is already escaped (Windows only)", + "nullable": true, + "example": false, + "default": false + }, + "Image": { + "type": "string", + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "example": "example-image:1.0" + }, + "Volumes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for commands to run in.", + "example": "/public/" + }, + "Entrypoint": { + "type": "array", + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "example": [], + "items": { + "type": "string" + } + }, + "NetworkDisabled": { + "type": "boolean", + "description": "Disable networking for the container.", + "nullable": true + }, + "MacAddress": { + "type": "string", + "description": "MAC address of the container.", + "nullable": true + }, + "OnBuild": { + "type": "array", + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "nullable": true, + "example": [], + "items": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop a container as a string or unsigned integer.\n", + "nullable": true, + "example": "SIGTERM" + }, + "StopTimeout": { + "type": "integer", + "description": "Timeout to stop a container in seconds.", + "nullable": true + }, + "Shell": { + "type": "array", + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "nullable": true, + "example": [ + "/bin/sh", + "-c" + ], + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a container that is portable between hosts.\n\nWhen used as `ContainerConfig` field in an image, `ContainerConfig` is an\noptional field containing the configuration of the container that was last\ncommitted when creating the image.\n\nPrevious versions of Docker builder used this field to store build cache,\nand it is not in active use anymore.\n" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network.\n" + } + }, + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + } + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Bridge": { + "type": "string", + "description": "Name of the network's bridge (for example, `docker0`).", + "example": "docker0" + }, + "SandboxID": { + "type": "string", + "description": "SandboxID uniquely represents a container's network stack.", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "HairpinMode": { + "type": "boolean", + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n", + "example": false + }, + "LinkLocalIPv6Address": { + "type": "string", + "description": "IPv6 unicast address using the link-local prefix.", + "example": "fe80::42:acff:fe11:1" + }, + "LinkLocalIPv6PrefixLen": { + "type": "integer", + "description": "Prefix length of the IPv6 unicast address.", + "example": 64 + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "SandboxKey": { + "type": "string", + "description": "SandboxKey identifies the sandbox", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "SecondaryIPv6Addresses": { + "type": "array", + "description": "", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "EndpointID": { + "type": "string", + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 64 + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address for this network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8:2::100" + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the container on the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "Information about all networks that the container is connected to.\n" + } + }, + "description": "NetworkSettings exposes the network settings in the API" + }, + "Address": { + "type": "object", + "properties": { + "Addr": { + "type": "string", + "description": "IP address." + }, + "PrefixLen": { + "type": "integer", + "description": "Mask length of the IP address." + } + }, + "description": "Address represents an IPv4 or IPv6 IP address." + }, + "PortMap": { + "type": "object", + "additionalProperties": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ] + } + }, + "PortBinding": { + "type": "object", + "properties": { + "HostIp": { + "type": "string", + "description": "Host IP address that the container's port is mapped to.", + "example": "127.0.0.1" + }, + "HostPort": { + "type": "string", + "description": "Host port number that the container's port is mapped to.", + "example": "4443" + } + }, + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n" + }, + "GraphDriverData": { + "required": [ + "Data", + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the storage driver.", + "nullable": false, + "example": "overlay2" + }, + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "nullable": false, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + }, + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n" + }, + "FilesystemChange": { + "required": [ + "Kind", + "Path" + ], + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Path to file or directory that has changed.\n", + "nullable": false + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + }, + "description": "Change in the container's filesystem.\n" + }, + "ChangeType": { + "type": "integer", + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "format": "uint8", + "nullable": false, + "enum": [ + 0, + 1, + 2 + ], + "x-nullable": false + }, + "ImageInspect": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Parent": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "Comment": { + "type": "string", + "description": "Optional message that was set when committing or importing the image.\n", + "nullable": false, + "example": "" + }, + "Created": { + "type": "string", + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "nullable": false, + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Container": { + "type": "string", + "description": "The ID of the container that was used to create the image.\n\nDepending on how the image was created, this field may be empty.\n", + "nullable": false, + "example": "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735" + }, + "ContainerConfig": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "DockerVersion": { + "type": "string", + "description": "The version of Docker that was used to build the image.\n\nDepending on how the image was created, this field may be empty.\n", + "nullable": false, + "example": "20.10.7" + }, + "Author": { + "type": "string", + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "nullable": false, + "example": "" + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "Architecture": { + "type": "string", + "description": "Hardware CPU architecture that the image runs on.\n", + "nullable": false, + "example": "arm" + }, + "Variant": { + "type": "string", + "description": "CPU architecture variant (presently ARM-only).\n", + "nullable": true, + "example": "v7" + }, + "Os": { + "type": "string", + "description": "Operating System the image is built to run on.\n", + "nullable": false, + "example": "linux" + }, + "OsVersion": { + "type": "string", + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "nullable": true, + "example": "" + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nIn versions of Docker before v1.10, this field was calculated from\nthe image itself and all of its parent images. Images are now stored\nself-contained, and no longer use a parent-chain, making this field\nan equivalent of the Size field.\n\n> **Deprecated**: this field is kept for backward compatibility, but\n> will be removed in API v1.44.\n", + "format": "int64", + "example": 1239828 + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "RootFS": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "layers" + }, + "Layers": { + "type": "array", + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ], + "items": { + "type": "string" + } + } + }, + "description": "Information about the image's RootFS, including the layer IDs.\n" + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "format": "dateTime", + "nullable": true, + "example": "2022-02-28T14:40:02.623929178Z" + } + }, + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n" + } + }, + "description": "Information about an image in the local image cache.\n" + }, + "ImageSummary": { + "required": [ + "Containers", + "Created", + "Id", + "Labels", + "ParentId", + "RepoDigests", + "RepoTags", + "SharedSize", + "Size" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "nullable": false, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "nullable": false, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Created": { + "type": "integer", + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds sinds EPOCH).\n", + "nullable": false, + "example": 1644009612 + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 172064416 + }, + "SharedSize": { + "type": "integer", + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nIn versions of Docker before v1.10, this field was calculated from\nthe image itself and all of its parent images. Images are now stored\nself-contained, and no longer use a parent-chain, making this field\nan equivalent of the Size field.\n\nDeprecated: this field is kept for backward compatibility, and will be removed in API v1.44.", + "format": "int64", + "example": 172064416 + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "type": "integer", + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\nThis size is not calculated by default, and depends on which API endpoint\nis used. `-1` indicates that the value has not been set / calculated.\n", + "nullable": false, + "example": 2 + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "email": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "required": [ + "Driver", + "Labels", + "Mountpoint", + "Name", + "Options", + "Scope" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "nullable": false, + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "nullable": false, + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "description": "Date/Time the volume was created.", + "format": "dateTime", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "nullable": false, + "example": "local", + "default": "local", + "enum": [ + "local", + "global" + ] + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The driver specific options used when creating the volume.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "required": [ + "RefCount", + "Size" + ], + "type": "object", + "properties": { + "Size": { + "type": "integer", + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "format": "int64", + "nullable": false, + "default": -1 + }, + "RefCount": { + "type": "integer", + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "format": "int64", + "nullable": false, + "default": -1 + } + }, + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "nullable": true, + "x-go-name": "UsageData" + } + } + }, + "VolumeCreateOptions": { + "title": "VolumeConfig", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver to use.", + "nullable": false, + "example": "custom", + "default": "local" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration", + "x-go-name": "CreateOptions" + }, + "VolumeListResponse": { + "title": "VolumeListResponse", + "type": "object", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "Volume list response", + "x-go-name": "ListResponse" + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Scope": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "Internal": { + "type": "boolean" + }, + "Attachable": { + "type": "boolean" + }, + "Ingress": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/NetworkContainer" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Name": "net01", + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Created": "2016-10-19T04:33:30.360899459Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.19.0.0/16", + "Gateway": "172.19.0.1" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": false, + "Attachable": false, + "Ingress": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "IPAM": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "description": "Name of the IPAM driver to use.", + "default": "default" + }, + "Config": { + "type": "array", + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a map." + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string" + }, + "IPRange": { + "type": "string" + }, + "Gateway": { + "type": "string" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EndpointID": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parent": { + "type": "string", + "description": "ID of the parent build cache record.\n\n> **Deprecated**: This field is deprecated, and omitted if empty.\n", + "nullable": true, + "example": "" + }, + "Parents": { + "type": "array", + "description": "List of parent build cache record IDs.\n", + "nullable": true, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ], + "items": { + "type": "string" + } + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "type": "integer", + "description": "Amount of disk space used by the build cache (in bytes).\n", + "example": 51 + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "type": "string", + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + }, + "description": "BuildCache contains information about a build cache record.\n" + }, + "ImageID": { + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "description": "Image ID or Digest", + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The error message.", + "nullable": false + } + }, + "description": "Represents an error.", + "example": { + "message": "Something went wrong." + } + }, + "IdResponse": { + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The id of the newly created object.", + "nullable": false + } + }, + "description": "Response to an API call that returns just an Id" + }, + "EndpointSettings": { + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "example": [ + "container_1", + "container_2" + ], + "items": { + "type": "string" + } + }, + "Aliases": { + "type": "array", + "example": [ + "server_x", + "server_y" + ], + "items": { + "type": "string" + } + }, + "NetworkID": { + "type": "string", + "description": "Unique ID of the network.\n", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "type": "string", + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for this network.\n", + "example": "172.17.0.1" + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address.\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address.\n", + "example": "2001:db8:2::100" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address.\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n", + "format": "int64", + "example": 64 + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the endpoint on this network.\n", + "example": "02:42:ac:11:00:04" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "description": "Configuration for a network endpoint." + }, + "EndpointIPAMConfig": { + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "example": [ + "169.254.34.68", + "fe80::3468" + ], + "items": { + "type": "string" + } + } + }, + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "nullable": true, + "x-nullable": true + }, + "PluginMount": { + "required": [ + "Description", + "Destination", + "Name", + "Options", + "Settable", + "Source", + "Type" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "example": [ + "rbind", + "rw" + ], + "items": { + "type": "string" + } + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginDevice": { + "required": [ + "Description", + "Name", + "Path", + "Settable" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginEnv": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginInterfaceType": { + "required": [ + "Capability", + "Prefix", + "Version" + ], + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "nullable": false + }, + "Capability": { + "type": "string", + "nullable": false + }, + "Version": { + "type": "string", + "nullable": false + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginPrivilege": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "example": [ + "host" + ], + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "x-go-name": "PluginPrivilege" + }, + "Plugin": { + "required": [ + "Config", + "Enabled", + "Name", + "Settings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "type": "boolean", + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "nullable": false, + "example": true + }, + "Settings": { + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "type": "object", + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + "DEBUG=0" + ], + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "description": "Settings that can be modified by users.", + "nullable": false + }, + "PluginReference": { + "type": "string", + "description": "plugin remote reference used to push/pull the plugin", + "nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "required": [ + "Args", + "Description", + "Documentation", + "Entrypoint", + "Env", + "Interface", + "IpcHost", + "Linux", + "Mounts", + "Network", + "PidHost", + "PropagatedMount", + "WorkDir" + ], + "type": "object", + "properties": { + "DockerVersion": { + "type": "string", + "description": "Docker Version used to create the plugin", + "nullable": false, + "example": "17.06.0-ce" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "required": [ + "Socket", + "Types" + ], + "type": "object", + "properties": { + "Types": { + "type": "array", + "example": [ + "docker.volumedriver/1.0" + ], + "items": { + "$ref": "#/components/schemas/PluginInterfaceType" + } + }, + "Socket": { + "type": "string", + "nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "description": "Protocol to use for clients connecting to the plugin.", + "example": "some.protocol/v1.0", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "description": "The interface between Docker and the plugin", + "nullable": false + }, + "Entrypoint": { + "type": "array", + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ], + "items": { + "type": "string" + } + }, + "WorkDir": { + "type": "string", + "nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "host" + } + }, + "nullable": false + }, + "Linux": { + "required": [ + "AllowAllDevices", + "Capabilities", + "Devices" + ], + "type": "object", + "properties": { + "Capabilities": { + "type": "array", + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "AllowAllDevices": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Value": "0" + } + ], + "items": { + "$ref": "#/components/schemas/PluginEnv" + } + }, + "Args": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "args" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ], + "items": { + "type": "string" + } + } + } + } + }, + "description": "The config of a plugin.", + "nullable": false + } + }, + "description": "A plugin for the Engine API" + }, + "ObjectVersion": { + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + }, + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n" + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name for the node.", + "example": "my-node" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Role": { + "type": "string", + "description": "Role of the node.", + "example": "manager", + "enum": [ + "worker", + "manager" + ] + }, + "Availability": { + "type": "string", + "description": "Availability of the node.", + "example": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + }, + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n" + }, + "Platform": { + "type": "object", + "properties": { + "Architecture": { + "type": "string", + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "example": "x86_64" + }, + "OS": { + "type": "string", + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "example": "linux" + } + }, + "description": "Platform represents the platform (Arch/OS).\n" + }, + "EngineDescription": { + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "logentries" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ], + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + } + }, + "description": "EngineDescription provides information about an engine." + }, + "TLSInfo": { + "type": "object", + "properties": { + "TrustRoot": { + "type": "string", + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n" + }, + "CertIssuerSubject": { + "type": "string", + "description": "The base64-url-safe-encoded raw subject bytes of the issuer." + }, + "CertIssuerPublicKey": { + "type": "string", + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n" + } + }, + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "type": "string", + "description": "IP address of the node.", + "example": "172.17.0.2" + } + }, + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n" + }, + "NodeState": { + "type": "string", + "description": "NodeState represents the state of a node.", + "example": "ready", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ] + }, + "ManagerStatus": { + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "example": true, + "default": false + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "type": "string", + "description": "The IP address and port at which the manager is reachable.\n", + "example": "10.0.0.46:2377" + } + }, + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "nullable": true, + "x-nullable": true + }, + "Reachability": { + "type": "string", + "description": "Reachability represents the reachability of a node.", + "example": "reachable", + "enum": [ + "unknown", + "unreachable", + "reachable" + ] + }, + "SwarmSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the swarm.", + "example": "default" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "type": "integer", + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "format": "int64", + "example": 10 + } + }, + "description": "Orchestration configuration.", + "nullable": true + }, + "Raft": { + "type": "object", + "properties": { + "SnapshotInterval": { + "type": "integer", + "description": "The number of log entries between snapshots.", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "type": "integer", + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "type": "integer", + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "type": "integer", + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 3 + }, + "HeartbeatTick": { + "type": "integer", + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 1 + } + }, + "description": "Raft configuration." + }, + "Dispatcher": { + "type": "object", + "properties": { + "HeartbeatPeriod": { + "type": "integer", + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "format": "int64", + "example": 5000000000 + } + }, + "description": "Dispatcher configuration.", + "nullable": true + }, + "CAConfig": { + "type": "object", + "properties": { + "NodeCertExpiry": { + "type": "integer", + "description": "The duration node certificates are issued for.", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "type": "array", + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "type": "string", + "description": "URL where certificate signing requests should be sent.\n" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n" + }, + "CACert": { + "type": "string", + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n" + } + } + } + }, + "SigningCACert": { + "type": "string", + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n" + }, + "SigningCAKey": { + "type": "string", + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n" + }, + "ForceRotate": { + "type": "integer", + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64" + } + }, + "description": "CA configuration.", + "nullable": true + }, + "EncryptionConfig": { + "type": "object", + "properties": { + "AutoLockManagers": { + "type": "boolean", + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "example": false + } + }, + "description": "Parameters related to encryption-at-rest." + }, + "TaskDefaults": { + "type": "object", + "properties": { + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The log driver to use as a default for new tasks.\n", + "example": "json-file" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "example": { + "max-file": "10", + "max-size": "100m" + } + } + }, + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n" + } + }, + "description": "Defaults for creating tasks in this cluster." + } + }, + "description": "User modifiable swarm configuration." + }, + "ClusterInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the swarm.", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "type": "boolean", + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "example": false + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "format": "uint32", + "example": 4789 + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "items": { + "type": "string", + "format": "CIDR", + "example": "" + } + }, + "SubnetSize": { + "maximum": 29, + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "format": "uint32", + "example": 24 + } + }, + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "nullable": true, + "x-nullable": true + }, + "JoinTokens": { + "type": "object", + "properties": { + "Worker": { + "type": "string", + "description": "The token workers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "type": "string", + "description": "The token managers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + }, + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n" + }, + "Swarm": { + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name or 'alias' to use for the plugin." + }, + "Remote": { + "type": "string", + "description": "The plugin image reference to use." + }, + "Disabled": { + "type": "boolean", + "description": "Disable the plugin once scheduled." + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "ContainerSpec": { + "type": "object", + "properties": { + "Image": { + "type": "string", + "description": "The image name to use for the container" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value data." + }, + "Command": { + "type": "array", + "description": "The command to be run in the image.", + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "description": "Arguments to the command.", + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n" + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `VAR=value`.\n", + "items": { + "type": "string" + } + }, + "Dir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "User": { + "type": "string", + "description": "The user inside the container." + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "properties": { + "CredentialSpec": { + "type": "object", + "properties": { + "Config": { + "type": "string", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "0bt9dmxjvjiqermk6xrop3ekq" + }, + "File": { + "type": "string", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "spec.json" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + }, + "description": "CredentialSpec for managed service account (Windows only)" + }, + "SELinuxContext": { + "type": "object", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + }, + "description": "SELinux labels of the container" + } + }, + "description": "Security options for the container" + }, + "TTY": { + "type": "boolean", + "description": "Whether a pseudo-TTY should be allocated." + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`" + }, + "ReadOnly": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop the container." + }, + "StopGracePeriod": { + "type": "integer", + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "format": "int64" + }, + "HealthCheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "type": "object", + "properties": { + "Nameservers": { + "type": "array", + "description": "The IP addresses of the name servers.", + "items": { + "type": "string" + } + }, + "Search": { + "type": "array", + "description": "A search list for host-name lookup.", + "items": { + "type": "string" + } + }, + "Options": { + "type": "array", + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "items": { + "type": "string" + } + } + }, + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n" + }, + "Secrets": { + "type": "array", + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n" + }, + "SecretID": { + "type": "string", + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n" + }, + "SecretName": { + "type": "string", + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n" + } + } + } + }, + "Configs": { + "type": "array", + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n" + }, + "Runtime": { + "type": "object", + "properties": {}, + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n" + }, + "ConfigID": { + "type": "string", + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n" + }, + "ConfigName": { + "type": "string", + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n" + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW" + ], + "items": { + "type": "string" + } + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + } + }, + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "NetworkAttachmentSpec": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string", + "description": "ID of the container represented by this task" + } + }, + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "Resources": { + "type": "object", + "properties": { + "Limits": { + "$ref": "#/components/schemas/Limit" + }, + "Reservations": { + "$ref": "#/components/schemas/ResourceObject" + } + }, + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n" + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Condition": { + "type": "string", + "description": "Condition for restart.", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "type": "integer", + "description": "Delay between restart attempts.", + "format": "int64" + }, + "MaxAttempts": { + "type": "integer", + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "format": "int64", + "default": 0 + }, + "Window": { + "type": "integer", + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "format": "int64", + "default": 0 + } + }, + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n" + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ], + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ], + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string", + "description": "label descriptor, such as `engine.labels.az`.\n" + } + } + } + } + } + }, + "MaxReplicas": { + "type": "integer", + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "format": "int64", + "default": 0 + }, + "Platforms": { + "type": "array", + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "type": "integer", + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime is the type of runtime specified for the task executor.\n" + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n" + } + }, + "description": "User modifiable task configuration." + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the task." + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "type": "string", + "description": "Name of the task." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "type": "string", + "description": "The ID of the service this task is part of." + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "type": "string", + "description": "The ID of the node that this task is on." + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "type": "object", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + } + } + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the service." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "integer", + "description": "The maximum number of replicas to run simultaneously.\n", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "type": "integer", + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "format": "int64" + } + }, + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n" + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "description": "The mode used for services which run a task to the completed state\non each valid node.\n" + } + }, + "description": "Scheduling mode for the service." + }, + "UpdateConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between updates, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the update strategy of the service." + }, + "RollbackConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the rollback strategy of the service." + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + }, + "description": "User modifiable configuration for a service." + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "type": "integer", + "description": "The port inside the container." + }, + "PublishedPort": { + "type": "integer", + "description": "The port on the swarm hosts." + }, + "PublishMode": { + "type": "string", + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "example": "ingress", + "default": "ingress", + "enum": [ + "ingress", + "host" + ] + } + } + }, + "EndpointSpec": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "type": "array", + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "Properties that can be configured to access and load balance a service." + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + }, + "description": "The status of a service update." + }, + "ServiceStatus": { + "type": "object", + "properties": { + "RunningTasks": { + "type": "integer", + "description": "The number of tasks for the service currently in the Running state.\n", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "type": "integer", + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "type": "integer", + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "format": "uint64" + } + }, + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n" + }, + "JobStatus": { + "type": "object", + "properties": { + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "LastExecution": { + "type": "string", + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "format": "dateTime" + } + }, + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n" + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Untagged": { + "type": "string", + "description": "The image ID of an image that was untagged" + }, + "Deleted": { + "type": "string", + "description": "The image ID of an image that was deleted" + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "description": "Optional warning messages", + "items": { + "type": "string" + } + } + }, + "example": { + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of this container", + "x-go-name": "ID" + }, + "Names": { + "type": "array", + "description": "The names that this container has been given", + "items": { + "type": "string" + } + }, + "Image": { + "type": "string", + "description": "The name of the image used when creating this container" + }, + "ImageID": { + "type": "string", + "description": "The ID of the image that this container was created from" + }, + "Command": { + "type": "string", + "description": "Command to run when starting the container" + }, + "Created": { + "type": "integer", + "description": "When the container was created", + "format": "int64" + }, + "Ports": { + "type": "array", + "description": "The ports exposed by this container", + "items": { + "$ref": "#/components/schemas/Port" + } + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container", + "format": "int64" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "State": { + "type": "string", + "description": "The state of this container (e.g. `Exited`)" + }, + "Status": { + "type": "string", + "description": "Additional human-readable status of this container (e.g. `Exit 0`)" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "description": "A summary of the container's network settings" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + } + } + }, + "Driver": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver.", + "nullable": false, + "example": "some-driver" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key/value map of driver-specific options.", + "nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + }, + "description": "Driver represents a driver (network, logging, secrets)." + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the secret." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "example": "" + }, + "Driver": { + "$ref": "#/components/schemas/Driver" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the config." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\nconfig data.\n" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "example": "running", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + }, + "Running": { + "type": "boolean", + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "example": true + }, + "Paused": { + "type": "boolean", + "description": "Whether this container is paused.", + "example": false + }, + "Restarting": { + "type": "boolean", + "description": "Whether this container is restarting.", + "example": false + }, + "OOMKilled": { + "type": "boolean", + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "type": "integer", + "description": "The process ID of this container", + "example": 1234 + }, + "ExitCode": { + "type": "integer", + "description": "The last exit code of this container", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "description": "The time when this container was last started.", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "type": "string", + "description": "The time when this container last exited.", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "nullable": true, + "x-nullable": true + }, + "ContainerCreateResponse": { + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created container", + "nullable": false, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "type": "array", + "description": "Warnings encountered when creating the container", + "nullable": false, + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerCreate operation", + "x-go-name": "CreateResponse" + }, + "ContainerWaitResponse": { + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "type": "object", + "properties": { + "StatusCode": { + "type": "integer", + "description": "Exit code of the container", + "format": "int64", + "nullable": false + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + }, + "description": "OK response to ContainerWait operation", + "x-go-name": "WaitResponse" + }, + "ContainerWaitExitError": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Details of an error" + } + }, + "description": "container waiting error, if any", + "x-go-name": "WaitExitError" + }, + "SystemVersion": { + "type": "object", + "properties": { + "Platform": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "required": [ + "Name", + "Version" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the component\n", + "example": "Engine" + }, + "Version": { + "type": "string", + "description": "Version of the component\n", + "nullable": false, + "example": "19.03.12" + }, + "Details": { + "type": "object", + "properties": {}, + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "nullable": true + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Version": { + "type": "string", + "description": "The version of the daemon", + "example": "19.03.12" + }, + "ApiVersion": { + "type": "string", + "description": "The default (and highest) API version that is supported by the daemon\n", + "example": "1.40" + }, + "MinAPIVersion": { + "type": "string", + "description": "The minimum API version that is supported by the daemon\n", + "example": "1.12" + }, + "GitCommit": { + "type": "string", + "description": "The Git commit of the source code that was used to build the daemon\n", + "example": "48a66213fe" + }, + "GoVersion": { + "type": "string", + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "example": "go1.13.14" + }, + "Os": { + "type": "string", + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "example": "linux" + }, + "Arch": { + "type": "string", + "description": "The architecture that the daemon is running on\n", + "example": "amd64" + }, + "KernelVersion": { + "type": "string", + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "example": "4.19.76-linuxkit" + }, + "Experimental": { + "type": "boolean", + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "example": true + }, + "BuildTime": { + "type": "string", + "description": "The date and time that the daemon was compiled.\n", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + }, + "description": "Response of Engine API: GET \"/version\"\n" + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "type": "integer", + "description": "Total number of containers on the host.", + "example": 14 + }, + "ContainersRunning": { + "type": "integer", + "description": "Number of containers with status `\"running\"`.\n", + "example": 3 + }, + "ContainersPaused": { + "type": "integer", + "description": "Number of containers with status `\"paused\"`.\n", + "example": 1 + }, + "ContainersStopped": { + "type": "integer", + "description": "Number of containers with status `\"stopped\"`.\n", + "example": 10 + }, + "Images": { + "type": "integer", + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "example": 508 + }, + "Driver": { + "type": "string", + "description": "Name of the storage driver in use.", + "example": "overlay2" + }, + "DriverStatus": { + "type": "array", + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "DockerRootDir": { + "type": "string", + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "type": "boolean", + "description": "Indicates if the host has memory limit support enabled.", + "example": true + }, + "SwapLimit": { + "type": "boolean", + "description": "Indicates if the host has memory swap limit support enabled.", + "example": true + }, + "KernelMemoryTCP": { + "type": "boolean", + "description": "Indicates if the host has kernel memory TCP limit support enabled. This\nfield is omitted if not supported.\n\nKernel memory TCP limits are not supported when using cgroups v2, which\ndoes not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup.\n", + "example": true + }, + "CpuCfsPeriod": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "example": true + }, + "CpuCfsQuota": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "example": true + }, + "CPUShares": { + "type": "boolean", + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "example": true + }, + "CPUSet": { + "type": "boolean", + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "example": true + }, + "PidsLimit": { + "type": "boolean", + "description": "Indicates if the host kernel has PID limit support enabled.", + "example": true + }, + "OomKillDisable": { + "type": "boolean", + "description": "Indicates if OOM killer disable is supported on the host." + }, + "IPv4Forwarding": { + "type": "boolean", + "description": "Indicates IPv4 forwarding is enabled.", + "example": true + }, + "BridgeNfIptables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "example": true + }, + "BridgeNfIp6tables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "example": true + }, + "Debug": { + "type": "boolean", + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "example": true + }, + "NFd": { + "type": "integer", + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 64 + }, + "NGoroutines": { + "type": "integer", + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 174 + }, + "SystemTime": { + "type": "string", + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "type": "string", + "description": "The logging driver to use as a default for new containers.\n" + }, + "CgroupDriver": { + "type": "string", + "description": "The driver to use for managing cgroups.\n", + "example": "cgroupfs", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd", + "none" + ] + }, + "CgroupVersion": { + "type": "string", + "description": "The version of the cgroup.\n", + "example": "1", + "default": "1", + "enum": [ + "1", + "2" + ] + }, + "NEventsListener": { + "type": "integer", + "description": "Number of event listeners subscribed.", + "example": 30 + }, + "KernelVersion": { + "type": "string", + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "example": "4.9.38-moby" + }, + "OperatingSystem": { + "type": "string", + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "example": "Alpine Linux v3.5" + }, + "OSVersion": { + "type": "string", + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "example": "16.04" + }, + "OSType": { + "type": "string", + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "linux" + }, + "Architecture": { + "type": "string", + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "example": "x86_64" + }, + "NCPU": { + "type": "integer", + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "example": 4 + }, + "MemTotal": { + "type": "integer", + "description": "Total amount of physical memory available on the host, in bytes.\n", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "type": "string", + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "example": "https://index.docker.io/v1/", + "default": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "type": "string", + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "type": "string", + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "type": "string", + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "*.local, 169.254/16" + }, + "Name": { + "type": "string", + "description": "Hostname of the host.", + "example": "node5.corp.example.com" + }, + "Labels": { + "type": "array", + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "example": [ + "storage=ssd", + "production" + ], + "items": { + "type": "string" + } + }, + "ExperimentalBuild": { + "type": "boolean", + "description": "Indicates if experimental features are enabled on the daemon.\n", + "example": true + }, + "ServerVersion": { + "type": "string", + "description": "Version string of the daemon.\n", + "example": "24.0.2" + }, + "Runtimes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "type": "string", + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "example": "runc", + "default": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "type": "boolean", + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "example": false, + "default": false + }, + "Isolation": { + "type": "string", + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "InitBinary": { + "type": "string", + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "type": "array", + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ], + "items": { + "type": "string" + } + }, + "ProductLicense": { + "type": "string", + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "type": "array", + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "items": { + "type": "object", + "properties": { + "Base": { + "type": "string", + "description": "The network address in CIDR format", + "example": "10.10.0.0/16" + }, + "Size": { + "type": "integer", + "description": "The network pool size", + "example": 24 + } + } + } + }, + "Warnings": { + "type": "array", + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "example": [ + "WARNING: No memory limit support", + "WARNING: bridge-nf-call-iptables is disabled", + "WARNING: bridge-nf-call-ip6tables is disabled" + ], + "items": { + "type": "string" + } + } + } + }, + "PluginsInfo": { + "type": "object", + "properties": { + "Volume": { + "type": "array", + "description": "Names of available volume-drivers, and network-driver plugins.", + "example": [ + "local" + ], + "items": { + "type": "string" + } + }, + "Network": { + "type": "array", + "description": "Names of available network-drivers, and network-driver plugins.", + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ], + "items": { + "type": "string" + } + }, + "Authorization": { + "type": "array", + "description": "Names of available authorization plugins.", + "example": [ + "img-authz-plugin", + "hbm" + ], + "items": { + "type": "string" + } + }, + "Log": { + "type": "array", + "description": "Names of available logging-drivers, and logging-driver plugins.", + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "logentries", + "splunk", + "syslog" + ], + "items": { + "type": "string" + } + } + }, + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n" + }, + "RegistryServiceConfig": { + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "type": "array", + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "AllowNondistributableArtifactsHostnames": { + "type": "array", + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `[:]` or `[:]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ], + "items": { + "type": "string" + } + }, + "InsecureRegistryCIDRs": { + "type": "array", + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "type": "array", + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ], + "items": { + "type": "string" + } + } + }, + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "nullable": true, + "x-nullable": true + }, + "IndexInfo": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the registry, such as \"docker.io\".\n", + "example": "docker.io" + }, + "Mirrors": { + "type": "array", + "description": "List of mirrors, expressed as URIs.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ], + "items": { + "type": "string" + } + }, + "Secure": { + "type": "boolean", + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "example": true + }, + "Official": { + "type": "boolean", + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "example": true + } + }, + "description": "IndexInfo contains information about a registry.", + "nullable": true, + "x-nullable": true + }, + "Runtime": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "type": "array", + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "items": { + "type": "string" + } + } + }, + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n" + }, + "Commit": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Actual commit ID of external tool.", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + }, + "Expected": { + "type": "string", + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + } + }, + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n" + }, + "SwarmInfo": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm.", + "example": "k67qz4598weg5unwwffg6z1m1", + "default": "" + }, + "NodeAddr": { + "type": "string", + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "example": "10.0.0.46", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "example": true, + "default": false + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "type": "array", + "description": "List of ID's and addresses of other managers in the swarm.\n", + "nullable": true, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "items": { + "$ref": "#/components/schemas/PeerNode" + } + }, + "Nodes": { + "type": "integer", + "description": "Total number of nodes in the swarm.", + "nullable": true, + "example": 4 + }, + "Managers": { + "type": "integer", + "description": "Total number of managers in the swarm.", + "nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + }, + "description": "Represents generic information about swarm.\n" + }, + "LocalNodeState": { + "type": "string", + "description": "Current local status of this node.", + "example": "active", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ] + }, + "PeerNode": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm." + }, + "Addr": { + "type": "string", + "description": "IP address and ports at which this node can be reached.\n" + } + }, + "description": "Represents a peer-node in the swarm" + }, + "NetworkAttachmentConfig": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "The target network for attachment. Must be a network name or ID.\n" + }, + "Aliases": { + "type": "array", + "description": "Discoverable alternate names for the service on this network.\n", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver attachment options for the network target.\n" + } + }, + "description": "Specifies how a service should be attached to a particular network.\n" + }, + "EventActor": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the object emitting the event", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Various key/value attributes of the object, depending on its type.\n", + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + }, + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n" + }, + "EventMessage": { + "title": "SystemEventsResponse", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The type of object emitting the event", + "example": "container", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ] + }, + "Action": { + "type": "string", + "description": "The type of event", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "type": "string", + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "type": "integer", + "description": "Timestamp of event", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "type": "integer", + "description": "Timestamp of event, with nanosecond accuracy", + "format": "int64", + "example": 1629574695515050000 + } + }, + "description": "EventMessage represents the information an event contains.\n" + }, + "OCIDescriptor": { + "type": "object", + "properties": { + "mediaType": { + "type": "string", + "description": "The media type of the object this schema refers to.\n", + "example": "application/vnd.docker.distribution.manifest.v2+json" + }, + "digest": { + "type": "string", + "description": "The digest of the targeted content.\n", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "type": "integer", + "description": "The size in bytes of the blob.\n", + "format": "int64", + "example": 3987495 + } + }, + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "x-go-name": "Descriptor" + }, + "OCIPlatform": { + "type": "object", + "properties": { + "architecture": { + "type": "string", + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "example": "arm" + }, + "os": { + "type": "string", + "description": "The operating system, for example `linux` or `windows`.\n", + "example": "windows" + }, + "os.version": { + "type": "string", + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "example": "10.0.19041.1165" + }, + "os.features": { + "type": "array", + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "example": [ + "win32k" + ], + "items": { + "type": "string" + } + }, + "variant": { + "type": "string", + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "example": "v7" + } + }, + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "x-go-name": "Platform" + }, + "DistributionInspect": { + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "type": "object", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + }, + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "x-go-name": "DistributionInspect" + }, + "ClusterVolume": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "properties": { + "CapacityBytes": { + "type": "integer", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n", + "format": "int64" + }, + "VolumeContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n" + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Information about the global status of the volume.\n" + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n" + } + } + } + } + }, + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n" + }, + "ClusterVolumeSpec": { + "type": "object", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "nullable": false, + "default": "single", + "enum": [ + "single", + "multi" + ] + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "nullable": false, + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ] + }, + "MountVolume": { + "type": "object", + "properties": {}, + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + }, + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n" + } + }, + "AccessibilityRequirements": { + "type": "object", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n" + }, + "CapacityRange": { + "type": "object", + "properties": { + "RequiredBytes": { + "type": "integer", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n", + "format": "int64" + }, + "LimitBytes": { + "type": "integer", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n", + "format": "int64" + } + }, + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n" + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "nullable": false, + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "description": "Defines how the volume is used by tasks.\n" + } + }, + "description": "Cluster-specific options used to create the volume.\n" + }, + "Topology": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n" + } + } + } +} \ No newline at end of file diff --git a/app/vendor/beluga-php/docker-php-api/spec/v1.44.json b/app/vendor/beluga-php/docker-php-api/spec/v1.44.json new file mode 100644 index 000000000..5165ccaae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/spec/v1.44.json @@ -0,0 +1,16801 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Docker Engine API", + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.44) is used.\nFor example, calling `/info` is the same as calling `/v1.44/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"email\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n", + "version": "1.44", + "x-logo": { + "url": "https://docs.docker.com/assets/images/logo-docker-main.png" + } + }, + "servers": [ + { + "url": "/v1.44" + } + ], + "tags": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "x-displayName": "Networks" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "x-displayName": "Volumes" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "x-displayName": "Exec" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "x-displayName": "Swarm" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "x-displayName": "Nodes" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Services" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Tasks" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Secrets" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "example": [ + { + "Id": "8dfafdbc3a40", + "Names": [ + "/boring_feynman" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 1", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + }, + { + "Id": "9cd87474be90", + "Names": [ + "/coolName" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 222222", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:08" + } + } + }, + "Mounts": [] + }, + { + "Id": "3176a2479c92", + "Names": [ + "/sleepy_dog" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:06" + } + } + }, + "Mounts": [] + }, + { + "Id": "4cb07b47f9fb", + "Names": [ + "/running_cat" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:05" + } + } + }, + "Mounts": [] + } + ] + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/create": { + "post": { + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$", + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Container to create", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/containers/{id}/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerInspectResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the container" + }, + "Created": { + "type": "string", + "description": "The time the container was created" + }, + "Path": { + "type": "string", + "description": "The path to the command being run" + }, + "Args": { + "type": "array", + "description": "The arguments to the command being run", + "items": { + "type": "string" + } + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "type": "string", + "description": "The container's image ID" + }, + "ResolvConfPath": { + "type": "string" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "Driver": { + "type": "string" + }, + "Platform": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "AppArmorProfile": { + "type": "string" + }, + "ExecIDs": { + "type": "array", + "description": "IDs of exec instances that are running in the container.", + "nullable": true, + "items": { + "type": "string" + } + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this\ncontainer.\n", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container.", + "format": "int64" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "example": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "exit 0" + ] + }, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "StopSignal": "SIGTERM", + "StopTimeout": 10 + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "overlay2", + "ExecIDs": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "HostConfig": { + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuPercent": 80, + "CpuShares": 0, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "Devices": [], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "IpcMode": "", + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "OomKillDisable": false, + "OomScoreAdj": 500, + "NetworkMode": "bridge", + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Type": "json-file" + }, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "SandboxKey": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "MacAddress": "", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2019-12-22T10:59:05.6385933Z", + "End": "2019-12-22T10:59:05.8078452Z", + "ExitCode": 0, + "Output": "" + } + ] + }, + "OOMKilled": false, + "Dead": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ], + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + }, + "text/plain": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "operationId": "ContainerChanges", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "example": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "tags": [ + "Container" + ], + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache`\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "example": { + "read": "2015-01-08T22:57:31.547920715Z", + "pids_stats": { + "current": 3 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "memory_stats": { + "stats": { + "total_pgmajfault": 0, + "cache": 0, + "mapped_file": 0, + "total_inactive_file": 0, + "pgpgout": 414, + "rss": 6537216, + "total_mapped_file": 0, + "writeback": 0, + "unevictable": 0, + "pgpgin": 477, + "total_unevictable": 0, + "pgmajfault": 0, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_writeback": 0, + "total_inactive_anon": 0, + "rss_huge": 6291456, + "hierarchical_memory_limit": 67108864, + "total_pgfault": 964, + "total_active_file": 0, + "active_anon": 6537216, + "total_active_anon": 6537216, + "total_pgpgout": 414, + "total_cache": 0, + "inactive_anon": 0, + "active_file": 0, + "pgfault": 964, + "inactive_file": 0, + "total_pgpgin": 477 + }, + "max_usage": 6651904, + "usage": 6537216, + "failcnt": 0, + "limit": 67108864 + }, + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100215355, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 739306590000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100093996, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 9492140000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already started", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already stopped", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "tags": [ + "Container" + ], + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/update": { + "post": { + "tags": [ + "Container" + ], + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "title": "ContainerUpdateResponse", + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerUpdate operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "update" + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "New name for the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\nand the stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach/ws": { + "get": { + "tags": [ + "Container" + ], + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "default": "not-running", + "enum": [ + "not-running", + "next-exit", + "removed" + ] + } + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.\n`path` parameter is asserted to be a directory. If it exists as a file, 400 error\nwill be returned with message \"not a directory\".\n", + "operationId": "PutContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The content was extracted successfully", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "not a directory" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + }, + "head": { + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + }, + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/prune": { + "post": { + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ContainerPruneResponse", + "type": "object", + "properties": { + "ContainersDeleted": { + "type": "array", + "description": "Container IDs that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/build": { + "post": { + "tags": [ + "Image" + ], + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "default": "application/x-tar", + "enum": [ + "application/x-tar" + ] + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration", + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n", + "schema": { + "type": "string", + "default": "1", + "enum": [ + "1", + "2" + ] + } + } + ], + "requestBody": { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + } + }, + "/build/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "keep-storage", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "BuildPruneResponse", + "type": "object", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "type": "string", + "description": "ID of build cache object" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/create": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create an image", + "description": "Pull or import an image.", + "operationId": "ImageCreate", + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputImage" + } + }, + "/images/{name}/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "HistoryResponseItem", + "required": [ + "Comment", + "Created", + "CreatedBy", + "Id", + "Size", + "Tags" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + }, + "description": "individual image layer information in response to ImageHistory operation", + "x-go-name": "HistoryResponseItem" + } + }, + "example": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "tags": [ + "Image" + ], + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The tag to associate with the image on the registry.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "tags": [ + "Image" + ], + "summary": "Tag an image", + "description": "Tag an image so that it becomes part of a repository.", + "operationId": "ImageTag", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}": { + "delete": { + "tags": [ + "Image" + ], + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "example": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/search": { + "get": { + "tags": [ + "Image" + ], + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-automated=(true|false)` (deprecated, see below)\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n\nThe `is-automated` filter is deprecated. The `is_automated` field has\nbeen deprecated by Docker Hub's search API. Consequently, searching\nfor `is-automated=true` will yield no results.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ImageSearchResponseItem", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "type": "boolean", + "description": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always\n> be \"false\" in future.\n", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "example": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ImagePruneResponse", + "type": "object", + "properties": { + "ImagesDeleted": { + "type": "array", + "description": "Images that were deleted", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/auth": { + "post": { + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "requestBody": { + "description": "Authentication to check", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the authentication", + "nullable": false + }, + "IdentityToken": { + "type": "string", + "description": "An opaque token used to authenticate a user after a successful login", + "nullable": false + } + } + }, + "example": { + "Status": "Login Succeeded", + "IdentityToken": "9cbaf023786cd7..." + } + } + } + }, + "204": { + "description": "No error", + "content": {} + }, + "401": { + "description": "Auth error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "authConfig" + } + }, + "/info": { + "get": { + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/version": { + "get": { + "tags": [ + "System" + ], + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/_ping": { + "get": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder\n\nThe default on Linux is version \"2\" (BuildKit), but the daemon\ncan be configured to recommend version \"1\" (classic Builder).\nWindows does not yet support BuildKit for native Windows images,\nand uses \"1\" (classic builder) as a default.\n\nThis value is a recommendation as advertised by the daemon, and\nit is up to the client to choose which builder to use.\n", + "schema": { + "type": "string", + "default": "2" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "head": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/commit": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The container configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "containerConfig" + } + }, + "/events": { + "get": { + "tags": [ + "System" + ], + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/system/df": { + "get": { + "tags": [ + "System" + ], + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + }, + "text/plain": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/load": { + "post": { + "tags": [ + "Image" + ], + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "description": "Tar archive containing images", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "imagesTarball" + } + }, + "/containers/{id}/exec": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Exec configuration", + "content": { + "application/json": { + "schema": { + "title": "ExecConfig", + "type": "object", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execConfig" + } + }, + "/exec/{id}/start": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ExecStartConfig", + "type": "object", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + } + }, + "example": { + "Detach": false, + "Tty": true, + "ConsoleSize": [ + 80, + 64 + ] + } + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execStartConfig" + } + }, + "/exec/{id}/resize": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ExecInspectResponse", + "type": "object", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "example": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes": { + "get": { + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/create": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "requestBody": { + "description": "Volume configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateOptions" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "volumeConfig" + } + }, + "/volumes/{name}": { + "get": { + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Volume" + ], + "summary": "\"Update a volume. Valid only for Swarm cluster volumes\"\n", + "operationId": "VolumeUpdate", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + }, + "delete": { + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "The volume was removed", + "content": {} + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/prune": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "VolumePruneResponse", + "type": "object", + "properties": { + "VolumesDeleted": { + "type": "array", + "description": "Volumes that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks": { + "get": { + "tags": [ + "Network" + ], + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Network" + } + }, + "example": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/{id}": { + "get": { + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/create": { + "post": { + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "requestBody": { + "description": "Network configuration", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The network's name." + }, + "CheckDuplicate": { + "type": "boolean", + "description": "Deprecated: CheckDuplicate is now always enabled.\n" + }, + "Driver": { + "type": "string", + "description": "Name of the network driver plugin to use.", + "default": "bridge" + }, + "Internal": { + "type": "boolean", + "description": "Restrict external access to the network." + }, + "Attachable": { + "type": "boolean", + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n" + }, + "Ingress": { + "type": "boolean", + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "EnableIPv6": { + "type": "boolean", + "description": "Enable IPv6 on the network." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Network specific options to be used by the drivers." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "isolated_nw", + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.20.0.0/16", + "IPRange": "172.20.10.0/24", + "Gateway": "172.20.10.11" + }, + { + "Subnet": "2001:db8:abcd::/64", + "Gateway": "2001:db8:abcd::1011" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": true, + "Attachable": false, + "Ingress": false, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created network." + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden operation. This happens when trying to create a network named after a pre-defined network,\nor when trying to create an overlay network on a daemon which is not part of a Swarm cluster.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "networkConfig" + } + }, + "/networks/{id}/connect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "description": "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container", + "operationId": "NetworkConnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkConnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network." + }, + "EndpointConfig": { + "$ref": "#/components/schemas/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + }, + "MacAddress": "02:42:ac:12:05:02" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Operation forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/{id}/disconnect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkDisconnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.\n" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.\n" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/prune": { + "post": { + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkPruneResponse", + "type": "object", + "properties": { + "NetworksDeleted": { + "type": "array", + "description": "Networks that were deleted", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "description": "Returns information about installed plugins.", + "operationId": "PluginList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/privileges": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/pull": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "operationId": "PluginPull", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/{name}/json": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/create": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Path to tar containing plugin rootfs and manifest", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "tarContext" + } + }, + "/plugins/{name}/push": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "description": "Push a plugin to the registry.\n", + "operationId": "PluginPush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + "DEBUG=1" + ], + "items": { + "type": "string" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/nodes": { + "get": { + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/init": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "name": "force", + "in": "query", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/unlockkey": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/unlock": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmUnlockRequest", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/create": { + "post": { + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ] + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "default": "spec", + "enum": [ + "spec", + "previous-spec" + ] + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ] + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}/logs": { + "get": { + "tags": [ + "Service" + ], + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the service", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such service: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks": { + "get": { + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ], + "items": { + "$ref": "#/components/schemas/Task" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "tags": [ + "Task" + ], + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such task: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets": { + "get": { + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ], + "items": { + "$ref": "#/components/schemas/Secret" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/create": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/secrets/{id}": { + "get": { + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs": { + "get": { + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ], + "items": { + "$ref": "#/components/schemas/Config" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/create": { + "post": { + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs/{id}": { + "get": { + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/distribution/{name}/json": { + "get": { + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/session": { + "post": { + "tags": [ + "Session" + ], + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Port": { + "required": [ + "PrivatePort", + "Type" + ], + "type": "object", + "properties": { + "IP": { + "type": "string", + "description": "Host IP address that the container's port is mapped to", + "format": "ip-address" + }, + "PrivatePort": { + "type": "integer", + "description": "Port on the container", + "format": "uint16", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "description": "Port exposed on the host", + "format": "uint16" + }, + "Type": { + "type": "string", + "nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "description": "An open port on a container", + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountPoint": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `volume` a docker volume with the given `Name`.\n- `tmpfs` a `tmpfs`.\n- `npipe` a named pipe from the host into the container.\n- `cluster` a Swarm cluster volume\n", + "example": "volume", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "Name": { + "type": "string", + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "example": "myvolume" + }, + "Source": { + "type": "string", + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "type": "string", + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "type": "string", + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "example": "local" + }, + "Mode": { + "type": "string", + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "example": "z" + }, + "RW": { + "type": "boolean", + "description": "Whether the mount is mounted writable (read-write).\n", + "example": true + }, + "Propagation": { + "type": "string", + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "example": "" + } + }, + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n" + }, + "DeviceMapping": { + "type": "object", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "description": "A device mapping between the host and container", + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "items": { + "type": "string" + } + }, + "Capabilities": { + "type": "array", + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n", + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n" + } + }, + "description": "A request for devices to be sent to device drivers" + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Device path" + }, + "Rate": { + "minimum": 0, + "type": "integer", + "description": "Rate", + "format": "int64" + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "Container path." + }, + "Source": { + "type": "string", + "description": "Mount source (e.g. a volume name, a host path)." + }, + "Type": { + "type": "string", + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "ReadOnly": { + "type": "boolean", + "description": "Whether the mount should be read-only." + }, + "Consistency": { + "type": "string", + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + }, + "BindOptions": { + "type": "object", + "properties": { + "Propagation": { + "type": "string", + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "type": "boolean", + "description": "Disable recursive bind mount.", + "default": false + }, + "CreateMountpoint": { + "type": "boolean", + "description": "Create mount point on host if missing", + "default": false + }, + "ReadOnlyNonRecursive": { + "type": "boolean", + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to true in conjunction).\n", + "default": false + }, + "ReadOnlyForceRecursive": { + "type": "boolean", + "description": "Raise an error if the mount cannot be made recursively read-only.", + "default": false + } + }, + "description": "Optional configuration for the `bind` type." + }, + "VolumeOptions": { + "type": "object", + "properties": { + "NoCopy": { + "type": "boolean", + "description": "Populate volume with data from the target.", + "default": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "DriverConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver to use to create the volume." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "key/value map of driver specific options." + } + }, + "description": "Map of driver specific options" + } + }, + "description": "Optional configuration for the `volume` type." + }, + "TmpfsOptions": { + "type": "object", + "properties": { + "SizeBytes": { + "type": "integer", + "description": "The size for the tmpfs mount in bytes.", + "format": "int64" + }, + "Mode": { + "type": "integer", + "description": "The permission mode for the tmpfs mount in an integer." + } + }, + "description": "Optional configuration for the `tmpfs` type." + } + } + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + }, + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n" + }, + "Resources": { + "type": "object", + "properties": { + "CpuShares": { + "type": "integer", + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n" + }, + "Memory": { + "type": "integer", + "description": "Memory limit in bytes.", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "type": "string", + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n" + }, + "BlkioWeight": { + "maximum": 1000, + "minimum": 0, + "type": "integer", + "description": "Block IO weight (relative weight)." + }, + "BlkioWeightDevice": { + "type": "array", + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "minimum": 0, + "type": "integer" + } + } + } + }, + "BlkioDeviceReadBps": { + "type": "array", + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "type": "array", + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "type": "array", + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "type": "array", + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "format": "int64" + }, + "CpuQuota": { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "format": "int64" + }, + "CpuRealtimePeriod": { + "type": "integer", + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "type": "integer", + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpusetCpus": { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "example": "0-3" + }, + "CpusetMems": { + "type": "string", + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n" + }, + "Devices": { + "type": "array", + "description": "A list of devices to add to the container.", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "type": "array", + "description": "a list of cgroup rules to apply to the container", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "type": "array", + "description": "A list of requests for devices to be sent to device drivers.\n", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "KernelMemoryTCP": { + "type": "integer", + "description": "Hard limit for kernel TCP buffer memory (in bytes). Depending on the\nOCI runtime in use, this option may be ignored. It is no longer supported\nby the default (runc) runtime.\n\nThis field is omitted when empty.\n", + "format": "int64" + }, + "MemoryReservation": { + "type": "integer", + "description": "Memory soft limit in bytes.", + "format": "int64" + }, + "MemorySwap": { + "type": "integer", + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "format": "int64" + }, + "MemorySwappiness": { + "maximum": 100, + "minimum": 0, + "type": "integer", + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "format": "int64" + }, + "NanoCpus": { + "type": "integer", + "description": "CPU quota in units of 10-9 CPUs.", + "format": "int64" + }, + "OomKillDisable": { + "type": "boolean", + "description": "Disable OOM Killer for the container." + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "PidsLimit": { + "type": "integer", + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + }, + "CpuCount": { + "type": "integer", + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "CpuPercent": { + "type": "integer", + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "IOMaximumIOps": { + "type": "integer", + "description": "Maximum IOps for the container system drive (Windows only)", + "format": "int64" + }, + "IOMaximumBandwidth": { + "type": "integer", + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "format": "int64" + } + }, + "description": "A container's resources (cgroups config, ulimits, etc)" + }, + "Limit": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "type": "integer", + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "format": "int64", + "example": 100, + "default": 0 + } + }, + "description": "An object describing a limit on resources which can be requested by a task.\n" + }, + "ResourceObject": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + }, + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n" + }, + "GenericResources": { + "type": "array", + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "HealthConfig": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Timeout": { + "type": "integer", + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Retries": { + "type": "integer", + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n" + }, + "StartPeriod": { + "type": "integer", + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "StartInterval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + } + }, + "description": "A test to perform to check that the container is healthy." + }, + "Health": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "example": "healthy", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ] + }, + "FailingStreak": { + "type": "integer", + "description": "FailingStreak is the number of consecutive failures", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "description": "Health stores information about the container's healthcheck results.\n", + "nullable": true, + "x-nullable": true + }, + "HealthcheckResult": { + "type": "object", + "properties": { + "Start": { + "type": "string", + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "type": "string", + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "type": "integer", + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "example": 0 + }, + "Output": { + "type": "string", + "description": "Output from last check" + } + }, + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "nullable": true, + "x-nullable": true + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written" + }, + "LogConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "The logging configuration for this container" + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to the container.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "Annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n" + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n", + "enum": [ + "private", + "host" + ] + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n" + }, + "Tmpfs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n" + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "minimum": 0, + "type": "integer", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "format": "int64" + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A list of kernel parameters (sysctls) to set in the container.\nFor example:\n\n```\n{\"net.ipv4.ip_forward\": \"1\"}\n```\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + } + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + } + } + } + } + ] + }, + "ContainerConfig": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "example": "439f4e91bd1d" + }, + "Domainname": { + "type": "string", + "description": "The domain name to use for the container.\n" + }, + "User": { + "type": "string", + "description": "The user that commands are run as inside the container." + }, + "AttachStdin": { + "type": "boolean", + "description": "Whether to attach to `stdin`.", + "default": false + }, + "AttachStdout": { + "type": "boolean", + "description": "Whether to attach to `stdout`.", + "default": true + }, + "AttachStderr": { + "type": "boolean", + "description": "Whether to attach to `stderr`.", + "default": true + }, + "ExposedPorts": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "nullable": true, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "type": "boolean", + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "default": false + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`", + "default": false + }, + "StdinOnce": { + "type": "boolean", + "description": "Close `stdin` after one attached client disconnects", + "default": false + }, + "Env": { + "type": "array", + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run specified as a string or an array of strings.\n", + "example": [ + "/bin/sh" + ], + "items": { + "type": "string" + } + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "type": "boolean", + "description": "Command is already escaped (Windows only)", + "nullable": true, + "example": false, + "default": false + }, + "Image": { + "type": "string", + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "example": "example-image:1.0" + }, + "Volumes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for commands to run in.", + "example": "/public/" + }, + "Entrypoint": { + "type": "array", + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "example": [], + "items": { + "type": "string" + } + }, + "NetworkDisabled": { + "type": "boolean", + "description": "Disable networking for the container.", + "nullable": true + }, + "MacAddress": { + "type": "string", + "description": "MAC address of the container.\n\nDeprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead.\n", + "nullable": true + }, + "OnBuild": { + "type": "array", + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "nullable": true, + "example": [], + "items": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop a container as a string or unsigned integer.\n", + "nullable": true, + "example": "SIGTERM" + }, + "StopTimeout": { + "type": "integer", + "description": "Timeout to stop a container in seconds.", + "nullable": true + }, + "Shell": { + "type": "array", + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "nullable": true, + "example": [ + "/bin/sh", + "-c" + ], + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a container that is portable between hosts.\n\nWhen used as `ContainerConfig` field in an image, `ContainerConfig` is an\noptional field containing the configuration of the container that was last\ncommitted when creating the image.\n\nPrevious versions of Docker builder used this field to store build cache,\nand it is not in active use anymore.\n" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n" + } + }, + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Bridge": { + "type": "string", + "description": "Name of the default bridge interface when dockerd's --bridge flag is set.\n", + "example": "docker0" + }, + "SandboxID": { + "type": "string", + "description": "SandboxID uniquely represents a container's network stack.", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "HairpinMode": { + "type": "boolean", + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n\nDeprecated: This field is never set and will be removed in a future release.\n", + "example": false + }, + "LinkLocalIPv6Address": { + "type": "string", + "description": "IPv6 unicast address using the link-local prefix.\n\nDeprecated: This field is never set and will be removed in a future release.\n", + "example": "" + }, + "LinkLocalIPv6PrefixLen": { + "type": "integer", + "description": "Prefix length of the IPv6 unicast address.\n\nDeprecated: This field is never set and will be removed in a future release.\n" + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "SandboxKey": { + "type": "string", + "description": "SandboxKey is the full path of the netns handle", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "description": "Deprecated: This field is never set and will be removed in a future release.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "SecondaryIPv6Addresses": { + "type": "array", + "description": "Deprecated: This field is never set and will be removed in a future release.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "EndpointID": { + "type": "string", + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 64 + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address for this network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8:2::100" + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the container on the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "Information about all networks that the container is connected to.\n" + } + }, + "description": "NetworkSettings exposes the network settings in the API" + }, + "Address": { + "type": "object", + "properties": { + "Addr": { + "type": "string", + "description": "IP address." + }, + "PrefixLen": { + "type": "integer", + "description": "Mask length of the IP address." + } + }, + "description": "Address represents an IPv4 or IPv6 IP address." + }, + "PortMap": { + "type": "object", + "additionalProperties": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ] + } + }, + "PortBinding": { + "type": "object", + "properties": { + "HostIp": { + "type": "string", + "description": "Host IP address that the container's port is mapped to.", + "example": "127.0.0.1" + }, + "HostPort": { + "type": "string", + "description": "Host port number that the container's port is mapped to.", + "example": "4443" + } + }, + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n" + }, + "GraphDriverData": { + "required": [ + "Data", + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the storage driver.", + "nullable": false, + "example": "overlay2" + }, + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "nullable": false, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + }, + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n" + }, + "FilesystemChange": { + "required": [ + "Kind", + "Path" + ], + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Path to file or directory that has changed.\n", + "nullable": false + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + }, + "description": "Change in the container's filesystem.\n" + }, + "ChangeType": { + "type": "integer", + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "format": "uint8", + "nullable": false, + "enum": [ + 0, + 1, + 2 + ], + "x-nullable": false + }, + "ImageInspect": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Parent": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "Comment": { + "type": "string", + "description": "Optional message that was set when committing or importing the image.\n", + "nullable": false, + "example": "" + }, + "Created": { + "type": "string", + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "format": "dateTime", + "nullable": true, + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Container": { + "type": "string", + "description": "The ID of the container that was used to create the image.\n\nDepending on how the image was created, this field may be empty.\n\n**Deprecated**: this field is kept for backward compatibility, but\nwill be removed in API v1.45.\n", + "example": "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735" + }, + "ContainerConfig": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "DockerVersion": { + "type": "string", + "description": "The version of Docker that was used to build the image.\n\nDepending on how the image was created, this field may be empty.\n", + "nullable": false, + "example": "20.10.7" + }, + "Author": { + "type": "string", + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "nullable": false, + "example": "" + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "Architecture": { + "type": "string", + "description": "Hardware CPU architecture that the image runs on.\n", + "nullable": false, + "example": "arm" + }, + "Variant": { + "type": "string", + "description": "CPU architecture variant (presently ARM-only).\n", + "nullable": true, + "example": "v7" + }, + "Os": { + "type": "string", + "description": "Operating System the image is built to run on.\n", + "nullable": false, + "example": "linux" + }, + "OsVersion": { + "type": "string", + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "nullable": true, + "example": "" + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nDeprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.\n", + "format": "int64", + "example": 1239828 + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "RootFS": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "layers" + }, + "Layers": { + "type": "array", + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ], + "items": { + "type": "string" + } + } + }, + "description": "Information about the image's RootFS, including the layer IDs.\n" + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "format": "dateTime", + "nullable": true, + "example": "2022-02-28T14:40:02.623929178Z" + } + }, + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n" + } + }, + "description": "Information about an image in the local image cache.\n" + }, + "ImageSummary": { + "required": [ + "Containers", + "Created", + "Id", + "Labels", + "ParentId", + "RepoDigests", + "RepoTags", + "SharedSize", + "Size" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "nullable": false, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "nullable": false, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Created": { + "type": "integer", + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds sinds EPOCH).\n", + "nullable": false, + "example": 1644009612 + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 172064416 + }, + "SharedSize": { + "type": "integer", + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nDeprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.", + "format": "int64", + "example": 172064416 + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "type": "integer", + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\nThis size is not calculated by default, and depends on which API endpoint\nis used. `-1` indicates that the value has not been set / calculated.\n", + "nullable": false, + "example": 2 + } + }, + "x-go-name": "Summary" + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "email": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "required": [ + "Driver", + "Labels", + "Mountpoint", + "Name", + "Options", + "Scope" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "nullable": false, + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "nullable": false, + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "description": "Date/Time the volume was created.", + "format": "dateTime", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "nullable": false, + "example": "local", + "default": "local", + "enum": [ + "local", + "global" + ] + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The driver specific options used when creating the volume.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "required": [ + "RefCount", + "Size" + ], + "type": "object", + "properties": { + "Size": { + "type": "integer", + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "format": "int64", + "nullable": false, + "default": -1 + }, + "RefCount": { + "type": "integer", + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "format": "int64", + "nullable": false, + "default": -1 + } + }, + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "nullable": true, + "x-go-name": "UsageData" + } + } + }, + "VolumeCreateOptions": { + "title": "VolumeConfig", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver to use.", + "nullable": false, + "example": "custom", + "default": "local" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration", + "x-go-name": "CreateOptions" + }, + "VolumeListResponse": { + "title": "VolumeListResponse", + "type": "object", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "Volume list response", + "x-go-name": "ListResponse" + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Scope": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "Internal": { + "type": "boolean" + }, + "Attachable": { + "type": "boolean" + }, + "Ingress": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/NetworkContainer" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Name": "net01", + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Created": "2016-10-19T04:33:30.360899459Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.19.0.0/16", + "Gateway": "172.19.0.1" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": false, + "Attachable": false, + "Ingress": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "IPAM": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "description": "Name of the IPAM driver to use.", + "default": "default" + }, + "Config": { + "type": "array", + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a map." + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string" + }, + "IPRange": { + "type": "string" + }, + "Gateway": { + "type": "string" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EndpointID": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parent": { + "type": "string", + "description": "ID of the parent build cache record.\n\n> **Deprecated**: This field is deprecated, and omitted if empty.\n", + "nullable": true, + "example": "" + }, + "Parents": { + "type": "array", + "description": "List of parent build cache record IDs.\n", + "nullable": true, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ], + "items": { + "type": "string" + } + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "type": "integer", + "description": "Amount of disk space used by the build cache (in bytes).\n", + "example": 51 + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "type": "string", + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + }, + "description": "BuildCache contains information about a build cache record.\n" + }, + "ImageID": { + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "description": "Image ID or Digest", + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The error message.", + "nullable": false + } + }, + "description": "Represents an error.", + "example": { + "message": "Something went wrong." + } + }, + "IdResponse": { + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The id of the newly created object.", + "nullable": false + } + }, + "description": "Response to an API call that returns just an Id" + }, + "EndpointSettings": { + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "example": [ + "container_1", + "container_2" + ], + "items": { + "type": "string" + } + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "example": "02:42:ac:11:00:04" + }, + "Aliases": { + "type": "array", + "example": [ + "server_x", + "server_y" + ], + "items": { + "type": "string" + } + }, + "NetworkID": { + "type": "string", + "description": "Unique ID of the network.\n", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "type": "string", + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for this network.\n", + "example": "172.17.0.1" + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address.\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address.\n", + "example": "2001:db8:2::100" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address.\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n", + "format": "int64", + "example": 64 + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "DNSNames": { + "type": "array", + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ], + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a network endpoint." + }, + "EndpointIPAMConfig": { + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "example": [ + "169.254.34.68", + "fe80::3468" + ], + "items": { + "type": "string" + } + } + }, + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "nullable": true, + "x-nullable": true + }, + "PluginMount": { + "required": [ + "Description", + "Destination", + "Name", + "Options", + "Settable", + "Source", + "Type" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "example": [ + "rbind", + "rw" + ], + "items": { + "type": "string" + } + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginDevice": { + "required": [ + "Description", + "Name", + "Path", + "Settable" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginEnv": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginInterfaceType": { + "required": [ + "Capability", + "Prefix", + "Version" + ], + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "nullable": false + }, + "Capability": { + "type": "string", + "nullable": false + }, + "Version": { + "type": "string", + "nullable": false + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginPrivilege": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "example": [ + "host" + ], + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "x-go-name": "PluginPrivilege" + }, + "Plugin": { + "required": [ + "Config", + "Enabled", + "Name", + "Settings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "type": "boolean", + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "nullable": false, + "example": true + }, + "Settings": { + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "type": "object", + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + "DEBUG=0" + ], + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "description": "Settings that can be modified by users.", + "nullable": false + }, + "PluginReference": { + "type": "string", + "description": "plugin remote reference used to push/pull the plugin", + "nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "required": [ + "Args", + "Description", + "Documentation", + "Entrypoint", + "Env", + "Interface", + "IpcHost", + "Linux", + "Mounts", + "Network", + "PidHost", + "PropagatedMount", + "WorkDir" + ], + "type": "object", + "properties": { + "DockerVersion": { + "type": "string", + "description": "Docker Version used to create the plugin", + "nullable": false, + "example": "17.06.0-ce" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "required": [ + "Socket", + "Types" + ], + "type": "object", + "properties": { + "Types": { + "type": "array", + "example": [ + "docker.volumedriver/1.0" + ], + "items": { + "$ref": "#/components/schemas/PluginInterfaceType" + } + }, + "Socket": { + "type": "string", + "nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "description": "Protocol to use for clients connecting to the plugin.", + "example": "some.protocol/v1.0", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "description": "The interface between Docker and the plugin", + "nullable": false + }, + "Entrypoint": { + "type": "array", + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ], + "items": { + "type": "string" + } + }, + "WorkDir": { + "type": "string", + "nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "host" + } + }, + "nullable": false + }, + "Linux": { + "required": [ + "AllowAllDevices", + "Capabilities", + "Devices" + ], + "type": "object", + "properties": { + "Capabilities": { + "type": "array", + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "AllowAllDevices": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Value": "0" + } + ], + "items": { + "$ref": "#/components/schemas/PluginEnv" + } + }, + "Args": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "args" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ], + "items": { + "type": "string" + } + } + } + } + }, + "description": "The config of a plugin.", + "nullable": false + } + }, + "description": "A plugin for the Engine API" + }, + "ObjectVersion": { + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + }, + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n" + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name for the node.", + "example": "my-node" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Role": { + "type": "string", + "description": "Role of the node.", + "example": "manager", + "enum": [ + "worker", + "manager" + ] + }, + "Availability": { + "type": "string", + "description": "Availability of the node.", + "example": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + }, + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n" + }, + "Platform": { + "type": "object", + "properties": { + "Architecture": { + "type": "string", + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "example": "x86_64" + }, + "OS": { + "type": "string", + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "example": "linux" + } + }, + "description": "Platform represents the platform (Arch/OS).\n" + }, + "EngineDescription": { + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ], + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + } + }, + "description": "EngineDescription provides information about an engine." + }, + "TLSInfo": { + "type": "object", + "properties": { + "TrustRoot": { + "type": "string", + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n" + }, + "CertIssuerSubject": { + "type": "string", + "description": "The base64-url-safe-encoded raw subject bytes of the issuer." + }, + "CertIssuerPublicKey": { + "type": "string", + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n" + } + }, + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "type": "string", + "description": "IP address of the node.", + "example": "172.17.0.2" + } + }, + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n" + }, + "NodeState": { + "type": "string", + "description": "NodeState represents the state of a node.", + "example": "ready", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ] + }, + "ManagerStatus": { + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "example": true, + "default": false + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "type": "string", + "description": "The IP address and port at which the manager is reachable.\n", + "example": "10.0.0.46:2377" + } + }, + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "nullable": true, + "x-nullable": true + }, + "Reachability": { + "type": "string", + "description": "Reachability represents the reachability of a node.", + "example": "reachable", + "enum": [ + "unknown", + "unreachable", + "reachable" + ] + }, + "SwarmSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the swarm.", + "example": "default" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "type": "integer", + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "format": "int64", + "example": 10 + } + }, + "description": "Orchestration configuration.", + "nullable": true + }, + "Raft": { + "type": "object", + "properties": { + "SnapshotInterval": { + "type": "integer", + "description": "The number of log entries between snapshots.", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "type": "integer", + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "type": "integer", + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "type": "integer", + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 3 + }, + "HeartbeatTick": { + "type": "integer", + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 1 + } + }, + "description": "Raft configuration." + }, + "Dispatcher": { + "type": "object", + "properties": { + "HeartbeatPeriod": { + "type": "integer", + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "format": "int64", + "example": 5000000000 + } + }, + "description": "Dispatcher configuration.", + "nullable": true + }, + "CAConfig": { + "type": "object", + "properties": { + "NodeCertExpiry": { + "type": "integer", + "description": "The duration node certificates are issued for.", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "type": "array", + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "type": "string", + "description": "URL where certificate signing requests should be sent.\n" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n" + }, + "CACert": { + "type": "string", + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n" + } + } + } + }, + "SigningCACert": { + "type": "string", + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n" + }, + "SigningCAKey": { + "type": "string", + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n" + }, + "ForceRotate": { + "type": "integer", + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64" + } + }, + "description": "CA configuration.", + "nullable": true + }, + "EncryptionConfig": { + "type": "object", + "properties": { + "AutoLockManagers": { + "type": "boolean", + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "example": false + } + }, + "description": "Parameters related to encryption-at-rest." + }, + "TaskDefaults": { + "type": "object", + "properties": { + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The log driver to use as a default for new tasks.\n", + "example": "json-file" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "example": { + "max-file": "10", + "max-size": "100m" + } + } + }, + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n" + } + }, + "description": "Defaults for creating tasks in this cluster." + } + }, + "description": "User modifiable swarm configuration." + }, + "ClusterInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the swarm.", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "type": "boolean", + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "example": false + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "format": "uint32", + "example": 4789 + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "items": { + "type": "string", + "format": "CIDR", + "example": "" + } + }, + "SubnetSize": { + "maximum": 29, + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "format": "uint32", + "example": 24 + } + }, + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "nullable": true, + "x-nullable": true + }, + "JoinTokens": { + "type": "object", + "properties": { + "Worker": { + "type": "string", + "description": "The token workers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "type": "string", + "description": "The token managers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + }, + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n" + }, + "Swarm": { + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name or 'alias' to use for the plugin." + }, + "Remote": { + "type": "string", + "description": "The plugin image reference to use." + }, + "Disabled": { + "type": "boolean", + "description": "Disable the plugin once scheduled." + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "ContainerSpec": { + "type": "object", + "properties": { + "Image": { + "type": "string", + "description": "The image name to use for the container" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value data." + }, + "Command": { + "type": "array", + "description": "The command to be run in the image.", + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "description": "Arguments to the command.", + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n" + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `VAR=value`.\n", + "items": { + "type": "string" + } + }, + "Dir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "User": { + "type": "string", + "description": "The user inside the container." + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "properties": { + "CredentialSpec": { + "type": "object", + "properties": { + "Config": { + "type": "string", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "0bt9dmxjvjiqermk6xrop3ekq" + }, + "File": { + "type": "string", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "spec.json" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + }, + "description": "CredentialSpec for managed service account (Windows only)" + }, + "SELinuxContext": { + "type": "object", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + }, + "description": "SELinux labels of the container" + }, + "Seccomp": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "type": "string", + "description": "The custom seccomp profile as a json object" + } + }, + "description": "Options for configuring seccomp on the container" + }, + "AppArmor": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + }, + "description": "Options for configuring AppArmor on the container" + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + }, + "description": "Security options for the container" + }, + "TTY": { + "type": "boolean", + "description": "Whether a pseudo-TTY should be allocated." + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`" + }, + "ReadOnly": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop the container." + }, + "StopGracePeriod": { + "type": "integer", + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "format": "int64" + }, + "HealthCheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "type": "object", + "properties": { + "Nameservers": { + "type": "array", + "description": "The IP addresses of the name servers.", + "items": { + "type": "string" + } + }, + "Search": { + "type": "array", + "description": "A search list for host-name lookup.", + "items": { + "type": "string" + } + }, + "Options": { + "type": "array", + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "items": { + "type": "string" + } + } + }, + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n" + }, + "Secrets": { + "type": "array", + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n" + }, + "SecretID": { + "type": "string", + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n" + }, + "SecretName": { + "type": "string", + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n" + } + } + } + }, + "Configs": { + "type": "array", + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n" + }, + "Runtime": { + "type": "object", + "properties": {}, + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n" + }, + "ConfigID": { + "type": "string", + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n" + }, + "ConfigName": { + "type": "string", + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n" + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW" + ], + "items": { + "type": "string" + } + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + } + }, + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "NetworkAttachmentSpec": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string", + "description": "ID of the container represented by this task" + } + }, + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "Resources": { + "type": "object", + "properties": { + "Limits": { + "$ref": "#/components/schemas/Limit" + }, + "Reservations": { + "$ref": "#/components/schemas/ResourceObject" + } + }, + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n" + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Condition": { + "type": "string", + "description": "Condition for restart.", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "type": "integer", + "description": "Delay between restart attempts.", + "format": "int64" + }, + "MaxAttempts": { + "type": "integer", + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "format": "int64", + "default": 0 + }, + "Window": { + "type": "integer", + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "format": "int64", + "default": 0 + } + }, + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n" + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ], + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ], + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string", + "description": "label descriptor, such as `engine.labels.az`.\n" + } + } + } + } + } + }, + "MaxReplicas": { + "type": "integer", + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "format": "int64", + "default": 0 + }, + "Platforms": { + "type": "array", + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "type": "integer", + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime is the type of runtime specified for the task executor.\n" + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n" + } + }, + "description": "User modifiable task configuration." + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + }, + "description": "represents the status of a container." + }, + "PortStatus": { + "type": "object", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "represents the port status of a task's host ports whose service has published host ports" + }, + "TaskStatus": { + "type": "object", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/components/schemas/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/components/schemas/PortStatus" + } + }, + "description": "represents the status of a task." + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the task." + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "type": "string", + "description": "Name of the task." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "type": "string", + "description": "The ID of the service this task is part of." + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "type": "string", + "description": "The ID of the node that this task is on." + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the service." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "integer", + "description": "The maximum number of replicas to run simultaneously.\n", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "type": "integer", + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "format": "int64" + } + }, + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n" + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "description": "The mode used for services which run a task to the completed state\non each valid node.\n" + } + }, + "description": "Scheduling mode for the service." + }, + "UpdateConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between updates, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the update strategy of the service." + }, + "RollbackConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the rollback strategy of the service." + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + }, + "description": "User modifiable configuration for a service." + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "type": "integer", + "description": "The port inside the container." + }, + "PublishedPort": { + "type": "integer", + "description": "The port on the swarm hosts." + }, + "PublishMode": { + "type": "string", + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "example": "ingress", + "default": "ingress", + "enum": [ + "ingress", + "host" + ] + } + } + }, + "EndpointSpec": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "type": "array", + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "Properties that can be configured to access and load balance a service." + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + }, + "description": "The status of a service update." + }, + "ServiceStatus": { + "type": "object", + "properties": { + "RunningTasks": { + "type": "integer", + "description": "The number of tasks for the service currently in the Running state.\n", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "type": "integer", + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "type": "integer", + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "format": "uint64" + } + }, + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n" + }, + "JobStatus": { + "type": "object", + "properties": { + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "LastExecution": { + "type": "string", + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "format": "dateTime" + } + }, + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n" + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Untagged": { + "type": "string", + "description": "The image ID of an image that was untagged" + }, + "Deleted": { + "type": "string", + "description": "The image ID of an image that was deleted" + } + }, + "x-go-name": "DeleteResponse" + }, + "ServiceCreateResponse": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the created service.", + "nullable": false, + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl" + }, + "Warnings": { + "type": "array", + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "nullable": true, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ], + "items": { + "type": "string" + } + } + }, + "description": "contains the information returned to a client on the\ncreation of a new service.\n" + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "description": "Optional warning messages", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of this container", + "x-go-name": "ID" + }, + "Names": { + "type": "array", + "description": "The names that this container has been given", + "items": { + "type": "string" + } + }, + "Image": { + "type": "string", + "description": "The name of the image used when creating this container" + }, + "ImageID": { + "type": "string", + "description": "The ID of the image that this container was created from" + }, + "Command": { + "type": "string", + "description": "Command to run when starting the container" + }, + "Created": { + "type": "integer", + "description": "When the container was created", + "format": "int64" + }, + "Ports": { + "type": "array", + "description": "The ports exposed by this container", + "items": { + "$ref": "#/components/schemas/Port" + } + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container", + "format": "int64" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "State": { + "type": "string", + "description": "The state of this container (e.g. `Exited`)" + }, + "Status": { + "type": "string", + "description": "Additional human-readable status of this container (e.g. `Exit 0`)" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "description": "A summary of the container's network settings" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + } + } + }, + "Driver": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver.", + "nullable": false, + "example": "some-driver" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key/value map of driver-specific options.", + "nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + }, + "description": "Driver represents a driver (network, logging, secrets)." + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the secret." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "example": "" + }, + "Driver": { + "$ref": "#/components/schemas/Driver" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the config." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\nconfig data.\n" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "example": "running", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + }, + "Running": { + "type": "boolean", + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "example": true + }, + "Paused": { + "type": "boolean", + "description": "Whether this container is paused.", + "example": false + }, + "Restarting": { + "type": "boolean", + "description": "Whether this container is restarting.", + "example": false + }, + "OOMKilled": { + "type": "boolean", + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "type": "integer", + "description": "The process ID of this container", + "example": 1234 + }, + "ExitCode": { + "type": "integer", + "description": "The last exit code of this container", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "description": "The time when this container was last started.", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "type": "string", + "description": "The time when this container last exited.", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "nullable": true, + "x-nullable": true + }, + "ContainerCreateResponse": { + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created container", + "nullable": false, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "type": "array", + "description": "Warnings encountered when creating the container", + "nullable": false, + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerCreate operation", + "x-go-name": "CreateResponse" + }, + "ContainerWaitResponse": { + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "type": "object", + "properties": { + "StatusCode": { + "type": "integer", + "description": "Exit code of the container", + "format": "int64", + "nullable": false + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + }, + "description": "OK response to ContainerWait operation", + "x-go-name": "WaitResponse" + }, + "ContainerWaitExitError": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Details of an error" + } + }, + "description": "container waiting error, if any", + "x-go-name": "WaitExitError" + }, + "SystemVersion": { + "type": "object", + "properties": { + "Platform": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "required": [ + "Name", + "Version" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the component\n", + "example": "Engine" + }, + "Version": { + "type": "string", + "description": "Version of the component\n", + "nullable": false, + "example": "19.03.12" + }, + "Details": { + "type": "object", + "properties": {}, + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "nullable": true + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Version": { + "type": "string", + "description": "The version of the daemon", + "example": "19.03.12" + }, + "ApiVersion": { + "type": "string", + "description": "The default (and highest) API version that is supported by the daemon\n", + "example": "1.40" + }, + "MinAPIVersion": { + "type": "string", + "description": "The minimum API version that is supported by the daemon\n", + "example": "1.12" + }, + "GitCommit": { + "type": "string", + "description": "The Git commit of the source code that was used to build the daemon\n", + "example": "48a66213fe" + }, + "GoVersion": { + "type": "string", + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "example": "go1.13.14" + }, + "Os": { + "type": "string", + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "example": "linux" + }, + "Arch": { + "type": "string", + "description": "The architecture that the daemon is running on\n", + "example": "amd64" + }, + "KernelVersion": { + "type": "string", + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "example": "4.19.76-linuxkit" + }, + "Experimental": { + "type": "boolean", + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "example": true + }, + "BuildTime": { + "type": "string", + "description": "The date and time that the daemon was compiled.\n", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + }, + "description": "Response of Engine API: GET \"/version\"\n" + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "type": "integer", + "description": "Total number of containers on the host.", + "example": 14 + }, + "ContainersRunning": { + "type": "integer", + "description": "Number of containers with status `\"running\"`.\n", + "example": 3 + }, + "ContainersPaused": { + "type": "integer", + "description": "Number of containers with status `\"paused\"`.\n", + "example": 1 + }, + "ContainersStopped": { + "type": "integer", + "description": "Number of containers with status `\"stopped\"`.\n", + "example": 10 + }, + "Images": { + "type": "integer", + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "example": 508 + }, + "Driver": { + "type": "string", + "description": "Name of the storage driver in use.", + "example": "overlay2" + }, + "DriverStatus": { + "type": "array", + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "DockerRootDir": { + "type": "string", + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "type": "boolean", + "description": "Indicates if the host has memory limit support enabled.", + "example": true + }, + "SwapLimit": { + "type": "boolean", + "description": "Indicates if the host has memory swap limit support enabled.", + "example": true + }, + "KernelMemoryTCP": { + "type": "boolean", + "description": "Indicates if the host has kernel memory TCP limit support enabled. This\nfield is omitted if not supported.\n\nKernel memory TCP limits are not supported when using cgroups v2, which\ndoes not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup.\n", + "example": true + }, + "CpuCfsPeriod": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "example": true + }, + "CpuCfsQuota": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "example": true + }, + "CPUShares": { + "type": "boolean", + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "example": true + }, + "CPUSet": { + "type": "boolean", + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "example": true + }, + "PidsLimit": { + "type": "boolean", + "description": "Indicates if the host kernel has PID limit support enabled.", + "example": true + }, + "OomKillDisable": { + "type": "boolean", + "description": "Indicates if OOM killer disable is supported on the host." + }, + "IPv4Forwarding": { + "type": "boolean", + "description": "Indicates IPv4 forwarding is enabled.", + "example": true + }, + "BridgeNfIptables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "example": true + }, + "BridgeNfIp6tables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "example": true + }, + "Debug": { + "type": "boolean", + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "example": true + }, + "NFd": { + "type": "integer", + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 64 + }, + "NGoroutines": { + "type": "integer", + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 174 + }, + "SystemTime": { + "type": "string", + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "type": "string", + "description": "The logging driver to use as a default for new containers.\n" + }, + "CgroupDriver": { + "type": "string", + "description": "The driver to use for managing cgroups.\n", + "example": "cgroupfs", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd", + "none" + ] + }, + "CgroupVersion": { + "type": "string", + "description": "The version of the cgroup.\n", + "example": "1", + "default": "1", + "enum": [ + "1", + "2" + ] + }, + "NEventsListener": { + "type": "integer", + "description": "Number of event listeners subscribed.", + "example": 30 + }, + "KernelVersion": { + "type": "string", + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "example": "4.9.38-moby" + }, + "OperatingSystem": { + "type": "string", + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "example": "Alpine Linux v3.5" + }, + "OSVersion": { + "type": "string", + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "example": "16.04" + }, + "OSType": { + "type": "string", + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "example": "linux" + }, + "Architecture": { + "type": "string", + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "example": "x86_64" + }, + "NCPU": { + "type": "integer", + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "example": 4 + }, + "MemTotal": { + "type": "integer", + "description": "Total amount of physical memory available on the host, in bytes.\n", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "type": "string", + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "example": "https://index.docker.io/v1/", + "default": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "type": "string", + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "type": "string", + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "type": "string", + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "*.local, 169.254/16" + }, + "Name": { + "type": "string", + "description": "Hostname of the host.", + "example": "node5.corp.example.com" + }, + "Labels": { + "type": "array", + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "example": [ + "storage=ssd", + "production" + ], + "items": { + "type": "string" + } + }, + "ExperimentalBuild": { + "type": "boolean", + "description": "Indicates if experimental features are enabled on the daemon.\n", + "example": true + }, + "ServerVersion": { + "type": "string", + "description": "Version string of the daemon.\n", + "example": "24.0.2" + }, + "Runtimes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "type": "string", + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "example": "runc", + "default": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "type": "boolean", + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "example": false, + "default": false + }, + "Isolation": { + "type": "string", + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "InitBinary": { + "type": "string", + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "type": "array", + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ], + "items": { + "type": "string" + } + }, + "ProductLicense": { + "type": "string", + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "type": "array", + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "items": { + "type": "object", + "properties": { + "Base": { + "type": "string", + "description": "The network address in CIDR format", + "example": "10.10.0.0/16" + }, + "Size": { + "type": "integer", + "description": "The network pool size", + "example": 24 + } + } + } + }, + "Warnings": { + "type": "array", + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "example": [ + "WARNING: No memory limit support", + "WARNING: bridge-nf-call-iptables is disabled", + "WARNING: bridge-nf-call-ip6tables is disabled" + ], + "items": { + "type": "string" + } + }, + "CDISpecDirs": { + "type": "array", + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "example": [ + "/etc/cdi", + "/var/run/cdi" + ], + "items": { + "type": "string" + } + } + } + }, + "PluginsInfo": { + "type": "object", + "properties": { + "Volume": { + "type": "array", + "description": "Names of available volume-drivers, and network-driver plugins.", + "example": [ + "local" + ], + "items": { + "type": "string" + } + }, + "Network": { + "type": "array", + "description": "Names of available network-drivers, and network-driver plugins.", + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ], + "items": { + "type": "string" + } + }, + "Authorization": { + "type": "array", + "description": "Names of available authorization plugins.", + "example": [ + "img-authz-plugin", + "hbm" + ], + "items": { + "type": "string" + } + }, + "Log": { + "type": "array", + "description": "Names of available logging-drivers, and logging-driver plugins.", + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ], + "items": { + "type": "string" + } + } + }, + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n" + }, + "RegistryServiceConfig": { + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "type": "array", + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "AllowNondistributableArtifactsHostnames": { + "type": "array", + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `[:]` or `[:]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ], + "items": { + "type": "string" + } + }, + "InsecureRegistryCIDRs": { + "type": "array", + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "type": "array", + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ], + "items": { + "type": "string" + } + } + }, + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "nullable": true, + "x-nullable": true + }, + "IndexInfo": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the registry, such as \"docker.io\".\n", + "example": "docker.io" + }, + "Mirrors": { + "type": "array", + "description": "List of mirrors, expressed as URIs.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ], + "items": { + "type": "string" + } + }, + "Secure": { + "type": "boolean", + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "example": true + }, + "Official": { + "type": "boolean", + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "example": true + } + }, + "description": "IndexInfo contains information about a registry.", + "nullable": true, + "x-nullable": true + }, + "Runtime": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "type": "array", + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "items": { + "type": "string" + } + }, + "status": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "nullable": true, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + } + } + }, + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n" + }, + "Commit": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Actual commit ID of external tool.", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + }, + "Expected": { + "type": "string", + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + } + }, + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n" + }, + "SwarmInfo": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm.", + "example": "k67qz4598weg5unwwffg6z1m1", + "default": "" + }, + "NodeAddr": { + "type": "string", + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "example": "10.0.0.46", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "example": true, + "default": false + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "type": "array", + "description": "List of ID's and addresses of other managers in the swarm.\n", + "nullable": true, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "items": { + "$ref": "#/components/schemas/PeerNode" + } + }, + "Nodes": { + "type": "integer", + "description": "Total number of nodes in the swarm.", + "nullable": true, + "example": 4 + }, + "Managers": { + "type": "integer", + "description": "Total number of managers in the swarm.", + "nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + }, + "description": "Represents generic information about swarm.\n" + }, + "LocalNodeState": { + "type": "string", + "description": "Current local status of this node.", + "example": "active", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ] + }, + "PeerNode": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm." + }, + "Addr": { + "type": "string", + "description": "IP address and ports at which this node can be reached.\n" + } + }, + "description": "Represents a peer-node in the swarm" + }, + "NetworkAttachmentConfig": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "The target network for attachment. Must be a network name or ID.\n" + }, + "Aliases": { + "type": "array", + "description": "Discoverable alternate names for the service on this network.\n", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver attachment options for the network target.\n" + } + }, + "description": "Specifies how a service should be attached to a particular network.\n" + }, + "EventActor": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the object emitting the event", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Various key/value attributes of the object, depending on its type.\n", + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + }, + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n" + }, + "EventMessage": { + "title": "SystemEventsResponse", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The type of object emitting the event", + "example": "container", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ] + }, + "Action": { + "type": "string", + "description": "The type of event", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "type": "string", + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "type": "integer", + "description": "Timestamp of event", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "type": "integer", + "description": "Timestamp of event, with nanosecond accuracy", + "format": "int64", + "example": 1629574695515050000 + } + }, + "description": "EventMessage represents the information an event contains.\n" + }, + "OCIDescriptor": { + "type": "object", + "properties": { + "mediaType": { + "type": "string", + "description": "The media type of the object this schema refers to.\n", + "example": "application/vnd.docker.distribution.manifest.v2+json" + }, + "digest": { + "type": "string", + "description": "The digest of the targeted content.\n", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "type": "integer", + "description": "The size in bytes of the blob.\n", + "format": "int64", + "example": 3987495 + } + }, + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "x-go-name": "Descriptor" + }, + "OCIPlatform": { + "type": "object", + "properties": { + "architecture": { + "type": "string", + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "example": "arm" + }, + "os": { + "type": "string", + "description": "The operating system, for example `linux` or `windows`.\n", + "example": "windows" + }, + "os.version": { + "type": "string", + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "example": "10.0.19041.1165" + }, + "os.features": { + "type": "array", + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "example": [ + "win32k" + ], + "items": { + "type": "string" + } + }, + "variant": { + "type": "string", + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "example": "v7" + } + }, + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "x-go-name": "Platform" + }, + "DistributionInspect": { + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "type": "object", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + }, + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "x-go-name": "DistributionInspect" + }, + "ClusterVolume": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "properties": { + "CapacityBytes": { + "type": "integer", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n", + "format": "int64" + }, + "VolumeContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n" + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Information about the global status of the volume.\n" + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n" + } + } + } + } + }, + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n" + }, + "ClusterVolumeSpec": { + "type": "object", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "nullable": false, + "default": "single", + "enum": [ + "single", + "multi" + ] + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "nullable": false, + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ] + }, + "MountVolume": { + "type": "object", + "properties": {}, + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + }, + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n" + } + }, + "AccessibilityRequirements": { + "type": "object", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n" + }, + "CapacityRange": { + "type": "object", + "properties": { + "RequiredBytes": { + "type": "integer", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n", + "format": "int64" + }, + "LimitBytes": { + "type": "integer", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n", + "format": "int64" + } + }, + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n" + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "nullable": false, + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "description": "Defines how the volume is used by tasks.\n" + } + }, + "description": "Cluster-specific options used to create the volume.\n" + }, + "Topology": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n" + } + } + } +} diff --git a/app/vendor/beluga-php/docker-php-api/spec/v1.45.json b/app/vendor/beluga-php/docker-php-api/spec/v1.45.json new file mode 100644 index 000000000..b896416ae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/spec/v1.45.json @@ -0,0 +1,16806 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Docker Engine API", + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.45) is used.\nFor example, calling `/info` is the same as calling `/v1.45/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"email\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n", + "version": "1.45", + "x-logo": { + "url": "https://docs.docker.com/assets/images/logo-docker-main.png" + } + }, + "servers": [ + { + "url": "/v1.45" + } + ], + "tags": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "x-displayName": "Networks" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "x-displayName": "Volumes" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "x-displayName": "Exec" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "x-displayName": "Swarm" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "x-displayName": "Nodes" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Services" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "x-displayName": "Tasks" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "x-displayName": "Secrets" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "example": [ + { + "Id": "8dfafdbc3a40", + "Names": [ + "/boring_feynman" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 1", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + }, + { + "Id": "9cd87474be90", + "Names": [ + "/coolName" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 222222", + "Created": 1367854155, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:08" + } + } + }, + "Mounts": [] + }, + { + "Id": "3176a2479c92", + "Names": [ + "/sleepy_dog" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:06" + } + } + }, + "Mounts": [] + }, + { + "Id": "4cb07b47f9fb", + "Names": [ + "/running_cat" + ], + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "State": "Exited", + "Status": "Exit 0", + "Ports": [], + "Labels": {}, + "SizeRw": 12288, + "SizeRootFs": 0, + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:05" + } + } + }, + "Mounts": [] + } + ] + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/create": { + "post": { + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$", + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Container to create", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/containers/{id}/json": { + "get": { + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerInspectResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the container" + }, + "Created": { + "type": "string", + "description": "The time the container was created" + }, + "Path": { + "type": "string", + "description": "The path to the command being run" + }, + "Args": { + "type": "array", + "description": "The arguments to the command being run", + "items": { + "type": "string" + } + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "type": "string", + "description": "The container's image ID" + }, + "ResolvConfPath": { + "type": "string" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "Driver": { + "type": "string" + }, + "Platform": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "AppArmorProfile": { + "type": "string" + }, + "ExecIDs": { + "type": "array", + "description": "IDs of exec instances that are running in the container.", + "nullable": true, + "items": { + "type": "string" + } + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this\ncontainer.\n", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container.", + "format": "int64" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "example": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "exit 0" + ] + }, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "StopSignal": "SIGTERM", + "StopTimeout": 10 + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "overlay2", + "ExecIDs": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "HostConfig": { + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuPercent": 80, + "CpuShares": 0, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "Devices": [], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "IpcMode": "", + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "OomKillDisable": false, + "OomScoreAdj": 500, + "NetworkMode": "bridge", + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Type": "json-file" + }, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "SandboxKey": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "MacAddress": "", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2019-12-22T10:59:05.6385933Z", + "End": "2019-12-22T10:59:05.8078452Z", + "ExitCode": 0, + "Output": "" + } + ] + }, + "OOMKilled": false, + "Dead": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + }, + "Mounts": [ + { + "Name": "fac362...80535", + "Source": "/data", + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "RW": false, + "Propagation": "" + } + ] + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ], + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + }, + "text/plain": { + "schema": { + "title": "ContainerTopResponse", + "type": "object", + "properties": { + "Titles": { + "type": "array", + "description": "The ps column titles", + "items": { + "type": "string" + } + }, + "Processes": { + "type": "array", + "description": "Each process running in the container, where each is process\nis an array of values corresponding to the titles.\n", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "OK response to ContainerTop operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "operationId": "ContainerChanges", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "example": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "tags": [ + "Container" + ], + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache`\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "example": { + "read": "2015-01-08T22:57:31.547920715Z", + "pids_stats": { + "current": 3 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "memory_stats": { + "stats": { + "total_pgmajfault": 0, + "cache": 0, + "mapped_file": 0, + "total_inactive_file": 0, + "pgpgout": 414, + "rss": 6537216, + "total_mapped_file": 0, + "writeback": 0, + "unevictable": 0, + "pgpgin": 477, + "total_unevictable": 0, + "pgmajfault": 0, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_writeback": 0, + "total_inactive_anon": 0, + "rss_huge": 6291456, + "hierarchical_memory_limit": 67108864, + "total_pgfault": 964, + "total_active_file": 0, + "active_anon": 6537216, + "total_active_anon": 6537216, + "total_pgpgout": 414, + "total_cache": 0, + "inactive_anon": 0, + "active_file": 0, + "pgfault": 964, + "inactive_file": 0, + "total_pgpgin": 477 + }, + "max_usage": 6651904, + "usage": 6537216, + "failcnt": 0, + "limit": 67108864 + }, + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100215355, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 739306590000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "usage_in_usermode": 50000000, + "total_usage": 100093996, + "usage_in_kernelmode": 30000000 + }, + "system_cpu_usage": 9492140000000, + "online_cpus": 4, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already started", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "304": { + "description": "container already stopped", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "tags": [ + "Container" + ], + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/update": { + "post": { + "tags": [ + "Container" + ], + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "title": "ContainerUpdateResponse", + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerUpdate operation" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "update" + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "New name for the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\nand the stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/attach/ws": { + "get": { + "tags": [ + "Container" + ], + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking", + "content": {} + }, + "200": { + "description": "no error, no upgrade header found", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "default": "not-running", + "enum": [ + "not-running", + "next-exit", + "removed" + ] + } + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.\n`path` parameter is asserted to be a directory. If it exists as a file, 400 error\nwill be returned with message \"not a directory\".\n", + "operationId": "PutContainerArchive", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The content was extracted successfully", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "not a directory" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + }, + "head": { + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the container", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "description": "Resource in the container’s filesystem to archive.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + }, + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/containers/prune": { + "post": { + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ContainerPruneResponse", + "type": "object", + "properties": { + "ContainersDeleted": { + "type": "array", + "description": "Container IDs that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/build": { + "post": { + "tags": [ + "Image" + ], + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "default": "application/x-tar", + "enum": [ + "application/x-tar" + ] + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration", + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n", + "schema": { + "type": "string", + "default": "1", + "enum": [ + "1", + "2" + ] + } + } + ], + "requestBody": { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputStream" + } + }, + "/build/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "keep-storage", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "BuildPruneResponse", + "type": "object", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "type": "string", + "description": "ID of build cache object" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/create": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create an image", + "description": "Pull or import an image.", + "operationId": "ImageCreate", + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "inputImage" + } + }, + "/images/{name}/json": { + "get": { + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "HistoryResponseItem", + "required": [ + "Comment", + "Created", + "CreatedBy", + "Id", + "Size", + "Tags" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + }, + "description": "individual image layer information in response to ImageHistory operation", + "x-go-name": "HistoryResponseItem" + } + }, + "example": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "tags": [ + "Image" + ], + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The tag to associate with the image on the registry.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "tags": [ + "Image" + ], + "summary": "Tag an image", + "description": "Tag an image so that it becomes part of a repository.", + "operationId": "ImageTag", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "No error", + "content": {} + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}": { + "delete": { + "tags": [ + "Image" + ], + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "example": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/search": { + "get": { + "tags": [ + "Image" + ], + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "title": "ImageSearchResponseItem", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "type": "boolean", + "description": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "example": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/prune": { + "post": { + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ImagePruneResponse", + "type": "object", + "properties": { + "ImagesDeleted": { + "type": "array", + "description": "Images that were deleted", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/auth": { + "post": { + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "requestBody": { + "description": "Authentication to check", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "The status of the authentication", + "nullable": false + }, + "IdentityToken": { + "type": "string", + "description": "An opaque token used to authenticate a user after a successful login", + "nullable": false + } + } + }, + "example": { + "Status": "Login Succeeded", + "IdentityToken": "9cbaf023786cd7..." + } + } + } + }, + "204": { + "description": "No error", + "content": {} + }, + "401": { + "description": "Auth error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "authConfig" + } + }, + "/info": { + "get": { + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/version": { + "get": { + "tags": [ + "System" + ], + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/_ping": { + "get": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder\n\nThe default on Linux is version \"2\" (BuildKit), but the daemon\ncan be configured to recommend version \"1\" (classic Builder).\nWindows does not yet support BuildKit for native Windows images,\nand uses \"1\" (classic builder) as a default.\n\nThis value is a recommendation as advertised by the daemon, and\nit is up to the client to choose which builder to use.\n", + "schema": { + "type": "string", + "default": "2" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "head": { + "tags": [ + "System" + ], + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "default": "inactive", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ] + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + }, + "API-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/commit": { + "post": { + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The container configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "containerConfig" + } + }, + "/events": { + "get": { + "tags": [ + "System" + ], + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/system/df": { + "get": { + "tags": [ + "System" + ], + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + }, + "text/plain": { + "schema": { + "title": "SystemDataUsageResponse", + "type": "object", + "properties": { + "LayersSize": { + "type": "integer", + "format": "int64" + }, + "Images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + }, + "Containers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "BuildCache": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildCache" + } + } + }, + "example": { + "LayersSize": 1092588, + "Images": [ + { + "Id": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "ParentId": "", + "RepoTags": [ + "busybox:latest" + ], + "RepoDigests": [ + "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" + ], + "Created": 1466724217, + "Size": 1092588, + "SharedSize": 0, + "Labels": {}, + "Containers": 1 + } + ], + "Containers": [ + { + "Id": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148", + "Names": [ + "/top" + ], + "Image": "busybox", + "ImageID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749", + "Command": "top", + "Created": 1472592424, + "Ports": [], + "SizeRootFs": 1092588, + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 56 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92", + "EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a", + "Gateway": "172.18.0.1", + "IPAddress": "172.18.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + }, + "Mounts": [] + } + ], + "Volumes": [ + { + "Name": "my-volume", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", + "Scope": "local", + "UsageData": { + "Size": 10920104, + "RefCount": 2 + } + } + ], + "BuildCache": [ + { + "ID": "hw53o5aio51xtltp5xjp8v7fx", + "Parents": [], + "Type": "regular", + "Description": "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0", + "InUse": false, + "Shared": true, + "Size": 0, + "CreatedAt": "2021-06-28T13:31:01.474619385Z", + "LastUsedAt": "2021-07-07T22:02:32.738075951Z", + "UsageCount": 26 + }, + { + "ID": "ndlpt0hhvkqcdfkputsk4cq9c", + "Parents": [ + "ndlpt0hhvkqcdfkputsk4cq9c" + ], + "Type": "regular", + "Description": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache", + "InUse": false, + "Shared": true, + "Size": 51, + "CreatedAt": "2021-06-28T13:31:03.002625487Z", + "LastUsedAt": "2021-07-07T22:02:32.773909517Z", + "UsageCount": 26 + } + ] + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/get": { + "get": { + "tags": [ + "Image" + ], + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/images/load": { + "post": { + "tags": [ + "Image" + ], + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "description": "Tar archive containing images", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "imagesTarball" + } + }, + "/containers/{id}/exec": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Exec configuration", + "content": { + "application/json": { + "schema": { + "title": "ExecConfig", + "type": "object", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execConfig" + } + }, + "/exec/{id}/start": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ExecStartConfig", + "type": "object", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command." + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + } + }, + "example": { + "Detach": false, + "Tty": true, + "ConsoleSize": [ + 80, + 64 + ] + } + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "execStartConfig" + } + }, + "/exec/{id}/resize": { + "post": { + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "ExecInspectResponse", + "type": "object", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "example": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes": { + "get": { + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/create": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "requestBody": { + "description": "Volume configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateOptions" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "volumeConfig" + } + }, + "/volumes/{name}": { + "get": { + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Volume" + ], + "summary": "\"Update a volume. Valid only for Swarm cluster volumes\"\n", + "operationId": "VolumeUpdate", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + }, + "delete": { + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Volume name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "204": { + "description": "The volume was removed", + "content": {} + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/volumes/prune": { + "post": { + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "VolumePruneResponse", + "type": "object", + "properties": { + "VolumesDeleted": { + "type": "array", + "description": "Volumes that were deleted", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "type": "integer", + "description": "Disk space reclaimed in bytes", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks": { + "get": { + "tags": [ + "Network" + ], + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Network" + } + }, + "example": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/{id}": { + "get": { + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/networks/create": { + "post": { + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "requestBody": { + "description": "Network configuration", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The network's name." + }, + "CheckDuplicate": { + "type": "boolean", + "description": "Deprecated: CheckDuplicate is now always enabled.\n" + }, + "Driver": { + "type": "string", + "description": "Name of the network driver plugin to use.", + "default": "bridge" + }, + "Internal": { + "type": "boolean", + "description": "Restrict external access to the network." + }, + "Attachable": { + "type": "boolean", + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n" + }, + "Ingress": { + "type": "boolean", + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "EnableIPv6": { + "type": "boolean", + "description": "Enable IPv6 on the network." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Network specific options to be used by the drivers." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + } + }, + "example": { + "Name": "isolated_nw", + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.20.0.0/16", + "IPRange": "172.20.10.0/24", + "Gateway": "172.20.10.11" + }, + { + "Subnet": "2001:db8:abcd::/64", + "Gateway": "2001:db8:abcd::1011" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": true, + "Attachable": false, + "Ingress": false, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkCreateResponse", + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created network." + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden operation. This happens when trying to create a network named after a pre-defined network,\nor when trying to create an overlay network on a daemon which is not part of a Swarm cluster.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "networkConfig" + } + }, + "/networks/{id}/connect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "description": "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container", + "operationId": "NetworkConnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkConnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network." + }, + "EndpointConfig": { + "$ref": "#/components/schemas/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + }, + "MacAddress": "02:42:ac:12:05:02" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Operation forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/{id}/disconnect": { + "post": { + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "NetworkDisconnectRequest", + "type": "object", + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.\n" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.\n" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "No error", + "content": {} + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "container" + } + }, + "/networks/prune": { + "post": { + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "title": "NetworkPruneResponse", + "type": "object", + "properties": { + "NetworksDeleted": { + "type": "array", + "description": "Networks that were deleted", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "description": "Returns information about installed plugins.", + "operationId": "PluginList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/privileges": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/pull": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "operationId": "PluginPull", + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/{name}/json": { + "get": { + "tags": [ + "Plugin" + ], + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ], + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/plugins/create": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Path to tar containing plugin rootfs and manifest", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "tarContext" + } + }, + "/plugins/{name}/push": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "description": "Push a plugin to the registry.\n", + "operationId": "PluginPush", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + "DEBUG=1" + ], + "items": { + "type": "string" + } + } + } + }, + "required": false + }, + "responses": { + "204": { + "description": "No error", + "content": {} + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/nodes": { + "get": { + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/init": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmInitRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "format": "uint32" + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "items": { + "type": "string", + "example": "" + } + }, + "ForceNewCluster": { + "type": "boolean", + "description": "Force creation of a new swarm." + }, + "SubnetSize": { + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "type": "string", + "description": "The node ID", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "title": "SwarmJoinRequest", + "type": "object", + "properties": { + "ListenAddr": { + "type": "string", + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP).\n" + }, + "AdvertiseAddr": { + "type": "string", + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n" + }, + "DataPathAddr": { + "type": "string", + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n" + }, + "RemoteAddrs": { + "type": "array", + "description": "Addresses of manager nodes already participating in the swarm.\n", + "items": { + "type": "string" + } + }, + "JoinToken": { + "type": "string", + "description": "Secret token for joining this swarm." + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "name": "force", + "in": "query", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/swarm/unlockkey": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "title": "UnlockKeyResponse", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/swarm/unlock": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "SwarmUnlockRequest", + "type": "object", + "properties": { + "UnlockKey": { + "type": "string", + "description": "The swarm's unlock key." + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/create": { + "post": { + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ] + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "default": "spec", + "enum": [ + "spec", + "previous-spec" + ] + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ] + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/services/{id}/logs": { + "get": { + "tags": [ + "Service" + ], + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of the service", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such service: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks": { + "get": { + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ], + "items": { + "$ref": "#/components/schemas/Task" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "tags": [ + "Task" + ], + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "example": { + "message": "No such task: c2ada9df5af8" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets": { + "get": { + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ], + "items": { + "$ref": "#/components/schemas/Secret" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/create": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/secrets/{id}": { + "get": { + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the secret", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs": { + "get": { + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=`\n- `names=`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ], + "items": { + "$ref": "#/components/schemas/Config" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/create": { + "post": { + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + }, + "required": false + }, + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/configs/{id}": { + "get": { + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "example": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "no error", + "content": {} + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "required": false + }, + "responses": { + "200": { + "description": "no error", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "x-codegen-request-body-name": "body" + } + }, + "/distribution/{name}/json": { + "get": { + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "No such image: someimage (tag: latest)" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/session": { + "post": { + "tags": [ + "Session" + ], + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful", + "content": {} + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Port": { + "required": [ + "PrivatePort", + "Type" + ], + "type": "object", + "properties": { + "IP": { + "type": "string", + "description": "Host IP address that the container's port is mapped to", + "format": "ip-address" + }, + "PrivatePort": { + "type": "integer", + "description": "Port on the container", + "format": "uint16", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "description": "Port exposed on the host", + "format": "uint16" + }, + "Type": { + "type": "string", + "nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "description": "An open port on a container", + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountPoint": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `volume` a docker volume with the given `Name`.\n- `tmpfs` a `tmpfs`.\n- `npipe` a named pipe from the host into the container.\n- `cluster` a Swarm cluster volume\n", + "example": "volume", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "Name": { + "type": "string", + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "example": "myvolume" + }, + "Source": { + "type": "string", + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "type": "string", + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "type": "string", + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "example": "local" + }, + "Mode": { + "type": "string", + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "example": "z" + }, + "RW": { + "type": "boolean", + "description": "Whether the mount is mounted writable (read-write).\n", + "example": true + }, + "Propagation": { + "type": "string", + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "example": "" + } + }, + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n" + }, + "DeviceMapping": { + "type": "object", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "description": "A device mapping between the host and container", + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "items": { + "type": "string" + } + }, + "Capabilities": { + "type": "array", + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n", + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n" + } + }, + "description": "A request for devices to be sent to device drivers" + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Device path" + }, + "Rate": { + "minimum": 0, + "type": "integer", + "description": "Rate", + "format": "int64" + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "Container path." + }, + "Source": { + "type": "string", + "description": "Mount source (e.g. a volume name, a host path)." + }, + "Type": { + "type": "string", + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n", + "enum": [ + "bind", + "volume", + "tmpfs", + "npipe", + "cluster" + ] + }, + "ReadOnly": { + "type": "boolean", + "description": "Whether the mount should be read-only." + }, + "Consistency": { + "type": "string", + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + }, + "BindOptions": { + "type": "object", + "properties": { + "Propagation": { + "type": "string", + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "type": "boolean", + "description": "Disable recursive bind mount.", + "default": false + }, + "CreateMountpoint": { + "type": "boolean", + "description": "Create mount point on host if missing", + "default": false + }, + "ReadOnlyNonRecursive": { + "type": "boolean", + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAddded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "default": false + }, + "ReadOnlyForceRecursive": { + "type": "boolean", + "description": "Raise an error if the mount cannot be made recursively read-only.", + "default": false + } + }, + "description": "Optional configuration for the `bind` type." + }, + "VolumeOptions": { + "type": "object", + "properties": { + "NoCopy": { + "type": "boolean", + "description": "Populate volume with data from the target.", + "default": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "DriverConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver to use to create the volume." + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "key/value map of driver specific options." + } + }, + "description": "Map of driver specific options" + }, + "Subpath": { + "type": "string", + "description": "Source path inside the volume. Must be relative without any back traversals.", + "example": "dir-inside-volume/subdirectory" + } + }, + "description": "Optional configuration for the `volume` type." + }, + "TmpfsOptions": { + "type": "object", + "properties": { + "SizeBytes": { + "type": "integer", + "description": "The size for the tmpfs mount in bytes.", + "format": "int64" + }, + "Mode": { + "type": "integer", + "description": "The permission mode for the tmpfs mount in an integer." + } + }, + "description": "Optional configuration for the `tmpfs` type." + } + } + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + }, + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n" + }, + "Resources": { + "type": "object", + "properties": { + "CpuShares": { + "type": "integer", + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n" + }, + "Memory": { + "type": "integer", + "description": "Memory limit in bytes.", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "type": "string", + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n" + }, + "BlkioWeight": { + "maximum": 1000, + "minimum": 0, + "type": "integer", + "description": "Block IO weight (relative weight)." + }, + "BlkioWeightDevice": { + "type": "array", + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "minimum": 0, + "type": "integer" + } + } + } + }, + "BlkioDeviceReadBps": { + "type": "array", + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "type": "array", + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "type": "array", + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "type": "array", + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "format": "int64" + }, + "CpuQuota": { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "format": "int64" + }, + "CpuRealtimePeriod": { + "type": "integer", + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "type": "integer", + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "format": "int64" + }, + "CpusetCpus": { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "example": "0-3" + }, + "CpusetMems": { + "type": "string", + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n" + }, + "Devices": { + "type": "array", + "description": "A list of devices to add to the container.", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "type": "array", + "description": "a list of cgroup rules to apply to the container", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "type": "array", + "description": "A list of requests for devices to be sent to device drivers.\n", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "KernelMemoryTCP": { + "type": "integer", + "description": "Hard limit for kernel TCP buffer memory (in bytes). Depending on the\nOCI runtime in use, this option may be ignored. It is no longer supported\nby the default (runc) runtime.\n\nThis field is omitted when empty.\n", + "format": "int64" + }, + "MemoryReservation": { + "type": "integer", + "description": "Memory soft limit in bytes.", + "format": "int64" + }, + "MemorySwap": { + "type": "integer", + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "format": "int64" + }, + "MemorySwappiness": { + "maximum": 100, + "minimum": 0, + "type": "integer", + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "format": "int64" + }, + "NanoCpus": { + "type": "integer", + "description": "CPU quota in units of 10-9 CPUs.", + "format": "int64" + }, + "OomKillDisable": { + "type": "boolean", + "description": "Disable OOM Killer for the container." + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "PidsLimit": { + "type": "integer", + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + }, + "CpuCount": { + "type": "integer", + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "CpuPercent": { + "type": "integer", + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "format": "int64" + }, + "IOMaximumIOps": { + "type": "integer", + "description": "Maximum IOps for the container system drive (Windows only)", + "format": "int64" + }, + "IOMaximumBandwidth": { + "type": "integer", + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "format": "int64" + } + }, + "description": "A container's resources (cgroups config, ulimits, etc)" + }, + "Limit": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "type": "integer", + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "format": "int64", + "example": 100, + "default": 0 + } + }, + "description": "An object describing a limit on resources which can be requested by a task.\n" + }, + "ResourceObject": { + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + }, + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n" + }, + "GenericResources": { + "type": "array", + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "HealthConfig": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Timeout": { + "type": "integer", + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "Retries": { + "type": "integer", + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n" + }, + "StartPeriod": { + "type": "integer", + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + }, + "StartInterval": { + "type": "integer", + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "format": "int64" + } + }, + "description": "A test to perform to check that the container is healthy." + }, + "Health": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "example": "healthy", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ] + }, + "FailingStreak": { + "type": "integer", + "description": "FailingStreak is the number of consecutive failures", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "description": "Health stores information about the container's healthcheck results.\n", + "nullable": true, + "x-nullable": true + }, + "HealthcheckResult": { + "type": "object", + "properties": { + "Start": { + "type": "string", + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "type": "string", + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "type": "integer", + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "example": 0 + }, + "Output": { + "type": "string", + "description": "Output from last check" + } + }, + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "nullable": true, + "x-nullable": true + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written" + }, + "LogConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "The logging configuration for this container" + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to the container.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "nullable": true, + "items": { + "minimum": 0, + "type": "integer" + } + }, + "Annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n" + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n", + "enum": [ + "private", + "host" + ] + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n" + }, + "Tmpfs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n" + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "minimum": 0, + "type": "integer", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "format": "int64" + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A list of kernel parameters (sysctls) to set in the container.\nFor example:\n\n```\n{\"net.ipv4.ip_forward\": \"1\"}\n```\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + } + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + } + } + } + } + ] + }, + "ContainerConfig": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "example": "439f4e91bd1d" + }, + "Domainname": { + "type": "string", + "description": "The domain name to use for the container.\n" + }, + "User": { + "type": "string", + "description": "The user that commands are run as inside the container." + }, + "AttachStdin": { + "type": "boolean", + "description": "Whether to attach to `stdin`.", + "default": false + }, + "AttachStdout": { + "type": "boolean", + "description": "Whether to attach to `stdout`.", + "default": true + }, + "AttachStderr": { + "type": "boolean", + "description": "Whether to attach to `stderr`.", + "default": true + }, + "ExposedPorts": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "nullable": true, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "type": "boolean", + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "default": false + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`", + "default": false + }, + "StdinOnce": { + "type": "boolean", + "description": "Close `stdin` after one attached client disconnects", + "default": false + }, + "Env": { + "type": "array", + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run specified as a string or an array of strings.\n", + "example": [ + "/bin/sh" + ], + "items": { + "type": "string" + } + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "type": "boolean", + "description": "Command is already escaped (Windows only)", + "nullable": true, + "example": false, + "default": false + }, + "Image": { + "type": "string", + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "example": "example-image:1.0" + }, + "Volumes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for commands to run in.", + "example": "/public/" + }, + "Entrypoint": { + "type": "array", + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "example": [], + "items": { + "type": "string" + } + }, + "NetworkDisabled": { + "type": "boolean", + "description": "Disable networking for the container.", + "nullable": true + }, + "MacAddress": { + "type": "string", + "description": "MAC address of the container.\n\nDeprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead.\n", + "nullable": true + }, + "OnBuild": { + "type": "array", + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "nullable": true, + "example": [], + "items": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop a container as a string or unsigned integer.\n", + "nullable": true, + "example": "SIGTERM" + }, + "StopTimeout": { + "type": "integer", + "description": "Timeout to stop a container in seconds.", + "nullable": true + }, + "Shell": { + "type": "array", + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "nullable": true, + "example": [ + "/bin/sh", + "-c" + ], + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a container that is portable between hosts.\n\nWhen used as `ContainerConfig` field in an image, `ContainerConfig` is an\noptional field containing the configuration of the container that was last\ncommitted when creating the image.\n\nPrevious versions of Docker builder used this field to store build cache,\nand it is not in active use anymore.\n" + }, + "NetworkingConfig": { + "type": "object", + "properties": { + "EndpointsConfig": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n" + } + }, + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Bridge": { + "type": "string", + "description": "Name of the default bridge interface when dockerd's --bridge flag is set.\n", + "example": "docker0" + }, + "SandboxID": { + "type": "string", + "description": "SandboxID uniquely represents a container's network stack.", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "HairpinMode": { + "type": "boolean", + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n\nDeprecated: This field is never set and will be removed in a future release.\n", + "example": false + }, + "LinkLocalIPv6Address": { + "type": "string", + "description": "IPv6 unicast address using the link-local prefix.\n\nDeprecated: This field is never set and will be removed in a future release.\n", + "example": "" + }, + "LinkLocalIPv6PrefixLen": { + "type": "integer", + "description": "Prefix length of the IPv6 unicast address.\n\nDeprecated: This field is never set and will be removed in a future release.\n" + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "SandboxKey": { + "type": "string", + "description": "SandboxKey is the full path of the netns handle", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "description": "Deprecated: This field is never set and will be removed in a future release.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "SecondaryIPv6Addresses": { + "type": "array", + "description": "Deprecated: This field is never set and will be removed in a future release.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "EndpointID": { + "type": "string", + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 64 + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address for the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address for this network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "2001:db8:2::100" + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the container on the default \"bridge\" network.\n\n


\n\n> **Deprecated**: This field is only propagated when attached to the\n> default \"bridge\" network. Use the information from the \"bridge\"\n> network inside the `Networks` map instead, which contains the same\n> information. This field was deprecated in Docker 1.9 and is scheduled\n> to be removed in Docker 17.12.0\n", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + }, + "description": "Information about all networks that the container is connected to.\n" + } + }, + "description": "NetworkSettings exposes the network settings in the API" + }, + "Address": { + "type": "object", + "properties": { + "Addr": { + "type": "string", + "description": "IP address." + }, + "PrefixLen": { + "type": "integer", + "description": "Mask length of the IP address." + } + }, + "description": "Address represents an IPv4 or IPv6 IP address." + }, + "PortMap": { + "type": "object", + "additionalProperties": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ] + } + }, + "PortBinding": { + "type": "object", + "properties": { + "HostIp": { + "type": "string", + "description": "Host IP address that the container's port is mapped to.", + "example": "127.0.0.1" + }, + "HostPort": { + "type": "string", + "description": "Host port number that the container's port is mapped to.", + "example": "4443" + } + }, + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n" + }, + "GraphDriverData": { + "required": [ + "Data", + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the storage driver.", + "nullable": false, + "example": "overlay2" + }, + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "nullable": false, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + }, + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n" + }, + "FilesystemChange": { + "required": [ + "Kind", + "Path" + ], + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Path to file or directory that has changed.\n", + "nullable": false + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + }, + "description": "Change in the container's filesystem.\n" + }, + "ChangeType": { + "type": "integer", + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "format": "uint8", + "nullable": false, + "enum": [ + 0, + 1, + 2 + ], + "x-nullable": false + }, + "ImageInspect": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Parent": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "Comment": { + "type": "string", + "description": "Optional message that was set when committing or importing the image.\n", + "nullable": false, + "example": "" + }, + "Created": { + "type": "string", + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "format": "dateTime", + "nullable": true, + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Container": { + "type": "string", + "description": "The ID of the container that was used to create the image.\n\nDepending on how the image was created, this field may be empty.\n\n**Deprecated**: this field is kept for backward compatibility, but\nwill be removed in API v1.45.\n", + "example": "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735" + }, + "ContainerConfig": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "DockerVersion": { + "type": "string", + "description": "The version of Docker that was used to build the image.\n\nDepending on how the image was created, this field may be empty.\n", + "nullable": false, + "example": "20.10.7" + }, + "Author": { + "type": "string", + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "nullable": false, + "example": "" + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "Architecture": { + "type": "string", + "description": "Hardware CPU architecture that the image runs on.\n", + "nullable": false, + "example": "arm" + }, + "Variant": { + "type": "string", + "description": "CPU architecture variant (presently ARM-only).\n", + "nullable": true, + "example": "v7" + }, + "Os": { + "type": "string", + "description": "Operating System the image is built to run on.\n", + "nullable": false, + "example": "linux" + }, + "OsVersion": { + "type": "string", + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "nullable": true, + "example": "" + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nDeprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.\n", + "format": "int64", + "example": 1239828 + }, + "GraphDriver": { + "$ref": "#/components/schemas/GraphDriverData" + }, + "RootFS": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "layers" + }, + "Layers": { + "type": "array", + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ], + "items": { + "type": "string" + } + } + }, + "description": "Information about the image's RootFS, including the layer IDs.\n" + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "format": "dateTime", + "nullable": true, + "example": "2022-02-28T14:40:02.623929178Z" + } + }, + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n" + } + }, + "description": "Information about an image in the local image cache.\n" + }, + "ImageSummary": { + "required": [ + "Containers", + "Created", + "Id", + "Labels", + "ParentId", + "RepoDigests", + "RepoTags", + "SharedSize", + "Size" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "type": "string", + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "nullable": false, + "example": "" + }, + "RepoTags": { + "type": "array", + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "nullable": false, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "items": { + "type": "string" + } + }, + "RepoDigests": { + "type": "array", + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "nullable": false, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "items": { + "type": "string" + } + }, + "Created": { + "type": "integer", + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds sinds EPOCH).\n", + "nullable": false, + "example": 1644009612 + }, + "Size": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n", + "format": "int64", + "nullable": false, + "example": 172064416 + }, + "SharedSize": { + "type": "integer", + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "format": "int64", + "nullable": false, + "example": 1239828 + }, + "VirtualSize": { + "type": "integer", + "description": "Total size of the image including all layers it is composed of.\n\nDeprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.", + "format": "int64", + "example": 172064416 + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "type": "integer", + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\nThis size is not calculated by default, and depends on which API endpoint\nis used. `-1` indicates that the value has not been set / calculated.\n", + "nullable": false, + "example": 2 + } + }, + "x-go-name": "Summary" + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "email": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "required": [ + "Driver", + "Labels", + "Mountpoint", + "Name", + "Options", + "Scope" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "nullable": false, + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "nullable": false, + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "description": "Date/Time the volume was created.", + "format": "dateTime", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {} + }, + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "nullable": false, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "nullable": false, + "example": "local", + "default": "local", + "enum": [ + "local", + "global" + ] + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The driver specific options used when creating the volume.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "required": [ + "RefCount", + "Size" + ], + "type": "object", + "properties": { + "Size": { + "type": "integer", + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "format": "int64", + "nullable": false, + "default": -1 + }, + "RefCount": { + "type": "integer", + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "format": "int64", + "nullable": false, + "default": -1 + } + }, + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "nullable": true, + "x-go-name": "UsageData" + } + } + }, + "VolumeCreateOptions": { + "title": "VolumeConfig", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver to use.", + "nullable": false, + "example": "custom", + "default": "local" + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + }, + "description": "Volume configuration", + "x-go-name": "CreateOptions" + }, + "VolumeListResponse": { + "title": "VolumeListResponse", + "type": "object", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "Volume list response", + "x-go-name": "ListResponse" + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Scope": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/components/schemas/IPAM" + }, + "Internal": { + "type": "boolean" + }, + "Attachable": { + "type": "boolean" + }, + "Ingress": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/NetworkContainer" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Name": "net01", + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Created": "2016-10-19T04:33:30.360899459Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.19.0.0/16", + "Gateway": "172.19.0.1" + } + ], + "Options": { + "foo": "bar" + } + }, + "Internal": false, + "Attachable": false, + "Ingress": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + }, + "IPAM": { + "type": "object", + "properties": { + "Driver": { + "type": "string", + "description": "Name of the IPAM driver to use.", + "default": "default" + }, + "Config": { + "type": "array", + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options, specified as a map." + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string" + }, + "IPRange": { + "type": "string" + }, + "Gateway": { + "type": "string" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EndpointID": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parent": { + "type": "string", + "description": "ID of the parent build cache record.\n\n> **Deprecated**: This field is deprecated, and omitted if empty.\n", + "nullable": true, + "example": "" + }, + "Parents": { + "type": "array", + "description": "List of parent build cache record IDs.\n", + "nullable": true, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ], + "items": { + "type": "string" + } + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "type": "integer", + "description": "Amount of disk space used by the build cache (in bytes).\n", + "example": 51 + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "type": "string", + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + }, + "description": "BuildCache contains information about a build cache record.\n" + }, + "ImageID": { + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "description": "Image ID or Digest", + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The error message.", + "nullable": false + } + }, + "description": "Represents an error.", + "example": { + "message": "Something went wrong." + } + }, + "IdResponse": { + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The id of the newly created object.", + "nullable": false + } + }, + "description": "Response to an API call that returns just an Id" + }, + "EndpointSettings": { + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "example": [ + "container_1", + "container_2" + ], + "items": { + "type": "string" + } + }, + "MacAddress": { + "type": "string", + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "example": "02:42:ac:11:00:04" + }, + "Aliases": { + "type": "array", + "example": [ + "server_x", + "server_y" + ], + "items": { + "type": "string" + } + }, + "NetworkID": { + "type": "string", + "description": "Unique ID of the network.\n", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "type": "string", + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "type": "string", + "description": "Gateway address for this network.\n", + "example": "172.17.0.1" + }, + "IPAddress": { + "type": "string", + "description": "IPv4 address.\n", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "type": "integer", + "description": "Mask length of the IPv4 address.\n", + "example": 16 + }, + "IPv6Gateway": { + "type": "string", + "description": "IPv6 gateway address.\n", + "example": "2001:db8:2::100" + }, + "GlobalIPv6Address": { + "type": "string", + "description": "Global IPv6 address.\n", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "type": "integer", + "description": "Mask length of the global IPv6 address.\n", + "format": "int64", + "example": 64 + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "DNSNames": { + "type": "array", + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ], + "items": { + "type": "string" + } + } + }, + "description": "Configuration for a network endpoint." + }, + "EndpointIPAMConfig": { + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "example": [ + "169.254.34.68", + "fe80::3468" + ], + "items": { + "type": "string" + } + } + }, + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "nullable": true, + "x-nullable": true + }, + "PluginMount": { + "required": [ + "Description", + "Destination", + "Name", + "Options", + "Settable", + "Source", + "Type" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "example": [ + "rbind", + "rw" + ], + "items": { + "type": "string" + } + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginDevice": { + "required": [ + "Description", + "Name", + "Path", + "Settable" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginEnv": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginInterfaceType": { + "required": [ + "Capability", + "Prefix", + "Version" + ], + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "nullable": false + }, + "Capability": { + "type": "string", + "nullable": false + }, + "Version": { + "type": "string", + "nullable": false + } + }, + "nullable": false, + "x-nullable": false + }, + "PluginPrivilege": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "example": [ + "host" + ], + "items": { + "type": "string" + } + } + }, + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "x-go-name": "PluginPrivilege" + }, + "Plugin": { + "required": [ + "Config", + "Enabled", + "Name", + "Settings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "type": "boolean", + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "nullable": false, + "example": true + }, + "Settings": { + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "type": "object", + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + "DEBUG=0" + ], + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "description": "Settings that can be modified by users.", + "nullable": false + }, + "PluginReference": { + "type": "string", + "description": "plugin remote reference used to push/pull the plugin", + "nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "required": [ + "Args", + "Description", + "Documentation", + "Entrypoint", + "Env", + "Interface", + "IpcHost", + "Linux", + "Mounts", + "Network", + "PidHost", + "PropagatedMount", + "WorkDir" + ], + "type": "object", + "properties": { + "DockerVersion": { + "type": "string", + "description": "Docker Version used to create the plugin", + "nullable": false, + "example": "17.06.0-ce" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "required": [ + "Socket", + "Types" + ], + "type": "object", + "properties": { + "Types": { + "type": "array", + "example": [ + "docker.volumedriver/1.0" + ], + "items": { + "$ref": "#/components/schemas/PluginInterfaceType" + } + }, + "Socket": { + "type": "string", + "nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "description": "Protocol to use for clients connecting to the plugin.", + "example": "some.protocol/v1.0", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "description": "The interface between Docker and the plugin", + "nullable": false + }, + "Entrypoint": { + "type": "array", + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ], + "items": { + "type": "string" + } + }, + "WorkDir": { + "type": "string", + "nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "required": [ + "Type" + ], + "type": "object", + "properties": { + "Type": { + "type": "string", + "nullable": false, + "example": "host" + } + }, + "nullable": false + }, + "Linux": { + "required": [ + "AllowAllDevices", + "Capabilities", + "Devices" + ], + "type": "object", + "properties": { + "Capabilities": { + "type": "array", + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "AllowAllDevices": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Value": "0" + } + ], + "items": { + "$ref": "#/components/schemas/PluginEnv" + } + }, + "Args": { + "required": [ + "Description", + "Name", + "Settable", + "Value" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": false, + "example": "args" + }, + "Description": { + "type": "string", + "nullable": false, + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ], + "items": { + "type": "string" + } + } + } + } + }, + "description": "The config of a plugin.", + "nullable": false + } + }, + "description": "A plugin for the Engine API" + }, + "ObjectVersion": { + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + }, + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n" + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name for the node.", + "example": "my-node" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Role": { + "type": "string", + "description": "Role of the node.", + "example": "manager", + "enum": [ + "worker", + "manager" + ] + }, + "Availability": { + "type": "string", + "description": "Availability of the node.", + "example": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + }, + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n" + }, + "Platform": { + "type": "object", + "properties": { + "Architecture": { + "type": "string", + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "example": "x86_64" + }, + "OS": { + "type": "string", + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "example": "linux" + } + }, + "description": "Platform represents the platform (Arch/OS).\n" + }, + "EngineDescription": { + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ], + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + } + }, + "description": "EngineDescription provides information about an engine." + }, + "TLSInfo": { + "type": "object", + "properties": { + "TrustRoot": { + "type": "string", + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n" + }, + "CertIssuerSubject": { + "type": "string", + "description": "The base64-url-safe-encoded raw subject bytes of the issuer." + }, + "CertIssuerPublicKey": { + "type": "string", + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n" + } + }, + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "type": "string", + "description": "IP address of the node.", + "example": "172.17.0.2" + } + }, + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n" + }, + "NodeState": { + "type": "string", + "description": "NodeState represents the state of a node.", + "example": "ready", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ] + }, + "ManagerStatus": { + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "example": true, + "default": false + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "type": "string", + "description": "The IP address and port at which the manager is reachable.\n", + "example": "10.0.0.46:2377" + } + }, + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "nullable": true, + "x-nullable": true + }, + "Reachability": { + "type": "string", + "description": "Reachability represents the reachability of a node.", + "example": "reachable", + "enum": [ + "unknown", + "unreachable", + "reachable" + ] + }, + "SwarmSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the swarm.", + "example": "default" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "type": "integer", + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "format": "int64", + "example": 10 + } + }, + "description": "Orchestration configuration.", + "nullable": true + }, + "Raft": { + "type": "object", + "properties": { + "SnapshotInterval": { + "type": "integer", + "description": "The number of log entries between snapshots.", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "type": "integer", + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "type": "integer", + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "type": "integer", + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 3 + }, + "HeartbeatTick": { + "type": "integer", + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "example": 1 + } + }, + "description": "Raft configuration." + }, + "Dispatcher": { + "type": "object", + "properties": { + "HeartbeatPeriod": { + "type": "integer", + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "format": "int64", + "example": 5000000000 + } + }, + "description": "Dispatcher configuration.", + "nullable": true + }, + "CAConfig": { + "type": "object", + "properties": { + "NodeCertExpiry": { + "type": "integer", + "description": "The duration node certificates are issued for.", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "type": "array", + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "type": "string", + "description": "URL where certificate signing requests should be sent.\n" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n" + }, + "CACert": { + "type": "string", + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n" + } + } + } + }, + "SigningCACert": { + "type": "string", + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n" + }, + "SigningCAKey": { + "type": "string", + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n" + }, + "ForceRotate": { + "type": "integer", + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64" + } + }, + "description": "CA configuration.", + "nullable": true + }, + "EncryptionConfig": { + "type": "object", + "properties": { + "AutoLockManagers": { + "type": "boolean", + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "example": false + } + }, + "description": "Parameters related to encryption-at-rest." + }, + "TaskDefaults": { + "type": "object", + "properties": { + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The log driver to use as a default for new tasks.\n", + "example": "json-file" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "example": { + "max-file": "10", + "max-size": "100m" + } + } + }, + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n" + } + }, + "description": "Defaults for creating tasks in this cluster." + } + }, + "description": "User modifiable swarm configuration." + }, + "ClusterInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the swarm.", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "type": "string", + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "type": "boolean", + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "example": false + }, + "DataPathPort": { + "type": "integer", + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "format": "uint32", + "example": 4789 + }, + "DefaultAddrPool": { + "type": "array", + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "items": { + "type": "string", + "format": "CIDR", + "example": "" + } + }, + "SubnetSize": { + "maximum": 29, + "type": "integer", + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "format": "uint32", + "example": 24 + } + }, + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "nullable": true, + "x-nullable": true + }, + "JoinTokens": { + "type": "object", + "properties": { + "Worker": { + "type": "string", + "description": "The token workers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "type": "string", + "description": "The token managers can use to join the swarm.\n", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + }, + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n" + }, + "Swarm": { + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name or 'alias' to use for the plugin." + }, + "Remote": { + "type": "string", + "description": "The plugin image reference to use." + }, + "Disabled": { + "type": "boolean", + "description": "Disable the plugin once scheduled." + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + }, + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "ContainerSpec": { + "type": "object", + "properties": { + "Image": { + "type": "string", + "description": "The image name to use for the container" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value data." + }, + "Command": { + "type": "array", + "description": "The command to be run in the image.", + "items": { + "type": "string" + } + }, + "Args": { + "type": "array", + "description": "Arguments to the command.", + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n" + }, + "Env": { + "type": "array", + "description": "A list of environment variables in the form `VAR=value`.\n", + "items": { + "type": "string" + } + }, + "Dir": { + "type": "string", + "description": "The working directory for commands to run in." + }, + "User": { + "type": "string", + "description": "The user inside the container." + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "properties": { + "CredentialSpec": { + "type": "object", + "properties": { + "Config": { + "type": "string", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "0bt9dmxjvjiqermk6xrop3ekq" + }, + "File": { + "type": "string", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "example": "spec.json" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + }, + "description": "CredentialSpec for managed service account (Windows only)" + }, + "SELinuxContext": { + "type": "object", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + }, + "description": "SELinux labels of the container" + }, + "Seccomp": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "type": "string", + "description": "The custom seccomp profile as a json object" + } + }, + "description": "Options for configuring seccomp on the container" + }, + "AppArmor": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + }, + "description": "Options for configuring AppArmor on the container" + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + }, + "description": "Security options for the container" + }, + "TTY": { + "type": "boolean", + "description": "Whether a pseudo-TTY should be allocated." + }, + "OpenStdin": { + "type": "boolean", + "description": "Open `stdin`" + }, + "ReadOnly": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "Mounts": { + "type": "array", + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "type": "string", + "description": "Signal to stop the container." + }, + "StopGracePeriod": { + "type": "integer", + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "format": "int64" + }, + "HealthCheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "type": "object", + "properties": { + "Nameservers": { + "type": "array", + "description": "The IP addresses of the name servers.", + "items": { + "type": "string" + } + }, + "Search": { + "type": "array", + "description": "A search list for host-name lookup.", + "items": { + "type": "string" + } + }, + "Options": { + "type": "array", + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "items": { + "type": "string" + } + } + }, + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n" + }, + "Secrets": { + "type": "array", + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n" + }, + "SecretID": { + "type": "string", + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n" + }, + "SecretName": { + "type": "string", + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n" + } + } + } + }, + "Configs": { + "type": "array", + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "items": { + "type": "object", + "properties": { + "File": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name represents the final filename in the filesystem.\n" + }, + "UID": { + "type": "string", + "description": "UID represents the file UID." + }, + "GID": { + "type": "string", + "description": "GID represents the file GID." + }, + "Mode": { + "type": "integer", + "description": "Mode represents the FileMode of the file.", + "format": "uint32" + } + }, + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n" + }, + "Runtime": { + "type": "object", + "properties": {}, + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n" + }, + "ConfigID": { + "type": "string", + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n" + }, + "ConfigName": { + "type": "string", + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Init": { + "type": "boolean", + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "nullable": true + }, + "Sysctls": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n" + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ], + "items": { + "type": "string" + } + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "example": [ + "CAP_NET_RAW" + ], + "items": { + "type": "string" + } + }, + "Ulimits": { + "type": "array", + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of ulimit" + }, + "Soft": { + "type": "integer", + "description": "Soft limit" + }, + "Hard": { + "type": "integer", + "description": "Hard limit" + } + } + } + } + }, + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "NetworkAttachmentSpec": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string", + "description": "ID of the container represented by this task" + } + }, + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n" + }, + "Resources": { + "type": "object", + "properties": { + "Limits": { + "$ref": "#/components/schemas/Limit" + }, + "Reservations": { + "$ref": "#/components/schemas/ResourceObject" + } + }, + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n" + }, + "RestartPolicy": { + "type": "object", + "properties": { + "Condition": { + "type": "string", + "description": "Condition for restart.", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "type": "integer", + "description": "Delay between restart attempts.", + "format": "int64" + }, + "MaxAttempts": { + "type": "integer", + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "format": "int64", + "default": 0 + }, + "Window": { + "type": "integer", + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "format": "int64", + "default": 0 + } + }, + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n" + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ], + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ], + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string", + "description": "label descriptor, such as `engine.labels.az`.\n" + } + } + } + } + } + }, + "MaxReplicas": { + "type": "integer", + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "format": "int64", + "default": 0 + }, + "Platforms": { + "type": "array", + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "type": "integer", + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n" + }, + "Runtime": { + "type": "string", + "description": "Runtime is the type of runtime specified for the task executor.\n" + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n" + } + }, + "description": "User modifiable task configuration." + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + }, + "description": "represents the status of a container." + }, + "PortStatus": { + "type": "object", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "represents the port status of a task's host ports whose service has published host ports" + }, + "TaskStatus": { + "type": "object", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/components/schemas/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/components/schemas/PortStatus" + } + }, + "description": "represents the status of a task." + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the task." + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "type": "string", + "description": "Name of the task." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "type": "string", + "description": "The ID of the service this task is part of." + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "type": "string", + "description": "The ID of the node that this task is on." + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the service." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "integer", + "description": "The maximum number of replicas to run simultaneously.\n", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "type": "integer", + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "format": "int64" + } + }, + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n" + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "description": "The mode used for services which run a task to the completed state\non each valid node.\n" + } + }, + "description": "Scheduling mode for the service." + }, + "UpdateConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between updates, in nanoseconds.", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the update strategy of the service." + }, + "RollbackConfig": { + "type": "object", + "properties": { + "Parallelism": { + "type": "integer", + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "format": "int64" + }, + "Delay": { + "type": "integer", + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "format": "int64" + }, + "FailureAction": { + "type": "string", + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "type": "integer", + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "format": "int64" + }, + "MaxFailureRatio": { + "type": "number", + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n" + }, + "Order": { + "type": "string", + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "enum": [ + "stop-first", + "start-first" + ] + } + }, + "description": "Specification for the rollback strategy of the service." + }, + "Networks": { + "type": "array", + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + }, + "description": "User modifiable configuration for a service." + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "type": "integer", + "description": "The port inside the container." + }, + "PublishedPort": { + "type": "integer", + "description": "The port on the swarm hosts." + }, + "PublishMode": { + "type": "string", + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "example": "ingress", + "default": "ingress", + "enum": [ + "ingress", + "host" + ] + } + } + }, + "EndpointSpec": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "type": "array", + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + }, + "description": "Properties that can be configured to access and load balance a service." + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + }, + "description": "The status of a service update." + }, + "ServiceStatus": { + "type": "object", + "properties": { + "RunningTasks": { + "type": "integer", + "description": "The number of tasks for the service currently in the Running state.\n", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "type": "integer", + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "type": "integer", + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "format": "uint64" + } + }, + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n" + }, + "JobStatus": { + "type": "object", + "properties": { + "JobIteration": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "LastExecution": { + "type": "string", + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "format": "dateTime" + } + }, + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n" + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Untagged": { + "type": "string", + "description": "The image ID of an image that was untagged" + }, + "Deleted": { + "type": "string", + "description": "The image ID of an image that was deleted" + } + }, + "x-go-name": "DeleteResponse" + }, + "ServiceCreateResponse": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the created service.", + "nullable": false, + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl" + }, + "Warnings": { + "type": "array", + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "nullable": true, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ], + "items": { + "type": "string" + } + } + }, + "description": "contains the information returned to a client on the\ncreation of a new service.\n" + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "type": "array", + "description": "Optional warning messages", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of this container", + "x-go-name": "ID" + }, + "Names": { + "type": "array", + "description": "The names that this container has been given", + "items": { + "type": "string" + } + }, + "Image": { + "type": "string", + "description": "The name of the image used when creating this container" + }, + "ImageID": { + "type": "string", + "description": "The ID of the image that this container was created from" + }, + "Command": { + "type": "string", + "description": "Command to run when starting the container" + }, + "Created": { + "type": "integer", + "description": "When the container was created", + "format": "int64" + }, + "Ports": { + "type": "array", + "description": "The ports exposed by this container", + "items": { + "$ref": "#/components/schemas/Port" + } + }, + "SizeRw": { + "type": "integer", + "description": "The size of files that have been created or changed by this container", + "format": "int64" + }, + "SizeRootFs": { + "type": "integer", + "description": "The total size of all the files in this container", + "format": "int64" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "State": { + "type": "string", + "description": "The state of this container (e.g. `Exited`)" + }, + "Status": { + "type": "string", + "description": "Additional human-readable status of this container (e.g. `Exit 0`)" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "NetworkSettings": { + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "description": "A summary of the container's network settings" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + } + } + }, + "Driver": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the driver.", + "nullable": false, + "example": "some-driver" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key/value map of driver-specific options.", + "nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + }, + "description": "Driver represents a driver (network, logging, secrets)." + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the secret." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata.", + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "example": "" + }, + "Driver": { + "$ref": "#/components/schemas/Driver" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "User-defined name of the config." + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-defined key/value metadata." + }, + "Data": { + "type": "string", + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\nconfig data.\n" + }, + "Templating": { + "$ref": "#/components/schemas/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "example": "running", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + }, + "Running": { + "type": "boolean", + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "example": true + }, + "Paused": { + "type": "boolean", + "description": "Whether this container is paused.", + "example": false + }, + "Restarting": { + "type": "boolean", + "description": "Whether this container is restarting.", + "example": false + }, + "OOMKilled": { + "type": "boolean", + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "type": "integer", + "description": "The process ID of this container", + "example": 1234 + }, + "ExitCode": { + "type": "integer", + "description": "The last exit code of this container", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "description": "The time when this container was last started.", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "type": "string", + "description": "The time when this container last exited.", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "nullable": true, + "x-nullable": true + }, + "ContainerCreateResponse": { + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "The ID of the created container", + "nullable": false, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "type": "array", + "description": "Warnings encountered when creating the container", + "nullable": false, + "example": [], + "items": { + "type": "string" + } + } + }, + "description": "OK response to ContainerCreate operation", + "x-go-name": "CreateResponse" + }, + "ContainerWaitResponse": { + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "type": "object", + "properties": { + "StatusCode": { + "type": "integer", + "description": "Exit code of the container", + "format": "int64", + "nullable": false + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + }, + "description": "OK response to ContainerWait operation", + "x-go-name": "WaitResponse" + }, + "ContainerWaitExitError": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Details of an error" + } + }, + "description": "container waiting error, if any", + "x-go-name": "WaitExitError" + }, + "SystemVersion": { + "type": "object", + "properties": { + "Platform": { + "required": [ + "Name" + ], + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "required": [ + "Name", + "Version" + ], + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the component\n", + "example": "Engine" + }, + "Version": { + "type": "string", + "description": "Version of the component\n", + "nullable": false, + "example": "19.03.12" + }, + "Details": { + "type": "object", + "properties": {}, + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "nullable": true + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Version": { + "type": "string", + "description": "The version of the daemon", + "example": "19.03.12" + }, + "ApiVersion": { + "type": "string", + "description": "The default (and highest) API version that is supported by the daemon\n", + "example": "1.40" + }, + "MinAPIVersion": { + "type": "string", + "description": "The minimum API version that is supported by the daemon\n", + "example": "1.12" + }, + "GitCommit": { + "type": "string", + "description": "The Git commit of the source code that was used to build the daemon\n", + "example": "48a66213fe" + }, + "GoVersion": { + "type": "string", + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "example": "go1.13.14" + }, + "Os": { + "type": "string", + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "example": "linux" + }, + "Arch": { + "type": "string", + "description": "The architecture that the daemon is running on\n", + "example": "amd64" + }, + "KernelVersion": { + "type": "string", + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "example": "4.19.76-linuxkit" + }, + "Experimental": { + "type": "boolean", + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "example": true + }, + "BuildTime": { + "type": "string", + "description": "The date and time that the daemon was compiled.\n", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + }, + "description": "Response of Engine API: GET \"/version\"\n" + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "type": "integer", + "description": "Total number of containers on the host.", + "example": 14 + }, + "ContainersRunning": { + "type": "integer", + "description": "Number of containers with status `\"running\"`.\n", + "example": 3 + }, + "ContainersPaused": { + "type": "integer", + "description": "Number of containers with status `\"paused\"`.\n", + "example": 1 + }, + "ContainersStopped": { + "type": "integer", + "description": "Number of containers with status `\"stopped\"`.\n", + "example": 10 + }, + "Images": { + "type": "integer", + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "example": 508 + }, + "Driver": { + "type": "string", + "description": "Name of the storage driver in use.", + "example": "overlay2" + }, + "DriverStatus": { + "type": "array", + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ], + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "DockerRootDir": { + "type": "string", + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "type": "boolean", + "description": "Indicates if the host has memory limit support enabled.", + "example": true + }, + "SwapLimit": { + "type": "boolean", + "description": "Indicates if the host has memory swap limit support enabled.", + "example": true + }, + "KernelMemoryTCP": { + "type": "boolean", + "description": "Indicates if the host has kernel memory TCP limit support enabled. This\nfield is omitted if not supported.\n\nKernel memory TCP limits are not supported when using cgroups v2, which\ndoes not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup.\n", + "example": true + }, + "CpuCfsPeriod": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "example": true + }, + "CpuCfsQuota": { + "type": "boolean", + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "example": true + }, + "CPUShares": { + "type": "boolean", + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "example": true + }, + "CPUSet": { + "type": "boolean", + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "example": true + }, + "PidsLimit": { + "type": "boolean", + "description": "Indicates if the host kernel has PID limit support enabled.", + "example": true + }, + "OomKillDisable": { + "type": "boolean", + "description": "Indicates if OOM killer disable is supported on the host." + }, + "IPv4Forwarding": { + "type": "boolean", + "description": "Indicates IPv4 forwarding is enabled.", + "example": true + }, + "BridgeNfIptables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "example": true + }, + "BridgeNfIp6tables": { + "type": "boolean", + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "example": true + }, + "Debug": { + "type": "boolean", + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "example": true + }, + "NFd": { + "type": "integer", + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 64 + }, + "NGoroutines": { + "type": "integer", + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "example": 174 + }, + "SystemTime": { + "type": "string", + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "type": "string", + "description": "The logging driver to use as a default for new containers.\n" + }, + "CgroupDriver": { + "type": "string", + "description": "The driver to use for managing cgroups.\n", + "example": "cgroupfs", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd", + "none" + ] + }, + "CgroupVersion": { + "type": "string", + "description": "The version of the cgroup.\n", + "example": "1", + "default": "1", + "enum": [ + "1", + "2" + ] + }, + "NEventsListener": { + "type": "integer", + "description": "Number of event listeners subscribed.", + "example": 30 + }, + "KernelVersion": { + "type": "string", + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "example": "4.9.38-moby" + }, + "OperatingSystem": { + "type": "string", + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "example": "Alpine Linux v3.5" + }, + "OSVersion": { + "type": "string", + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "example": "16.04" + }, + "OSType": { + "type": "string", + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "example": "linux" + }, + "Architecture": { + "type": "string", + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "example": "x86_64" + }, + "NCPU": { + "type": "integer", + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "example": 4 + }, + "MemTotal": { + "type": "integer", + "description": "Total amount of physical memory available on the host, in bytes.\n", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "type": "string", + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "example": "https://index.docker.io/v1/", + "default": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "type": "string", + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "type": "string", + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "type": "string", + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "example": "*.local, 169.254/16" + }, + "Name": { + "type": "string", + "description": "Hostname of the host.", + "example": "node5.corp.example.com" + }, + "Labels": { + "type": "array", + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "example": [ + "storage=ssd", + "production" + ], + "items": { + "type": "string" + } + }, + "ExperimentalBuild": { + "type": "boolean", + "description": "Indicates if experimental features are enabled on the daemon.\n", + "example": true + }, + "ServerVersion": { + "type": "string", + "description": "Version string of the daemon.\n", + "example": "24.0.2" + }, + "Runtimes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "type": "string", + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "example": "runc", + "default": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "type": "boolean", + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "example": false, + "default": false + }, + "Isolation": { + "type": "string", + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "InitBinary": { + "type": "string", + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "type": "array", + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ], + "items": { + "type": "string" + } + }, + "ProductLicense": { + "type": "string", + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "type": "array", + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "items": { + "type": "object", + "properties": { + "Base": { + "type": "string", + "description": "The network address in CIDR format", + "example": "10.10.0.0/16" + }, + "Size": { + "type": "integer", + "description": "The network pool size", + "example": 24 + } + } + } + }, + "Warnings": { + "type": "array", + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "example": [ + "WARNING: No memory limit support", + "WARNING: bridge-nf-call-iptables is disabled", + "WARNING: bridge-nf-call-ip6tables is disabled" + ], + "items": { + "type": "string" + } + }, + "CDISpecDirs": { + "type": "array", + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "example": [ + "/etc/cdi", + "/var/run/cdi" + ], + "items": { + "type": "string" + } + } + } + }, + "PluginsInfo": { + "type": "object", + "properties": { + "Volume": { + "type": "array", + "description": "Names of available volume-drivers, and network-driver plugins.", + "example": [ + "local" + ], + "items": { + "type": "string" + } + }, + "Network": { + "type": "array", + "description": "Names of available network-drivers, and network-driver plugins.", + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ], + "items": { + "type": "string" + } + }, + "Authorization": { + "type": "array", + "description": "Names of available authorization plugins.", + "example": [ + "img-authz-plugin", + "hbm" + ], + "items": { + "type": "string" + } + }, + "Log": { + "type": "array", + "description": "Names of available logging-drivers, and logging-driver plugins.", + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ], + "items": { + "type": "string" + } + } + }, + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n" + }, + "RegistryServiceConfig": { + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "type": "array", + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "AllowNondistributableArtifactsHostnames": { + "type": "array", + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `[:]` or `[:]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n> **Warning**: Nondistributable artifacts typically have restrictions\n> on how and where they can be distributed and shared. Only use this\n> feature to push artifacts to private registries and ensure that you\n> are in compliance with any terms that cover redistributing\n> nondistributable artifacts.\n", + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ], + "items": { + "type": "string" + } + }, + "InsecureRegistryCIDRs": { + "type": "array", + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "example": [ + "::1/128", + "127.0.0.0/8" + ], + "items": { + "type": "string" + } + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "type": "array", + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ], + "items": { + "type": "string" + } + } + }, + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "nullable": true, + "x-nullable": true + }, + "IndexInfo": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of the registry, such as \"docker.io\".\n", + "example": "docker.io" + }, + "Mirrors": { + "type": "array", + "description": "List of mirrors, expressed as URIs.\n", + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ], + "items": { + "type": "string" + } + }, + "Secure": { + "type": "boolean", + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "example": true + }, + "Official": { + "type": "boolean", + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "example": true + } + }, + "description": "IndexInfo contains information about a registry.", + "nullable": true, + "x-nullable": true + }, + "Runtime": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "type": "array", + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "items": { + "type": "string" + } + }, + "status": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "nullable": true, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + } + } + }, + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n" + }, + "Commit": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Actual commit ID of external tool.", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + }, + "Expected": { + "type": "string", + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + } + }, + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n" + }, + "SwarmInfo": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm.", + "example": "k67qz4598weg5unwwffg6z1m1", + "default": "" + }, + "NodeAddr": { + "type": "string", + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "example": "10.0.0.46", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "example": true, + "default": false + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "type": "array", + "description": "List of ID's and addresses of other managers in the swarm.\n", + "nullable": true, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "items": { + "$ref": "#/components/schemas/PeerNode" + } + }, + "Nodes": { + "type": "integer", + "description": "Total number of nodes in the swarm.", + "nullable": true, + "example": 4 + }, + "Managers": { + "type": "integer", + "description": "Total number of managers in the swarm.", + "nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + }, + "description": "Represents generic information about swarm.\n" + }, + "LocalNodeState": { + "type": "string", + "description": "Current local status of this node.", + "example": "active", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ] + }, + "PeerNode": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "Unique identifier of for this node in the swarm." + }, + "Addr": { + "type": "string", + "description": "IP address and ports at which this node can be reached.\n" + } + }, + "description": "Represents a peer-node in the swarm" + }, + "NetworkAttachmentConfig": { + "type": "object", + "properties": { + "Target": { + "type": "string", + "description": "The target network for attachment. Must be a network name or ID.\n" + }, + "Aliases": { + "type": "array", + "description": "Discoverable alternate names for the service on this network.\n", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Driver attachment options for the network target.\n" + } + }, + "description": "Specifies how a service should be attached to a particular network.\n" + }, + "EventActor": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The ID of the object emitting the event", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Various key/value attributes of the object, depending on its type.\n", + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + }, + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n" + }, + "EventMessage": { + "title": "SystemEventsResponse", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The type of object emitting the event", + "example": "container", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ] + }, + "Action": { + "type": "string", + "description": "The type of event", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "type": "string", + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "type": "integer", + "description": "Timestamp of event", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "type": "integer", + "description": "Timestamp of event, with nanosecond accuracy", + "format": "int64", + "example": 1629574695515050000 + } + }, + "description": "EventMessage represents the information an event contains.\n" + }, + "OCIDescriptor": { + "type": "object", + "properties": { + "mediaType": { + "type": "string", + "description": "The media type of the object this schema refers to.\n", + "example": "application/vnd.docker.distribution.manifest.v2+json" + }, + "digest": { + "type": "string", + "description": "The digest of the targeted content.\n", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "type": "integer", + "description": "The size in bytes of the blob.\n", + "format": "int64", + "example": 3987495 + } + }, + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "x-go-name": "Descriptor" + }, + "OCIPlatform": { + "type": "object", + "properties": { + "architecture": { + "type": "string", + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "example": "arm" + }, + "os": { + "type": "string", + "description": "The operating system, for example `linux` or `windows`.\n", + "example": "windows" + }, + "os.version": { + "type": "string", + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "example": "10.0.19041.1165" + }, + "os.features": { + "type": "array", + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "example": [ + "win32k" + ], + "items": { + "type": "string" + } + }, + "variant": { + "type": "string", + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "example": "v7" + } + }, + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "x-go-name": "Platform" + }, + "DistributionInspect": { + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "type": "object", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + }, + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "x-go-name": "DistributionInspect" + }, + "ClusterVolume": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "properties": { + "CapacityBytes": { + "type": "integer", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n", + "format": "int64" + }, + "VolumeContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n" + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Information about the global status of the volume.\n" + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n" + } + } + } + } + }, + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n" + }, + "ClusterVolumeSpec": { + "type": "object", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "nullable": false, + "default": "single", + "enum": [ + "single", + "multi" + ] + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "nullable": false, + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ] + }, + "MountVolume": { + "type": "object", + "properties": {}, + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + }, + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n" + } + }, + "AccessibilityRequirements": { + "type": "object", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + }, + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n" + }, + "CapacityRange": { + "type": "object", + "properties": { + "RequiredBytes": { + "type": "integer", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n", + "format": "int64" + }, + "LimitBytes": { + "type": "integer", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n", + "format": "int64" + } + }, + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n" + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "nullable": false, + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + }, + "description": "Defines how the volume is used by tasks.\n" + } + }, + "description": "Cluster-specific options used to create the volume.\n" + }, + "Topology": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n" + } + } + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Client.php b/app/vendor/beluga-php/docker-php-api/src/Client.php new file mode 100644 index 000000000..73a045a6b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Client.php @@ -0,0 +1,2662 @@ +[:]`, ``, or ``) + * - `before`=(`` or ``) + * - `expose`=(`[/]`|`/[]`) + * - `exited=` containers with exit code of `` + * - `health`=(`starting`|`healthy`|`unhealthy`|`none`) + * - `id=` a container's ID + * - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) + * - `is-task=`(`true`|`false`) + * - `label=key` or `label="key=value"` of a container label + * - `name=` a container's name + * - `network`=(`` or ``) + * - `publish`=(`[/]`|`/[]`) + * - `since`=(`` or ``) + * - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + * - `volume`=(`` or ``) + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerListBadRequestException + * @throws Exception\ContainerListInternalServerErrorException + * + * @return Model\ContainerSummary[]|\Psr\Http\Message\ResponseInterface|null + */ + public function containerList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerList($queryParameters), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $name Assign the specified name to the container. Must match + * `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. + * @var string $platform Platform in the format `os[/arch[/variant]]` used for image lookup. + * + * When specified, the daemon checks if the requested image is present + * in the local image cache with the given OS and Architecture, and + * otherwise returns a `404` status. + * + * If the option is not set, the host's native OS and Architecture are + * used to look up the image in the image cache. However, if no platform + * is passed and the given image does exist in the local image cache, + * but its OS or architecture does not match, the container is created + * with the available image, and a warning is added to the `Warnings` + * field in the response, for example; + * + * WARNING: The requested image's platform (linux/arm64/v8) does not + * match the detected host platform (linux/amd64) and no + * specific platform was requested + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerCreateBadRequestException + * @throws Exception\ContainerCreateNotFoundException + * @throws Exception\ContainerCreateConflictException + * @throws Exception\ContainerCreateInternalServerErrorException + * + * @return Model\ContainerCreateResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function containerCreate(?Model\ContainersCreatePostBody $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerCreate($requestBody, $queryParameters), $fetch); + } + + /** + * Return low-level information about a container. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var bool $size Return the size of container as fields `SizeRw` and `SizeRootFs` + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerInspectNotFoundException + * @throws Exception\ContainerInspectInternalServerErrorException + * + * @return Model\ContainersIdJsonGetResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function containerInspect(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerInspect($id, $queryParameters), $fetch); + } + + /** + * On Unix systems, this is done by running the `ps` command. This endpoint + * is not supported on Windows. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $ps_args The arguments to pass to `ps`. For example, `aux` + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerTopNotFoundException + * @throws Exception\ContainerTopInternalServerErrorException + * + * @return Model\ContainersIdTopGetJsonResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function containerTop(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerTop($id, $queryParameters, $accept), $fetch); + } + + /** + * Get `stdout` and `stderr` logs from a container. + * + * Note: This endpoint works only for containers with the `json-file` or + * `journald` logging driver. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var bool $follow keep connection after returning logs + * @var bool $stdout Return logs from `stdout` + * @var bool $stderr Return logs from `stderr` + * @var int $since Only return logs since this time, as a UNIX timestamp + * @var int $until Only return logs before this time, as a UNIX timestamp + * @var bool $timestamps Add timestamps to every log line + * @var string $tail Only return this number of log lines from the end of the logs. + * Specify as an integer or `all` to output all log lines. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/vnd.docker.raw-stream|application/vnd.docker.multiplexed-stream|application/json + * + * @throws Exception\ContainerLogsNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerLogs(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerLogs($id, $queryParameters, $accept), $fetch); + } + + /** + * Returns which files in a container's filesystem have been added, deleted, + * or modified. The `Kind` of modification can be one of: + * + * - `0`: Modified ("C") + * - `1`: Added ("A") + * - `2`: Deleted ("D") + * + * @param string $id ID or name of the container + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerChangesNotFoundException + * @throws Exception\ContainerChangesInternalServerErrorException + * + * @return Model\FilesystemChange[]|\Psr\Http\Message\ResponseInterface|null + */ + public function containerChanges(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerChanges($id), $fetch); + } + + /** + * Export the contents of a container as a tarball. + * + * @param string $id ID or name of the container + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/octet-stream|application/json + * + * @throws Exception\ContainerExportNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerExport(string $id, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerExport($id, $accept), $fetch); + } + + /** + * This endpoint returns a live stream of a container’s resource usage + * statistics. + * + * The `precpu_stats` is the CPU statistic of the *previous* read, and is + * used to calculate the CPU usage percentage. It is not an exact copy + * of the `cpu_stats` field. + * + * If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is + * nil then for compatibility with older daemons the length of the + * corresponding `cpu_usage.percpu_usage` array should be used. + * + * On a cgroup v2 host, the following fields are not set + * `blkio_stats`: all fields other than `io_service_bytes_recursive` + * `cpu_stats`: `cpu_usage.percpu_usage` + * `memory_stats`: `max_usage` and `failcnt` + * Also, `memory_stats.stats` fields are incompatible with cgroup v1. + * + * To calculate the values shown by the `stats` command of the docker cli tool + * the following formulas can be used: + * used_memory = `memory_stats.usage - memory_stats.stats.cache` + * available_memory = `memory_stats.limit` + * Memory usage % = `(used_memory / available_memory) * 100.0` + * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage` + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var bool $stream Stream the output. If false, the stats will be output once and then + * it will disconnect. + * @var bool $one-shot Only get a single stat instead of waiting for 2 cycles. Must be used + * with `stream=false`. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerStatsNotFoundException + * @throws Exception\ContainerStatsInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerStats(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerStats($id, $queryParameters), $fetch); + } + + /** + * Resize the TTY for a container. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var int $h Height of the TTY session in characters + * @var int $w Width of the TTY session in characters + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header text/plain|application/json + * + * @throws Exception\ContainerResizeNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerResize(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerResize($id, $queryParameters, $accept), $fetch); + } + + /** + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $detachKeys Override the key sequence for detaching a container. Format is a + * single character `[a-Z]` or `ctrl-` where `` is one + * of: `a-z`, `@`, `^`, `[`, `,` or `_`. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerStartNotFoundException + * @throws Exception\ContainerStartInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerStart(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerStart($id, $queryParameters, $accept), $fetch); + } + + /** + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $signal Signal to send to the container as an integer or string (e.g. `SIGINT`). + * @var int $t Number of seconds to wait before killing the container + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerStopNotFoundException + * @throws Exception\ContainerStopInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerStop(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerStop($id, $queryParameters, $accept), $fetch); + } + + /** + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $signal Signal to send to the container as an integer or string (e.g. `SIGINT`). + * @var int $t Number of seconds to wait before killing the container + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerRestartNotFoundException + * @throws Exception\ContainerRestartInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerRestart(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerRestart($id, $queryParameters, $accept), $fetch); + } + + /** + * Send a POSIX signal to a container, defaulting to killing to the + * container. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $signal Signal to send to the container as an integer or string (e.g. `SIGINT`). + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerKillNotFoundException + * @throws Exception\ContainerKillConflictException + * @throws Exception\ContainerKillInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerKill(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerKill($id, $queryParameters, $accept), $fetch); + } + + /** + * Change various configuration options of a container without having to + * recreate it. + * + * @param string $id ID or name of the container + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerUpdateNotFoundException + * @throws Exception\ContainerUpdateInternalServerErrorException + * + * @return Model\ContainersIdUpdatePostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function containerUpdate(string $id, ?Model\ContainersIdUpdatePostBody $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerUpdate($id, $requestBody), $fetch); + } + + /** + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $name New name for the container + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerRenameNotFoundException + * @throws Exception\ContainerRenameConflictException + * @throws Exception\ContainerRenameInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerRename(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerRename($id, $queryParameters, $accept), $fetch); + } + + /** + * Use the freezer cgroup to suspend all processes in a container. + * + * Traditionally, when suspending a process the `SIGSTOP` signal is used, + * which is observable by the process being suspended. With the freezer + * cgroup the process is unaware, and unable to capture, that it is being + * suspended, and subsequently resumed. + * + * @param string $id ID or name of the container + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerPauseNotFoundException + * @throws Exception\ContainerPauseInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerPause(string $id, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerPause($id, $accept), $fetch); + } + + /** + * Resume a container which has been paused. + * + * @param string $id ID or name of the container + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerUnpauseNotFoundException + * @throws Exception\ContainerUnpauseInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerUnpause(string $id, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerUnpause($id, $accept), $fetch); + } + + /** + * Attach to a container to read its output or send it input. You can attach + * to the same container multiple times and you can reattach to containers + * that have been detached. + * + * Either the `stream` or `logs` parameter must be `true` for this endpoint + * to do anything. + * + * See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) + * for more details. + * + * ### Hijacking + * + * This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, + * and `stderr` on the same socket. + * + * This is the response from the daemon for an attach request: + * + * ``` + * HTTP/1.1 200 OK + * Content-Type: application/vnd.docker.raw-stream + * + * [STREAM] + * ``` + * + * After the headers and two new lines, the TCP connection can now be used + * for raw, bidirectional communication between the client and server. + * + * To hint potential proxies about connection hijacking, the Docker client + * can also optionally send connection upgrade headers. + * + * For example, the client sends this request to upgrade the connection: + * + * ``` + * POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1 + * Upgrade: tcp + * Connection: Upgrade + * ``` + * + * The Docker daemon will respond with a `101 UPGRADED` response, and will + * similarly follow with the raw stream: + * + * ``` + * HTTP/1.1 101 UPGRADED + * Content-Type: application/vnd.docker.raw-stream + * Connection: Upgrade + * Upgrade: tcp + * + * [STREAM] + * ``` + * + * ### Stream format + * + * When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), + * the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream + * and the stream over the hijacked connected is multiplexed to separate out + * `stdout` and `stderr`. The stream consists of a series of frames, each + * containing a header and a payload. + * + * The header contains the information which the stream writes (`stdout` or + * `stderr`). It also contains the size of the associated frame encoded in + * the last four bytes (`uint32`). + * + * It is encoded on the first eight bytes like this: + * + * ```go + * header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + * ``` + * + * `STREAM_TYPE` can be: + * + * - 0: `stdin` (is written on `stdout`) + * - 1: `stdout` + * - 2: `stderr` + * + * `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size + * encoded as big endian. + * + * Following the header is the payload, which is the specified number of + * bytes of `STREAM_TYPE`. + * + * The simplest way to implement this protocol is the following: + * + * 1. Read 8 bytes. + * 2. Choose `stdout` or `stderr` depending on the first byte. + * 3. Extract the frame size from the last four bytes. + * 4. Read the extracted size and output it on the correct output. + * 5. Goto 1. + * + * ### Stream format when using a TTY + * + * When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), + * the stream is not multiplexed. The data exchanged over the hijacked + * connection is simply the raw data from the process PTY and client's + * `stdin`. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $detachKeys Override the key sequence for detaching a container.Format is a single + * character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + * `@`, `^`, `[`, `,` or `_`. + * @var bool $logs Replay previous logs from the container. + * + * This is useful for attaching to a container that has started and you + * want to output everything since the container started. + * + * If `stream` is also enabled, once all the previous output has been + * returned, it will seamlessly transition into streaming current + * output. + * @var bool $stream stream attached streams from the time the request was made onwards + * @var bool $stdin Attach to `stdin` + * @var bool $stdout Attach to `stdout` + * @var bool $stderr Attach to `stderr` + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/vnd.docker.raw-stream|application/vnd.docker.multiplexed-stream|application/json + * + * @throws Exception\ContainerAttachNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerAttach(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerAttach($id, $queryParameters, $accept), $fetch); + } + + /** + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $detachKeys Override the key sequence for detaching a container.Format is a single + * character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + * `@`, `^`, `[`, `,`, or `_`. + * @var bool $logs Return logs + * @var bool $stream Return stream + * @var bool $stdin Attach to `stdin` + * @var bool $stdout Attach to `stdout` + * @var bool $stderr Attach to `stderr` + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerAttachWebsocketBadRequestException + * @throws Exception\ContainerAttachWebsocketNotFoundException + * @throws Exception\ContainerAttachWebsocketInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerAttachWebsocket(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerAttachWebsocket($id, $queryParameters, $accept), $fetch); + } + + /** + * Block until a container stops, then returns the exit code. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $condition Wait until a container state reaches the given condition. + * + * Defaults to `not-running` if omitted or empty. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerWaitBadRequestException + * @throws Exception\ContainerWaitNotFoundException + * @throws Exception\ContainerWaitInternalServerErrorException + * + * @return Model\ContainerWaitResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function containerWait(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerWait($id, $queryParameters), $fetch); + } + + /** + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var bool $v remove anonymous volumes associated with the container + * @var bool $force if the container is running, kill it before removing it + * @var bool $link Remove the specified link associated with the container. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerDeleteBadRequestException + * @throws Exception\ContainerDeleteNotFoundException + * @throws Exception\ContainerDeleteConflictException + * @throws Exception\ContainerDeleteInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerDelete(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerDelete($id, $queryParameters, $accept), $fetch); + } + + /** + * Get a tar archive of a resource in the filesystem of container id. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $path Resource in the container’s filesystem to archive. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/x-tar|application/json + * + * @throws Exception\ContainerArchiveNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerArchive(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerArchive($id, $queryParameters, $accept), $fetch); + } + + /** + * A response header `X-Docker-Container-Path-Stat` is returned, containing + * a base64 - encoded JSON object with some filesystem header information + * about the path. + * + * @param string $id ID or name of the container + * @param array $queryParameters { + * + * @var string $path Resource in the container’s filesystem to archive. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ContainerArchiveInfoBadRequestException + * @throws Exception\ContainerArchiveInfoNotFoundException + * @throws Exception\ContainerArchiveInfoInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function containerArchiveInfo(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ContainerArchiveInfo($id, $queryParameters, $accept), $fetch); + } + + /** + * Upload a tar archive to be extracted to a path in the filesystem of container id. + * `path` parameter is asserted to be a directory. If it exists as a file, 400 error + * will be returned with message "not a directory". + * + * @param string $id ID or name of the container + * @param string|resource|\Psr\Http\Message\StreamInterface|null $requestBody + * @param array $queryParameters { + * + * @var string $path path to a directory in the container to extract the archive’s contents into + * @var string $noOverwriteDirNonDir if `1`, `true`, or `True` then it will be an error if unpacking the + * given content would cause an existing directory to be replaced with + * a non-directory and vice versa + * @var string $copyUIDGID If `1`, `true`, then it will copy UID/GID maps to the dest file or + * dir + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PutContainerArchiveBadRequestException + * @throws Exception\PutContainerArchiveForbiddenException + * @throws Exception\PutContainerArchiveNotFoundException + * @throws Exception\PutContainerArchiveInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function putContainerArchive(string $id, $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PutContainerArchive($id, $requestBody, $queryParameters, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + * + * Available filters: + * - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerPruneInternalServerErrorException + * + * @return Model\ContainersPrunePostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function containerPrune(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerPrune($queryParameters), $fetch); + } + + /** + * Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image. + * + * @param array $queryParameters { + * + * @var bool $all Show all images. Only images from a final layer (no children) are shown by default. + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the images list. + * + * Available filters: + * + * - `before`=(`[:]`, `` or ``) + * - `dangling=true` + * - `label=key` or `label="key=value"` of an image label + * - `reference`=(`[:]`) + * - `since`=(`[:]`, `` or ``) + * - `until=` + * @var bool $shared-size Compute and show shared size as a `SharedSize` field on each image + * @var bool $digests Show digest information as a `RepoDigests` field on each image. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageListInternalServerErrorException + * + * @return Model\ImageSummary[]|\Psr\Http\Message\ResponseInterface|null + */ + public function imageList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageList($queryParameters), $fetch); + } + + /** + * Build an image from a tar archive with a `Dockerfile` in it. + * + * The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/). + * + * The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + * + * The build is canceled if the client drops the connection by quitting or being killed. + * + * @param string|resource|\Psr\Http\Message\StreamInterface|null $requestBody + * @param array $queryParameters { + * + * @var string $dockerfile Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`. + * @var string $t A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters. + * @var string $extrahosts Extra hosts to add to /etc/hosts + * @var string $remote A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball. + * @var bool $q suppress verbose build output + * @var bool $nocache do not use the cache when building the image + * @var string $cachefrom JSON array of images used for build cache resolution + * @var string $pull attempt to pull the image even if an older image exists locally + * @var bool $rm remove intermediate containers after a successful build + * @var bool $forcerm always remove intermediate containers, even upon failure + * @var int $memory set memory limit for build + * @var int $memswap Total memory (memory + swap). Set as `-1` to disable swap. + * @var int $cpushares CPU shares (relative weight) + * @var string $cpusetcpus CPUs in which to allow execution (e.g., `0-3`, `0,1`). + * @var int $cpuperiod the length of a CPU period in microseconds + * @var int $cpuquota microseconds of CPU time that the container can get in a CPU period + * @var string $buildargs JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values. + * + * For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + * + * [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) + * @var int $shmsize Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. + * @var bool $squash Squash the resulting images layers into a single layer. *(Experimental release only.)* + * @var string $labels arbitrary key/value labels to set on the image, as a JSON map of string pairs + * @var string $networkmode Sets the networking mode for the run commands during build. Supported + * standard values are: `bridge`, `host`, `none`, and `container:`. + * Any other value is taken as a custom network's name or ID to which this + * container should connect to. + * @var string $platform Platform in the format os[/arch[/variant]] + * @var string $target Target build stage + * @var string $outputs BuildKit output configuration + * @var string $version Version of the builder backend to use. + * + * - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + * - `2` is [BuildKit](https://github.com/moby/buildkit) + * + * } + * + * @param array $headerParameters { + * + * @var string $Content-type + * @var string $X-Registry-Config This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + * + * The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: + * + * ``` + * { + * "docker.example.com": { + * "username": "janedoe", + * "password": "hunter2" + * }, + * "https://index.docker.io/v1/": { + * "username": "mobydock", + * "password": "conta1n3rize14" + * } + * } + * ``` + * + * Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageBuildBadRequestException + * @throws Exception\ImageBuildInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imageBuild($requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageBuild($requestBody, $queryParameters, $headerParameters), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var int $keep-storage Amount of disk space in bytes to keep for cache + * @var bool $all Remove all types of build cache + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the list of build cache objects. + * + * Available filters: + * + * - `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. + * - `id=` + * - `parent=` + * - `type=` + * - `description=` + * - `inuse` + * - `shared` + * - `private` + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\BuildPruneInternalServerErrorException + * + * @return Model\BuildPrunePostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function buildPrune(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\BuildPrune($queryParameters), $fetch); + } + + /** + * Pull or import an image. + * + * @param array $queryParameters { + * + * @var string $fromImage Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed. + * @var string $fromSrc Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image. + * @var string $repo Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image. + * @var string $tag Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled. + * @var string $message set commit message for imported image + * @var array $changes Apply `Dockerfile` instructions to the image that is created, + * for example: `changes=ENV DEBUG=true`. + * Note that `ENV DEBUG=true` should be URI component encoded. + * + * Supported `Dockerfile` instructions: + * `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` + * @var string $platform Platform in the format os[/arch[/variant]]. + * + * When used in combination with the `fromImage` option, the daemon checks + * if the given image is present in the local image cache with the given + * OS and Architecture, and otherwise attempts to pull the image. If the + * option is not set, the host's native OS and Architecture are used. + * If the given image does not exist in the local image cache, the daemon + * attempts to pull the image with the host's native OS and Architecture. + * If the given image does exists in the local image cache, but its OS or + * architecture does not match, a warning is produced. + * + * When used with the `fromSrc` option to import an image from an archive, + * this option sets the platform information for the imported image. If + * the option is not set, the host's native OS and Architecture are used + * for the imported image. + * + * } + * + * @param array $headerParameters { + * + * @var string $X-Registry-Auth A base64url-encoded auth configuration. + * + * Refer to the [authentication section](#section/Authentication) for + * details. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageCreateNotFoundException + * @throws Exception\ImageCreateInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imageCreate(?string $requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageCreate($requestBody, $queryParameters, $headerParameters), $fetch); + } + + /** + * Return low-level information about an image. + * + * @param string $name Image name or id + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageInspectNotFoundException + * @throws Exception\ImageInspectInternalServerErrorException + * + * @return Model\ImageInspect|\Psr\Http\Message\ResponseInterface|null + */ + public function imageInspect(string $name, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageInspect($name), $fetch); + } + + /** + * Return parent layers of an image. + * + * @param string $name Image name or ID + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageHistoryNotFoundException + * @throws Exception\ImageHistoryInternalServerErrorException + * + * @return Model\ImagesNameHistoryGetResponse200Item[]|\Psr\Http\Message\ResponseInterface|null + */ + public function imageHistory(string $name, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageHistory($name), $fetch); + } + + /** + * Push an image to a registry. + * + * If you wish to push an image on to a private registry, that image must + * already have a tag which references the registry. For example, + * `registry.example.com/myimage:latest`. + * + * The push is cancelled if the HTTP connection is closed. + * + * @param string $name image name or ID + * @param array $queryParameters { + * + * @var string $tag The tag to associate with the image on the registry. + * } + * + * @param array $headerParameters { + * + * @var string $X-Registry-Auth A base64url-encoded auth configuration. + * + * Refer to the [authentication section](#section/Authentication) for + * details. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ImagePushNotFoundException + * @throws Exception\ImagePushInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imagePush(string $name, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ImagePush($name, $queryParameters, $headerParameters, $accept), $fetch); + } + + /** + * Tag an image so that it becomes part of a repository. + * + * @param string $name image name or ID to tag + * @param array $queryParameters { + * + * @var string $repo The repository to tag in. For example, `someuser/someimage`. + * @var string $tag The name of the new tag. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ImageTagBadRequestException + * @throws Exception\ImageTagNotFoundException + * @throws Exception\ImageTagConflictException + * @throws Exception\ImageTagInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imageTag(string $name, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ImageTag($name, $queryParameters, $accept), $fetch); + } + + /** + * Remove an image, along with any untagged parent images that were + * referenced by that image. + * + * Images can't be removed if they have descendant images, are being + * used by a running container or are being used by a build. + * + * @param string $name Image name or ID + * @param array $queryParameters { + * + * @var bool $force Remove the image even if it is being used by stopped containers or has other tags + * @var bool $noprune Do not delete untagged parent images + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageDeleteNotFoundException + * @throws Exception\ImageDeleteConflictException + * @throws Exception\ImageDeleteInternalServerErrorException + * + * @return Model\ImageDeleteResponseItem[]|\Psr\Http\Message\ResponseInterface|null + */ + public function imageDelete(string $name, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageDelete($name, $queryParameters), $fetch); + } + + /** + * Search for an image on Docker Hub. + * + * @param array $queryParameters { + * + * @var string $term Term to search + * @var int $limit Maximum number of results to return + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + * + * - `is-official=(true|false)` + * - `stars=` Matches images that has at least 'number' stars. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageSearchInternalServerErrorException + * + * @return Model\ImagesSearchGetResponse200Item[]|\Psr\Http\Message\ResponseInterface|null + */ + public function imageSearch(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageSearch($queryParameters), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + * + * - `dangling=` When set to `true` (or `1`), prune only + * unused *and* untagged images. When set to `false` + * (or `0`), all unused images are pruned. + * - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImagePruneInternalServerErrorException + * + * @return Model\ImagesPrunePostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function imagePrune(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImagePrune($queryParameters), $fetch); + } + + /** + * Validate credentials for a registry and, if available, get an identity + * token for accessing the registry without password. + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SystemAuthUnauthorizedException + * @throws Exception\SystemAuthInternalServerErrorException + * + * @return Model\AuthPostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function systemAuth(?Model\AuthConfig $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SystemAuth($requestBody), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SystemInfoInternalServerErrorException + * + * @return Model\SystemInfo|\Psr\Http\Message\ResponseInterface|null + */ + public function systemInfo(string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SystemInfo(), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SystemVersionInternalServerErrorException + * + * @return Model\SystemVersion|\Psr\Http\Message\ResponseInterface|null + */ + public function systemVersion(string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SystemVersion(), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function systemPing(string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SystemPing(), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function systemPingHead(string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SystemPingHead(), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $container The ID or name of the container to commit + * @var string $repo Repository name for the created image + * @var string $tag Tag name for the create image + * @var string $comment Commit message + * @var string $author Author of the image (e.g., `John Hannibal Smith `) + * @var bool $pause Whether to pause the container before committing + * @var string $changes `Dockerfile` instructions to apply while committing + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageCommitNotFoundException + * @throws Exception\ImageCommitInternalServerErrorException + * + * @return Model\IdResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function imageCommit(?Model\ContainerConfig $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageCommit($requestBody, $queryParameters), $fetch); + } + + /** + * Stream real-time events from the server. + * + * Various objects within Docker report events when something happens to them. + * + * Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` + * + * Images report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` + * + * Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` + * + * Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune` + * + * The Docker daemon reports these events: `reload` + * + * Services report these events: `create`, `update`, and `remove` + * + * Nodes report these events: `create`, `update`, and `remove` + * + * Secrets report these events: `create`, `update`, and `remove` + * + * Configs report these events: `create`, `update`, and `remove` + * + * The Builder reports `prune` events + * + * @param array $queryParameters { + * + * @var string $since show events created since this timestamp then stream new events + * @var string $until show events created until this timestamp then stop streaming + * @var string $filters A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + * + * - `config=` config name or ID + * - `container=` container name or ID + * - `daemon=` daemon name or ID + * - `event=` event type + * - `image=` image name or ID + * - `label=` image or container label + * - `network=` network name or ID + * - `node=` node ID + * - `plugin`= plugin name or ID + * - `scope`= local or swarm + * - `secret=` secret name or ID + * - `service=` service name or ID + * - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + * - `volume=` volume name + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SystemEventsBadRequestException + * @throws Exception\SystemEventsInternalServerErrorException + * + * @return Model\EventMessage|\Psr\Http\Message\ResponseInterface|null + */ + public function systemEvents(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SystemEvents($queryParameters), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var array $type Object types, for which to compute and return data. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SystemDataUsageInternalServerErrorException + * + * @return Model\SystemDfGetJsonResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function systemDataUsage(array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SystemDataUsage($queryParameters, $accept), $fetch); + } + + /** + * Get a tarball containing all images and metadata for a repository. + * + * If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced. + * + * ### Image tarball format + * + * An image tarball contains one directory per image layer (named using its long ID), each containing these files: + * + * - `VERSION`: currently `1.0` - the file format version + * - `json`: detailed layer information, similar to `docker inspect layer_id` + * - `layer.tar`: A tarfile containing the filesystem changes in this layer + * + * The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions. + * + * If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs. + * + * ```json + * { + * "hello-world": { + * "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1" + * } + * } + * ``` + * + * @param string $name Image name or ID + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imageGet(string $name, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageGet($name), $fetch); + } + + /** + * Get a tarball containing all images and metadata for several image + * repositories. + * + * For each value of the `names` parameter: if it is a specific name and + * tag (e.g. `ubuntu:latest`), then only that image (and its parents) are + * returned; if it is an image ID, similarly only that image (and its parents) + * are returned and there would be no names referenced in the 'repositories' + * file for this image ID. + * + * For details on the format, see the [export image endpoint](#operation/ImageGet). + * + * @param array $queryParameters { + * + * @var array $names Image names to filter by + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imageGetAll(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageGetAll($queryParameters), $fetch); + } + + /** + * Load a set of images and tags into a repository. + * + * For details on the format, see the [export image endpoint](#operation/ImageGet). + * + * @param string|resource|\Psr\Http\Message\StreamInterface|null $requestBody + * @param array $queryParameters { + * + * @var bool $quiet Suppress progress details during load. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ImageLoadInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function imageLoad($requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ImageLoad($requestBody, $queryParameters), $fetch); + } + + /** + * Run a command inside a running container. + * + * @param string $id ID or name of container + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ContainerExecNotFoundException + * @throws Exception\ContainerExecConflictException + * @throws Exception\ContainerExecInternalServerErrorException + * + * @return Model\IdResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function containerExec(string $id, ?Model\ContainersIdExecPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ContainerExec($id, $requestBody), $fetch); + } + + /** + * Starts a previously set up exec instance. If detach is true, this endpoint + * returns immediately after starting the command. Otherwise, it sets up an + * interactive session with the command. + * + * @param string $id Exec instance ID + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/vnd.docker.raw-stream|application/vnd.docker.multiplexed-stream + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function execStart(string $id, ?Model\ExecIdStartPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ExecStart($id, $requestBody, $accept), $fetch); + } + + /** + * Resize the TTY session used by an exec instance. This endpoint only works + * if `tty` was specified as part of creating and starting the exec instance. + * + * @param string $id Exec instance ID + * @param array $queryParameters { + * + * @var int $h Height of the TTY session in characters + * @var int $w Width of the TTY session in characters + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ExecResizeBadRequestException + * @throws Exception\ExecResizeNotFoundException + * @throws Exception\ExecResizeInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function execResize(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ExecResize($id, $queryParameters, $accept), $fetch); + } + + /** + * Return low-level information about an exec instance. + * + * @param string $id Exec instance ID + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ExecInspectNotFoundException + * @throws Exception\ExecInspectInternalServerErrorException + * + * @return Model\ExecIdJsonGetResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function execInspect(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ExecInspect($id), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters JSON encoded value of the filters (a `map[string][]string`) to + * process on the volumes list. Available filters: + * + * - `dangling=` When set to `true` (or `1`), returns all + * volumes that are not in use by a container. When set to `false` + * (or `0`), only volumes that are in use by one or more + * containers are returned. + * - `driver=` Matches volumes based on their driver. + * - `label=` or `label=:` Matches volumes based on + * the presence of a `label` alone or a `label` and a value. + * - `name=` Matches all or part of a volume name. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\VolumeListInternalServerErrorException + * + * @return Model\VolumeListResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function volumeList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\VolumeList($queryParameters), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\VolumeCreateInternalServerErrorException + * + * @return Model\Volume|\Psr\Http\Message\ResponseInterface|null + */ + public function volumeCreate(?Model\VolumeCreateOptions $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\VolumeCreate($requestBody), $fetch); + } + + /** + * Instruct the driver to remove the volume. + * + * @param string $name Volume name or ID + * @param array $queryParameters { + * + * @var bool $force Force the removal of the volume + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\VolumeDeleteNotFoundException + * @throws Exception\VolumeDeleteConflictException + * @throws Exception\VolumeDeleteInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function volumeDelete(string $name, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\VolumeDelete($name, $queryParameters, $accept), $fetch); + } + + /** + * @param string $name Volume name or ID + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\VolumeInspectNotFoundException + * @throws Exception\VolumeInspectInternalServerErrorException + * + * @return Model\Volume|\Psr\Http\Message\ResponseInterface|null + */ + public function volumeInspect(string $name, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\VolumeInspect($name), $fetch); + } + + /** + * @param string $name The name or ID of the volume + * @param array $queryParameters { + * + * @var int $version The version number of the volume being updated. This is required to + * avoid conflicting writes. Found in the volume's `ClusterVolume` + * field. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\VolumeUpdateBadRequestException + * @throws Exception\VolumeUpdateNotFoundException + * @throws Exception\VolumeUpdateInternalServerErrorException + * @throws Exception\VolumeUpdateServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function volumeUpdate(string $name, ?Model\VolumesNamePutBody $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\VolumeUpdate($name, $requestBody, $queryParameters), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + * + * Available filters: + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + * - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\VolumePruneInternalServerErrorException + * + * @return Model\VolumesPrunePostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function volumePrune(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\VolumePrune($queryParameters), $fetch); + } + + /** + * Returns a list of networks. For details on the format, see the + * [network inspect endpoint](#operation/NetworkInspect). + * + * Note that it uses a different, smaller representation of a network than + * inspecting a single network. For example, the list of containers attached + * to the network is not propagated in API versions 1.28 and up. + * + * @param array $queryParameters { + * + * @var string $filters JSON encoded value of the filters (a `map[string][]string`) to process + * on the networks list. + * + * Available filters: + * + * - `dangling=` When set to `true` (or `1`), returns all + * networks that are not in use by a container. When set to `false` + * (or `0`), only networks that are in use by one or more + * containers are returned. + * - `driver=` Matches a network's driver. + * - `id=` Matches all or part of a network ID. + * - `label=` or `label==` of a network label. + * - `name=` Matches all or part of a network name. + * - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + * - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\NetworkListInternalServerErrorException + * + * @return Model\Network[]|\Psr\Http\Message\ResponseInterface|null + */ + public function networkList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\NetworkList($queryParameters), $fetch); + } + + /** + * @param string $id Network ID or name + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NetworkDeleteForbiddenException + * @throws Exception\NetworkDeleteNotFoundException + * @throws Exception\NetworkDeleteInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function networkDelete(string $id, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NetworkDelete($id, $accept), $fetch); + } + + /** + * @param string $id Network ID or name + * @param array $queryParameters { + * + * @var bool $verbose Detailed inspect output for troubleshooting + * @var string $scope Filter the network by scope (swarm, global, or local) + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\NetworkInspectNotFoundException + * @throws Exception\NetworkInspectInternalServerErrorException + * + * @return Model\Network|\Psr\Http\Message\ResponseInterface|null + */ + public function networkInspect(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\NetworkInspect($id, $queryParameters), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\NetworkCreateBadRequestException + * @throws Exception\NetworkCreateForbiddenException + * @throws Exception\NetworkCreateNotFoundException + * @throws Exception\NetworkCreateInternalServerErrorException + * + * @return Model\NetworksCreatePostResponse201|\Psr\Http\Message\ResponseInterface|null + */ + public function networkCreate(?Model\NetworksCreatePostBody $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\NetworkCreate($requestBody), $fetch); + } + + /** + * The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container. + * + * @param string $id Network ID or name + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NetworkConnectBadRequestException + * @throws Exception\NetworkConnectForbiddenException + * @throws Exception\NetworkConnectNotFoundException + * @throws Exception\NetworkConnectInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function networkConnect(string $id, ?Model\NetworksIdConnectPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NetworkConnect($id, $requestBody, $accept), $fetch); + } + + /** + * @param string $id Network ID or name + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NetworkDisconnectForbiddenException + * @throws Exception\NetworkDisconnectNotFoundException + * @throws Exception\NetworkDisconnectInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function networkDisconnect(string $id, ?Model\NetworksIdDisconnectPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NetworkDisconnect($id, $requestBody, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + * + * Available filters: + * - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\NetworkPruneInternalServerErrorException + * + * @return Model\NetworksPrunePostResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function networkPrune(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\NetworkPrune($queryParameters), $fetch); + } + + /** + * Returns information about installed plugins. + * + * @param array $queryParameters { + * + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the plugin list. + * + * Available filters: + * + * - `capability=` + * - `enable=|` + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\PluginListInternalServerErrorException + * + * @return Model\Plugin[]|\Psr\Http\Message\ResponseInterface|null + */ + public function pluginList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\PluginList($queryParameters), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $remote The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\GetPluginPrivilegesInternalServerErrorException + * + * @return Model\PluginPrivilege[]|\Psr\Http\Message\ResponseInterface|null + */ + public function getPluginPrivileges(array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\GetPluginPrivileges($queryParameters, $accept), $fetch); + } + + /** + * Pulls and installs a plugin. After the plugin is installed, it can be + * enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). + * + * @param Model\PluginPrivilege[]|null $requestBody + * @param array $queryParameters { + * + * @var string $remote Remote reference for plugin to install. + * + * The `:latest` tag is optional, and is used as the default if omitted. + * @var string $name Local name for the pulled plugin. + * + * The `:latest` tag is optional, and is used as the default if omitted. + * + * } + * + * @param array $headerParameters { + * + * @var string $X-Registry-Auth A base64url-encoded auth configuration to use when pulling a plugin + * from a registry. + * + * Refer to the [authentication section](#section/Authentication) for + * details. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\PluginPullInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginPull(?array $requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\PluginPull($requestBody, $queryParameters, $headerParameters), $fetch); + } + + /** + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginInspectNotFoundException + * @throws Exception\PluginInspectInternalServerErrorException + * + * @return Model\Plugin|\Psr\Http\Message\ResponseInterface|null + */ + public function pluginInspect(string $name, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginInspect($name, $accept), $fetch); + } + + /** + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param array $queryParameters { + * + * @var bool $force Disable the plugin before removing. This may result in issues if the + * plugin is in use by a container. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginDeleteNotFoundException + * @throws Exception\PluginDeleteInternalServerErrorException + * + * @return Model\Plugin|\Psr\Http\Message\ResponseInterface|null + */ + public function pluginDelete(string $name, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginDelete($name, $queryParameters, $accept), $fetch); + } + + /** + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param array $queryParameters { + * + * @var int $timeout Set the HTTP client timeout (in seconds) + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginEnableNotFoundException + * @throws Exception\PluginEnableInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginEnable(string $name, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginEnable($name, $queryParameters, $accept), $fetch); + } + + /** + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param array $queryParameters { + * + * @var bool $force Force disable a plugin even if still in use. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginDisableNotFoundException + * @throws Exception\PluginDisableInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginDisable(string $name, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginDisable($name, $queryParameters, $accept), $fetch); + } + + /** + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param Model\PluginPrivilege[]|null $requestBody + * @param array $queryParameters { + * + * @var string $remote Remote reference to upgrade to. + * + * The `:latest` tag is optional, and is used as the default if omitted. + * + * } + * + * @param array $headerParameters { + * + * @var string $X-Registry-Auth A base64url-encoded auth configuration to use when pulling a plugin + * from a registry. + * + * Refer to the [authentication section](#section/Authentication) for + * details. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginUpgradeNotFoundException + * @throws Exception\PluginUpgradeInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginUpgrade(string $name, ?array $requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginUpgrade($name, $requestBody, $queryParameters, $headerParameters, $accept), $fetch); + } + + /** + * @param string|resource|\Psr\Http\Message\StreamInterface|null $requestBody + * @param array $queryParameters { + * + * @var string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginCreateInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginCreate($requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginCreate($requestBody, $queryParameters, $accept), $fetch); + } + + /** + * Push a plugin to the registry. + * + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginPushNotFoundException + * @throws Exception\PluginPushInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginPush(string $name, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginPush($name, $accept), $fetch); + } + + /** + * @param string $name The name of the plugin. The `:latest` tag is optional, and is the + * default if omitted. + * @param array[]|null $requestBody + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\PluginSetNotFoundException + * @throws Exception\PluginSetInternalServerErrorException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function pluginSet(string $name, ?array $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\PluginSet($name, $requestBody, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + * + * Available filters: + * - `id=` + * - `label=` + * - `membership=`(`accepted`|`pending`)` + * - `name=` + * - `node.label=` + * - `role=`(`manager`|`worker`)` + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NodeListInternalServerErrorException + * @throws Exception\NodeListServiceUnavailableException + * + * @return Model\Node[]|\Psr\Http\Message\ResponseInterface|null + */ + public function nodeList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NodeList($queryParameters, $accept), $fetch); + } + + /** + * @param string $id The ID or name of the node + * @param array $queryParameters { + * + * @var bool $force Force remove a node from the swarm + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NodeDeleteNotFoundException + * @throws Exception\NodeDeleteInternalServerErrorException + * @throws Exception\NodeDeleteServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function nodeDelete(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NodeDelete($id, $queryParameters, $accept), $fetch); + } + + /** + * @param string $id The ID or name of the node + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NodeInspectNotFoundException + * @throws Exception\NodeInspectInternalServerErrorException + * @throws Exception\NodeInspectServiceUnavailableException + * + * @return Model\Node|\Psr\Http\Message\ResponseInterface|null + */ + public function nodeInspect(string $id, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NodeInspect($id, $accept), $fetch); + } + + /** + * @param string $id The ID of the node + * @param array $queryParameters { + * + * @var int $version The version number of the node object being updated. This is required + * to avoid conflicting writes. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\NodeUpdateBadRequestException + * @throws Exception\NodeUpdateNotFoundException + * @throws Exception\NodeUpdateInternalServerErrorException + * @throws Exception\NodeUpdateServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function nodeUpdate(string $id, ?Model\NodeSpec $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\NodeUpdate($id, $requestBody, $queryParameters, $accept), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SwarmInspectNotFoundException + * @throws Exception\SwarmInspectInternalServerErrorException + * @throws Exception\SwarmInspectServiceUnavailableException + * + * @return Model\Swarm|\Psr\Http\Message\ResponseInterface|null + */ + public function swarmInspect(string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SwarmInspect($accept), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SwarmInitBadRequestException + * @throws Exception\SwarmInitInternalServerErrorException + * @throws Exception\SwarmInitServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function swarmInit(?Model\SwarmInitPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SwarmInit($requestBody, $accept), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SwarmJoinBadRequestException + * @throws Exception\SwarmJoinInternalServerErrorException + * @throws Exception\SwarmJoinServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function swarmJoin(?Model\SwarmJoinPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SwarmJoin($requestBody, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var bool $force Force leave swarm, even if this is the last manager or that it will + * break the cluster. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SwarmLeaveInternalServerErrorException + * @throws Exception\SwarmLeaveServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function swarmLeave(array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SwarmLeave($queryParameters, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var int $version The version number of the swarm object being updated. This is + * required to avoid conflicting writes. + * @var bool $rotateWorkerToken rotate the worker join token + * @var bool $rotateManagerToken rotate the manager join token + * @var bool $rotateManagerUnlockKey Rotate the manager unlock key. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SwarmUpdateBadRequestException + * @throws Exception\SwarmUpdateInternalServerErrorException + * @throws Exception\SwarmUpdateServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function swarmUpdate(?Model\SwarmSpec $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SwarmUpdate($requestBody, $queryParameters, $accept), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SwarmUnlockkeyInternalServerErrorException + * @throws Exception\SwarmUnlockkeyServiceUnavailableException + * + * @return Model\SwarmUnlockkeyGetJsonResponse200|\Psr\Http\Message\ResponseInterface|null + */ + public function swarmUnlockkey(string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SwarmUnlockkey($accept), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SwarmUnlockInternalServerErrorException + * @throws Exception\SwarmUnlockServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function swarmUnlock(?Model\SwarmUnlockPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SwarmUnlock($requestBody), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the services list. + * + * Available filters: + * + * - `id=` + * - `label=` + * - `mode=["replicated"|"global"]` + * - `name=` + * @var bool $status Include service status, with count of running and desired tasks. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ServiceListInternalServerErrorException + * @throws Exception\ServiceListServiceUnavailableException + * + * @return Model\Service[]|\Psr\Http\Message\ResponseInterface|null + */ + public function serviceList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ServiceList($queryParameters, $accept), $fetch); + } + + /** + * @param array $headerParameters { + * + * @var string $X-Registry-Auth A base64url-encoded auth configuration for pulling from private + * registries. + * + * Refer to the [authentication section](#section/Authentication) for + * details. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ServiceCreateBadRequestException + * @throws Exception\ServiceCreateForbiddenException + * @throws Exception\ServiceCreateConflictException + * @throws Exception\ServiceCreateInternalServerErrorException + * @throws Exception\ServiceCreateServiceUnavailableException + * + * @return Model\ServiceCreateResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function serviceCreate(?Model\ServicesCreatePostBody $requestBody = null, array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ServiceCreate($requestBody, $headerParameters), $fetch); + } + + /** + * @param string $id ID or name of service + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ServiceDeleteNotFoundException + * @throws Exception\ServiceDeleteInternalServerErrorException + * @throws Exception\ServiceDeleteServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function serviceDelete(string $id, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ServiceDelete($id, $accept), $fetch); + } + + /** + * @param string $id ID or name of service + * @param array $queryParameters { + * + * @var bool $insertDefaults Fill empty fields with default values. + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ServiceInspectNotFoundException + * @throws Exception\ServiceInspectInternalServerErrorException + * @throws Exception\ServiceInspectServiceUnavailableException + * + * @return Model\Service|\Psr\Http\Message\ResponseInterface|null + */ + public function serviceInspect(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ServiceInspect($id, $queryParameters, $accept), $fetch); + } + + /** + * @param string $id ID or name of service + * @param array $queryParameters { + * + * @var int $version The version number of the service object being updated. This is + * required to avoid conflicting writes. + * This version number should be the value as currently set on the + * service *before* the update. You can find the current version by + * calling `GET /services/{id}` + * @var string $registryAuthFrom if the `X-Registry-Auth` header is not specified, this parameter + * indicates where to find registry authorization credentials + * @var string $rollback Set to this parameter to `previous` to cause a server-side rollback + * to the previous service spec. The supplied spec will be ignored in + * this case. + * + * } + * + * @param array $headerParameters { + * + * @var string $X-Registry-Auth A base64url-encoded auth configuration for pulling from private + * registries. + * + * Refer to the [authentication section](#section/Authentication) for + * details. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ServiceUpdateBadRequestException + * @throws Exception\ServiceUpdateNotFoundException + * @throws Exception\ServiceUpdateInternalServerErrorException + * @throws Exception\ServiceUpdateServiceUnavailableException + * + * @return Model\ServiceUpdateResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function serviceUpdate(string $id, ?Model\ServicesIdUpdatePostBody $requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ServiceUpdate($id, $requestBody, $queryParameters, $headerParameters), $fetch); + } + + /** + * Get `stdout` and `stderr` logs from a service. See also + * [`/containers/{id}/logs`](#operation/ContainerLogs). + * + **Note**: This endpoint works only for services with the `local`, + * `json-file` or `journald` logging drivers. + * + * @param string $id ID or name of the service + * @param array $queryParameters { + * + * @var bool $details show service context and extra details provided to logs + * @var bool $follow keep connection after returning logs + * @var bool $stdout Return logs from `stdout` + * @var bool $stderr Return logs from `stderr` + * @var int $since Only return logs since this time, as a UNIX timestamp + * @var bool $timestamps Add timestamps to every log line + * @var string $tail Only return this number of log lines from the end of the logs. + * Specify as an integer or `all` to output all log lines. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/vnd.docker.raw-stream|application/vnd.docker.multiplexed-stream|application/json + * + * @throws Exception\ServiceLogsNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function serviceLogs(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ServiceLogs($id, $queryParameters, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the tasks list. + * + * Available filters: + * + * - `desired-state=(running | shutdown | accepted)` + * - `id=` + * - `label=key` or `label="key=value"` + * - `name=` + * - `node=` + * - `service=` + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\TaskListInternalServerErrorException + * @throws Exception\TaskListServiceUnavailableException + * + * @return Model\Task[]|\Psr\Http\Message\ResponseInterface|null + */ + public function taskList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\TaskList($queryParameters), $fetch); + } + + /** + * @param string $id ID of the task + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\TaskInspectNotFoundException + * @throws Exception\TaskInspectInternalServerErrorException + * @throws Exception\TaskInspectServiceUnavailableException + * + * @return Model\Task|\Psr\Http\Message\ResponseInterface|null + */ + public function taskInspect(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\TaskInspect($id), $fetch); + } + + /** + * Get `stdout` and `stderr` logs from a task. + * See also [`/containers/{id}/logs`](#operation/ContainerLogs). + * + **Note**: This endpoint works only for services with the `local`, + * `json-file` or `journald` logging drivers. + * + * @param string $id ID of the task + * @param array $queryParameters { + * + * @var bool $details show task context and extra details provided to logs + * @var bool $follow keep connection after returning logs + * @var bool $stdout Return logs from `stdout` + * @var bool $stderr Return logs from `stderr` + * @var int $since Only return logs since this time, as a UNIX timestamp + * @var bool $timestamps Add timestamps to every log line + * @var string $tail Only return this number of log lines from the end of the logs. + * Specify as an integer or `all` to output all log lines. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/vnd.docker.raw-stream|application/vnd.docker.multiplexed-stream|application/json + * + * @throws Exception\TaskLogsNotFoundException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function taskLogs(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\TaskLogs($id, $queryParameters, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the secrets list. + * + * Available filters: + * + * - `id=` + * - `label= or label==value` + * - `name=` + * - `names=` + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SecretListInternalServerErrorException + * @throws Exception\SecretListServiceUnavailableException + * + * @return Model\Secret[]|\Psr\Http\Message\ResponseInterface|null + */ + public function secretList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SecretList($queryParameters), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SecretCreateConflictException + * @throws Exception\SecretCreateInternalServerErrorException + * @throws Exception\SecretCreateServiceUnavailableException + * + * @return Model\IdResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function secretCreate(?Model\SecretsCreatePostBody $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SecretCreate($requestBody), $fetch); + } + + /** + * @param string $id ID of the secret + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SecretDeleteNotFoundException + * @throws Exception\SecretDeleteInternalServerErrorException + * @throws Exception\SecretDeleteServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function secretDelete(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SecretDelete($id), $fetch); + } + + /** + * @param string $id ID of the secret + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\SecretInspectNotFoundException + * @throws Exception\SecretInspectInternalServerErrorException + * @throws Exception\SecretInspectServiceUnavailableException + * + * @return Model\Secret|\Psr\Http\Message\ResponseInterface|null + */ + public function secretInspect(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\SecretInspect($id), $fetch); + } + + /** + * @param string $id The ID or name of the secret + * @param array $queryParameters { + * + * @var int $version The version number of the secret object being updated. This is + * required to avoid conflicting writes. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\SecretUpdateBadRequestException + * @throws Exception\SecretUpdateNotFoundException + * @throws Exception\SecretUpdateInternalServerErrorException + * @throws Exception\SecretUpdateServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function secretUpdate(string $id, ?Model\SecretSpec $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\SecretUpdate($id, $requestBody, $queryParameters, $accept), $fetch); + } + + /** + * @param array $queryParameters { + * + * @var string $filters A JSON encoded value of the filters (a `map[string][]string`) to + * process on the configs list. + * + * Available filters: + * + * - `id=` + * - `label= or label==value` + * - `name=` + * - `names=` + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ConfigListInternalServerErrorException + * @throws Exception\ConfigListServiceUnavailableException + * + * @return Model\Config[]|\Psr\Http\Message\ResponseInterface|null + */ + public function configList(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ConfigList($queryParameters), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ConfigCreateConflictException + * @throws Exception\ConfigCreateInternalServerErrorException + * @throws Exception\ConfigCreateServiceUnavailableException + * + * @return Model\IdResponse|\Psr\Http\Message\ResponseInterface|null + */ + public function configCreate(?Model\ConfigsCreatePostBody $requestBody = null, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ConfigCreate($requestBody), $fetch); + } + + /** + * @param string $id ID of the config + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ConfigDeleteNotFoundException + * @throws Exception\ConfigDeleteInternalServerErrorException + * @throws Exception\ConfigDeleteServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function configDelete(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ConfigDelete($id), $fetch); + } + + /** + * @param string $id ID of the config + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\ConfigInspectNotFoundException + * @throws Exception\ConfigInspectInternalServerErrorException + * @throws Exception\ConfigInspectServiceUnavailableException + * + * @return Model\Config|\Psr\Http\Message\ResponseInterface|null + */ + public function configInspect(string $id, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\ConfigInspect($id), $fetch); + } + + /** + * @param string $id The ID or name of the config + * @param array $queryParameters { + * + * @var int $version The version number of the config object being updated. This is + * required to avoid conflicting writes. + * + * } + * + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * @param array $accept Accept content header application/json|text/plain + * + * @throws Exception\ConfigUpdateBadRequestException + * @throws Exception\ConfigUpdateNotFoundException + * @throws Exception\ConfigUpdateInternalServerErrorException + * @throws Exception\ConfigUpdateServiceUnavailableException + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function configUpdate(string $id, ?Model\ConfigSpec $requestBody = null, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new Endpoint\ConfigUpdate($id, $requestBody, $queryParameters, $accept), $fetch); + } + + /** + * Return image digest and platform information by contacting the registry. + * + * @param string $name Image name or id + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @throws Exception\DistributionInspectUnauthorizedException + * @throws Exception\DistributionInspectInternalServerErrorException + * + * @return Model\DistributionInspect|\Psr\Http\Message\ResponseInterface|null + */ + public function distributionInspect(string $name, string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\DistributionInspect($name), $fetch); + } + + /** + * @param string $fetch Fetch mode to use (can be OBJECT or RESPONSE) + * + * @return \Psr\Http\Message\ResponseInterface|null + */ + public function session(string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new Endpoint\Session(), $fetch); + } + + public static function create($httpClient = null, array $additionalPlugins = [], array $additionalNormalizers = []) + { + if (null === $httpClient) { + $httpClient = \Http\Discovery\Psr18ClientDiscovery::find(); + $plugins = []; + $uri = \Http\Discovery\Psr17FactoryDiscovery::findUriFactory()->createUri('/v1.45'); + $plugins[] = new \Http\Client\Common\Plugin\AddPathPlugin($uri); + if (\count($additionalPlugins) > 0) { + $plugins = array_merge($plugins, $additionalPlugins); + } + $httpClient = new \Http\Client\Common\PluginClient($httpClient, $plugins); + } + $requestFactory = \Http\Discovery\Psr17FactoryDiscovery::findRequestFactory(); + $streamFactory = \Http\Discovery\Psr17FactoryDiscovery::findStreamFactory(); + $normalizers = [new \Symfony\Component\Serializer\Normalizer\ArrayDenormalizer(), new Normalizer\JaneObjectNormalizer()]; + if (\count($additionalNormalizers) > 0) { + $normalizers = array_merge($normalizers, $additionalNormalizers); + } + $serializer = new \Symfony\Component\Serializer\Serializer($normalizers, [new \Symfony\Component\Serializer\Encoder\JsonEncoder(new \Symfony\Component\Serializer\Encoder\JsonEncode(), new \Symfony\Component\Serializer\Encoder\JsonDecode(['json_decode_associative' => true]))]); + + return new static($httpClient, $requestFactory, $serializer, $streamFactory); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/BuildPrune.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/BuildPrune.php new file mode 100644 index 000000000..42ff79e4b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/BuildPrune.php @@ -0,0 +1,91 @@ +` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. + * - `id=` + * - `parent=` + * - `type=` + * - `description=` + * - `inuse` + * - `shared` + * - `private` + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/build/prune'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['keep-storage', 'all', 'filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('keep-storage', ['int']); + $optionsResolver->addAllowedTypes('all', ['bool']); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\BuildPruneInternalServerErrorException + * + * @return \Docker\API\Model\BuildPrunePostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\BuildPrunePostResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\BuildPruneInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigCreate.php new file mode 100644 index 000000000..85fe1d9ca --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigCreate.php @@ -0,0 +1,69 @@ +body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/configs/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ConfigsCreatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ConfigCreateConflictException + * @throws \Docker\API\Exception\ConfigCreateInternalServerErrorException + * @throws \Docker\API\Exception\ConfigCreateServiceUnavailableException + * + * @return \Docker\API\Model\IdResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\IdResponse', 'json'); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigCreateConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigCreateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigDelete.php new file mode 100644 index 000000000..fab8786a2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigDelete.php @@ -0,0 +1,68 @@ +id = $id; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/configs/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ConfigDeleteNotFoundException + * @throws \Docker\API\Exception\ConfigDeleteInternalServerErrorException + * @throws \Docker\API\Exception\ConfigDeleteServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigDeleteServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigInspect.php new file mode 100644 index 000000000..55f69426d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigInspect.php @@ -0,0 +1,69 @@ +id = $id; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/configs/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ConfigInspectNotFoundException + * @throws \Docker\API\Exception\ConfigInspectInternalServerErrorException + * @throws \Docker\API\Exception\ConfigInspectServiceUnavailableException + * + * @return \Docker\API\Model\Config|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Config', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigInspectServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigList.php new file mode 100644 index 000000000..fff29cf99 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigList.php @@ -0,0 +1,87 @@ +` + * - `label= or label==value` + * - `name=` + * - `names=` + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/configs'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ConfigListInternalServerErrorException + * @throws \Docker\API\Exception\ConfigListServiceUnavailableException + * + * @return \Docker\API\Model\Config[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Config[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigListServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigUpdate.php new file mode 100644 index 000000000..d970667dc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ConfigUpdate.php @@ -0,0 +1,106 @@ +id = $id; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/configs/{id}/update'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ConfigSpec) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\ConfigSpec) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['version']); + $optionsResolver->setRequired(['version']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('version', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ConfigUpdateBadRequestException + * @throws \Docker\API\Exception\ConfigUpdateNotFoundException + * @throws \Docker\API\Exception\ConfigUpdateInternalServerErrorException + * @throws \Docker\API\Exception\ConfigUpdateServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigUpdateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigUpdateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ConfigUpdateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerArchive.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerArchive.php new file mode 100644 index 000000000..23a3c4b68 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerArchive.php @@ -0,0 +1,90 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/archive'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/x-tar', 'application/json']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['path']); + $optionsResolver->setRequired(['path']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('path', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerArchiveNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if (400 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerArchiveNotFoundException($response); + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerArchiveInfo.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerArchiveInfo.php new file mode 100644 index 000000000..86d663701 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerArchiveInfo.php @@ -0,0 +1,96 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'HEAD'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/archive'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['path']); + $optionsResolver->setRequired(['path']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('path', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerArchiveInfoBadRequestException + * @throws \Docker\API\Exception\ContainerArchiveInfoNotFoundException + * @throws \Docker\API\Exception\ContainerArchiveInfoInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerArchiveInfoBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerArchiveInfoNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerArchiveInfoInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerAttach.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerAttach.php new file mode 100644 index 000000000..a7b40bfbd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerAttach.php @@ -0,0 +1,204 @@ +` where `` is one of: `a-z`, + * `@`, `^`, `[`, `,` or `_`. + * @var bool $logs Replay previous logs from the container. + * + * This is useful for attaching to a container that has started and you + * want to output everything since the container started. + * + * If `stream` is also enabled, once all the previous output has been + * returned, it will seamlessly transition into streaming current + * output. + * @var bool $stream stream attached streams from the time the request was made onwards + * @var bool $stdin Attach to `stdin` + * @var bool $stdout Attach to `stdout` + * @var bool $stderr Attach to `stderr` + * } + * + * @param array $accept Accept content header application/vnd.docker.raw-stream|application/vnd.docker.multiplexed-stream|application/json + */ + public function __construct(string $id, array $queryParameters = [], array $accept = []) + { + $this->id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/attach'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/vnd.docker.raw-stream', 'application/vnd.docker.multiplexed-stream', 'application/json']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['detachKeys', 'logs', 'stream', 'stdin', 'stdout', 'stderr']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['logs' => false, 'stream' => false, 'stdin' => false, 'stdout' => false, 'stderr' => false]); + $optionsResolver->addAllowedTypes('detachKeys', ['string']); + $optionsResolver->addAllowedTypes('logs', ['bool']); + $optionsResolver->addAllowedTypes('stream', ['bool']); + $optionsResolver->addAllowedTypes('stdin', ['bool']); + $optionsResolver->addAllowedTypes('stdout', ['bool']); + $optionsResolver->addAllowedTypes('stderr', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerAttachNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (101 === $status) { + } + if (200 === $status) { + } + if (400 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerAttachNotFoundException($response); + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerAttachWebsocket.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerAttachWebsocket.php new file mode 100644 index 000000000..136bd9d84 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerAttachWebsocket.php @@ -0,0 +1,106 @@ +` where `` is one of: `a-z`, + * `@`, `^`, `[`, `,`, or `_`. + * @var bool $logs Return logs + * @var bool $stream Return stream + * @var bool $stdin Attach to `stdin` + * @var bool $stdout Attach to `stdout` + * @var bool $stderr Attach to `stderr` + * } + * + * @param array $accept Accept content header application/json|text/plain + */ + public function __construct(string $id, array $queryParameters = [], array $accept = []) + { + $this->id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/attach/ws'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['detachKeys', 'logs', 'stream', 'stdin', 'stdout', 'stderr']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['logs' => false, 'stream' => false, 'stdin' => false, 'stdout' => false, 'stderr' => false]); + $optionsResolver->addAllowedTypes('detachKeys', ['string']); + $optionsResolver->addAllowedTypes('logs', ['bool']); + $optionsResolver->addAllowedTypes('stream', ['bool']); + $optionsResolver->addAllowedTypes('stdin', ['bool']); + $optionsResolver->addAllowedTypes('stdout', ['bool']); + $optionsResolver->addAllowedTypes('stderr', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerAttachWebsocketBadRequestException + * @throws \Docker\API\Exception\ContainerAttachWebsocketNotFoundException + * @throws \Docker\API\Exception\ContainerAttachWebsocketInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (101 === $status) { + } + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerAttachWebsocketBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerAttachWebsocketNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerAttachWebsocketInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerChanges.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerChanges.php new file mode 100644 index 000000000..6c692ab0e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerChanges.php @@ -0,0 +1,72 @@ +id = $id; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/changes'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ContainerChangesNotFoundException + * @throws \Docker\API\Exception\ContainerChangesInternalServerErrorException + * + * @return \Docker\API\Model\FilesystemChange[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\FilesystemChange[]', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerChangesNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerChangesInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerCreate.php new file mode 100644 index 000000000..151a98039 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerCreate.php @@ -0,0 +1,113 @@ +body = $requestBody; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/containers/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ContainersCreatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\ContainersCreatePostBody) { + return [['Content-Type' => ['application/octet-stream']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['name', 'platform']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('name', ['string']); + $optionsResolver->addAllowedTypes('platform', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerCreateBadRequestException + * @throws \Docker\API\Exception\ContainerCreateNotFoundException + * @throws \Docker\API\Exception\ContainerCreateConflictException + * @throws \Docker\API\Exception\ContainerCreateInternalServerErrorException + * + * @return \Docker\API\Model\ContainerCreateResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainerCreateResponse', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerCreateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerCreateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerCreateConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerDelete.php new file mode 100644 index 000000000..280bc5c84 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerDelete.php @@ -0,0 +1,100 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['v', 'force', 'link']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['v' => false, 'force' => false, 'link' => false]); + $optionsResolver->addAllowedTypes('v', ['bool']); + $optionsResolver->addAllowedTypes('force', ['bool']); + $optionsResolver->addAllowedTypes('link', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerDeleteBadRequestException + * @throws \Docker\API\Exception\ContainerDeleteNotFoundException + * @throws \Docker\API\Exception\ContainerDeleteConflictException + * @throws \Docker\API\Exception\ContainerDeleteInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerDeleteBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerDeleteConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerExec.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerExec.php new file mode 100644 index 000000000..563051a36 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerExec.php @@ -0,0 +1,76 @@ +id = $id; + $this->body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/exec'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ContainersIdExecPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ContainerExecNotFoundException + * @throws \Docker\API\Exception\ContainerExecConflictException + * @throws \Docker\API\Exception\ContainerExecInternalServerErrorException + * + * @return \Docker\API\Model\IdResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\IdResponse', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerExecNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerExecConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerExecInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerExport.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerExport.php new file mode 100644 index 000000000..51e57e0ef --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerExport.php @@ -0,0 +1,71 @@ +id = $id; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/export'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/octet-stream', 'application/json']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\ContainerExportNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerExportNotFoundException($response); + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerInspect.php new file mode 100644 index 000000000..8b191af70 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerInspect.php @@ -0,0 +1,83 @@ +id = $id; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/json'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['size']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['size' => false]); + $optionsResolver->addAllowedTypes('size', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerInspectNotFoundException + * @throws \Docker\API\Exception\ContainerInspectInternalServerErrorException + * + * @return \Docker\API\Model\ContainersIdJsonGetResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainersIdJsonGetResponse200', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerKill.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerKill.php new file mode 100644 index 000000000..bb2077eb6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerKill.php @@ -0,0 +1,96 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/kill'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['signal']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['signal' => 'SIGKILL']); + $optionsResolver->addAllowedTypes('signal', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerKillNotFoundException + * @throws \Docker\API\Exception\ContainerKillConflictException + * @throws \Docker\API\Exception\ContainerKillInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerKillNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerKillConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerKillInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerList.php new file mode 100644 index 000000000..3a664e999 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerList.php @@ -0,0 +1,113 @@ +[:]`, ``, or ``) + * - `before`=(`` or ``) + * - `expose`=(`[/]`|`/[]`) + * - `exited=` containers with exit code of `` + * - `health`=(`starting`|`healthy`|`unhealthy`|`none`) + * - `id=` a container's ID + * - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) + * - `is-task=`(`true`|`false`) + * - `label=key` or `label="key=value"` of a container label + * - `name=` a container's name + * - `network`=(`` or ``) + * - `publish`=(`[/]`|`/[]`) + * - `since`=(`` or ``) + * - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + * - `volume`=(`` or ``) + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/containers/json'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['all', 'limit', 'size', 'filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['all' => false, 'size' => false]); + $optionsResolver->addAllowedTypes('all', ['bool']); + $optionsResolver->addAllowedTypes('limit', ['int']); + $optionsResolver->addAllowedTypes('size', ['bool']); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerListBadRequestException + * @throws \Docker\API\Exception\ContainerListInternalServerErrorException + * + * @return \Docker\API\Model\ContainerSummary[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainerSummary[]', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerListBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerLogs.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerLogs.php new file mode 100644 index 000000000..79152dade --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerLogs.php @@ -0,0 +1,105 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/logs'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/vnd.docker.raw-stream', 'application/vnd.docker.multiplexed-stream', 'application/json']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['follow', 'stdout', 'stderr', 'since', 'until', 'timestamps', 'tail']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['follow' => false, 'stdout' => false, 'stderr' => false, 'since' => 0, 'until' => 0, 'timestamps' => false, 'tail' => 'all']); + $optionsResolver->addAllowedTypes('follow', ['bool']); + $optionsResolver->addAllowedTypes('stdout', ['bool']); + $optionsResolver->addAllowedTypes('stderr', ['bool']); + $optionsResolver->addAllowedTypes('since', ['int']); + $optionsResolver->addAllowedTypes('until', ['int']); + $optionsResolver->addAllowedTypes('timestamps', ['bool']); + $optionsResolver->addAllowedTypes('tail', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerLogsNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerLogsNotFoundException($response); + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerPause.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerPause.php new file mode 100644 index 000000000..f7afb3d99 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerPause.php @@ -0,0 +1,78 @@ +id = $id; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/pause'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\ContainerPauseNotFoundException + * @throws \Docker\API\Exception\ContainerPauseInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerPauseNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerPauseInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerPrune.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerPrune.php new file mode 100644 index 000000000..b2f1851f9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerPrune.php @@ -0,0 +1,79 @@ +` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/containers/prune'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerPruneInternalServerErrorException + * + * @return \Docker\API\Model\ContainersPrunePostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainersPrunePostResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerPruneInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerRename.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerRename.php new file mode 100644 index 000000000..2b41a510c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerRename.php @@ -0,0 +1,92 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/rename'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['name']); + $optionsResolver->setRequired(['name']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('name', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerRenameNotFoundException + * @throws \Docker\API\Exception\ContainerRenameConflictException + * @throws \Docker\API\Exception\ContainerRenameInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerRenameNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerRenameConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerRenameInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerResize.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerResize.php new file mode 100644 index 000000000..e3c57d205 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerResize.php @@ -0,0 +1,90 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/resize'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['text/plain', 'application/json']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['h', 'w']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('h', ['int']); + $optionsResolver->addAllowedTypes('w', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerResizeNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerResizeNotFoundException($response); + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerRestart.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerRestart.php new file mode 100644 index 000000000..2a7abaa65 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerRestart.php @@ -0,0 +1,90 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/restart'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['signal', 't']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('signal', ['string']); + $optionsResolver->addAllowedTypes('t', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerRestartNotFoundException + * @throws \Docker\API\Exception\ContainerRestartInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerRestartNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerRestartInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStart.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStart.php new file mode 100644 index 000000000..fc9a7ce4c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStart.php @@ -0,0 +1,93 @@ +` where `` is one + * of: `a-z`, `@`, `^`, `[`, `,` or `_`. + * + * } + * + * @param array $accept Accept content header application/json|text/plain + */ + public function __construct(string $id, array $queryParameters = [], array $accept = []) + { + $this->id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/start'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['detachKeys']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('detachKeys', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerStartNotFoundException + * @throws \Docker\API\Exception\ContainerStartInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if (304 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerStartNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerStartInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStats.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStats.php new file mode 100644 index 000000000..84b631d11 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStats.php @@ -0,0 +1,113 @@ +id = $id; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/stats'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['stream', 'one-shot']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['stream' => true, 'one-shot' => false]); + $optionsResolver->addAllowedTypes('stream', ['bool']); + $optionsResolver->addAllowedTypes('one-shot', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerStatsNotFoundException + * @throws \Docker\API\Exception\ContainerStatsInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return json_decode($body); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerStatsNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerStatsInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStop.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStop.php new file mode 100644 index 000000000..95f14baa2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerStop.php @@ -0,0 +1,92 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/stop'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['signal', 't']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('signal', ['string']); + $optionsResolver->addAllowedTypes('t', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerStopNotFoundException + * @throws \Docker\API\Exception\ContainerStopInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if (304 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerStopNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerStopInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerTop.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerTop.php new file mode 100644 index 000000000..51dc05c4a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerTop.php @@ -0,0 +1,92 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/top'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['ps_args']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['ps_args' => '-ef']); + $optionsResolver->addAllowedTypes('ps_args', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerTopNotFoundException + * @throws \Docker\API\Exception\ContainerTopInternalServerErrorException + * + * @return \Docker\API\Model\ContainersIdTopGetJsonResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainersIdTopGetJsonResponse200', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerTopNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerTopInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerUnpause.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerUnpause.php new file mode 100644 index 000000000..ce6de1af9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerUnpause.php @@ -0,0 +1,73 @@ +id = $id; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/unpause'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\ContainerUnpauseNotFoundException + * @throws \Docker\API\Exception\ContainerUnpauseInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerUnpauseNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerUnpauseInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerUpdate.php new file mode 100644 index 000000000..30b4fb2df --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerUpdate.php @@ -0,0 +1,73 @@ +id = $id; + $this->body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/update'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ContainersIdUpdatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ContainerUpdateNotFoundException + * @throws \Docker\API\Exception\ContainerUpdateInternalServerErrorException + * + * @return \Docker\API\Model\ContainersIdUpdatePostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainersIdUpdatePostResponse200', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerUpdateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerWait.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerWait.php new file mode 100644 index 000000000..3bb7c34a8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ContainerWait.php @@ -0,0 +1,90 @@ +id = $id; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/wait'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['condition']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['condition' => 'not-running']); + $optionsResolver->addAllowedTypes('condition', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ContainerWaitBadRequestException + * @throws \Docker\API\Exception\ContainerWaitNotFoundException + * @throws \Docker\API\Exception\ContainerWaitInternalServerErrorException + * + * @return \Docker\API\Model\ContainerWaitResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ContainerWaitResponse', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerWaitBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerWaitNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ContainerWaitInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/DistributionInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/DistributionInspect.php new file mode 100644 index 000000000..35954e69e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/DistributionInspect.php @@ -0,0 +1,67 @@ +name = $name; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/distribution/{name}/json'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\DistributionInspectUnauthorizedException + * @throws \Docker\API\Exception\DistributionInspectInternalServerErrorException + * + * @return \Docker\API\Model\DistributionInspect|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\DistributionInspect', 'json'); + } + if ((null === $contentType) === false && (401 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\DistributionInspectUnauthorizedException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\DistributionInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecInspect.php new file mode 100644 index 000000000..44f95cfbd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecInspect.php @@ -0,0 +1,67 @@ +id = $id; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/exec/{id}/json'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ExecInspectNotFoundException + * @throws \Docker\API\Exception\ExecInspectInternalServerErrorException + * + * @return \Docker\API\Model\ExecIdJsonGetResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ExecIdJsonGetResponse200', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ExecInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ExecInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecResize.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecResize.php new file mode 100644 index 000000000..9eec67884 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecResize.php @@ -0,0 +1,97 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/exec/{id}/resize'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['h', 'w']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('h', ['int']); + $optionsResolver->addAllowedTypes('w', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ExecResizeBadRequestException + * @throws \Docker\API\Exception\ExecResizeNotFoundException + * @throws \Docker\API\Exception\ExecResizeInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ExecResizeBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ExecResizeNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ExecResizeInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecStart.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecStart.php new file mode 100644 index 000000000..d42f26194 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ExecStart.php @@ -0,0 +1,75 @@ +id = $id; + $this->body = $requestBody; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/exec/{id}/start'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ExecIdStartPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/vnd.docker.raw-stream', 'application/vnd.docker.multiplexed-stream']]; + } + + return $this->accept; + } + + /** + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if (404 === $status) { + } + if (409 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/GetPluginPrivileges.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/GetPluginPrivileges.php new file mode 100644 index 000000000..95f39e06d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/GetPluginPrivileges.php @@ -0,0 +1,84 @@ +queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/plugins/privileges'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['remote']); + $optionsResolver->setRequired(['remote']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('remote', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\GetPluginPrivilegesInternalServerErrorException + * + * @return \Docker\API\Model\PluginPrivilege[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\PluginPrivilege[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\GetPluginPrivilegesInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageBuild.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageBuild.php new file mode 100644 index 000000000..fb4dcf428 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageBuild.php @@ -0,0 +1,187 @@ +`. + * Any other value is taken as a custom network's name or ID to which this + * container should connect to. + * @var string $platform Platform in the format os[/arch[/variant]] + * @var string $target Target build stage + * @var string $outputs BuildKit output configuration + * @var string $version Version of the builder backend to use. + * + * - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + * - `2` is [BuildKit](https://github.com/moby/buildkit) + * + * } + * + * @param array $headerParameters { + * + * @var string $Content-type + * @var string $X-Registry-Config This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + * + * The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: + * + * ``` + * { + * "docker.example.com": { + * "username": "janedoe", + * "password": "hunter2" + * }, + * "https://index.docker.io/v1/": { + * "username": "mobydock", + * "password": "conta1n3rize14" + * } + * } + * ``` + * + * Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. + * + * } + */ + public function __construct($requestBody = null, array $queryParameters = [], array $headerParameters = []) + { + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->headerParameters = $headerParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/build'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_string($this->body) || \is_resource($this->body) || $this->body instanceof \Psr\Http\Message\StreamInterface) { + return [['Content-Type' => ['application/octet-stream']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['dockerfile', 't', 'extrahosts', 'remote', 'q', 'nocache', 'cachefrom', 'pull', 'rm', 'forcerm', 'memory', 'memswap', 'cpushares', 'cpusetcpus', 'cpuperiod', 'cpuquota', 'buildargs', 'shmsize', 'squash', 'labels', 'networkmode', 'platform', 'target', 'outputs', 'version']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['dockerfile' => 'Dockerfile', 'q' => false, 'nocache' => false, 'rm' => true, 'forcerm' => false, 'version' => '1']); + $optionsResolver->addAllowedTypes('dockerfile', ['string']); + $optionsResolver->addAllowedTypes('t', ['string']); + $optionsResolver->addAllowedTypes('extrahosts', ['string']); + $optionsResolver->addAllowedTypes('remote', ['string']); + $optionsResolver->addAllowedTypes('q', ['bool']); + $optionsResolver->addAllowedTypes('nocache', ['bool']); + $optionsResolver->addAllowedTypes('cachefrom', ['string']); + $optionsResolver->addAllowedTypes('pull', ['string']); + $optionsResolver->addAllowedTypes('rm', ['bool']); + $optionsResolver->addAllowedTypes('forcerm', ['bool']); + $optionsResolver->addAllowedTypes('memory', ['int']); + $optionsResolver->addAllowedTypes('memswap', ['int']); + $optionsResolver->addAllowedTypes('cpushares', ['int']); + $optionsResolver->addAllowedTypes('cpusetcpus', ['string']); + $optionsResolver->addAllowedTypes('cpuperiod', ['int']); + $optionsResolver->addAllowedTypes('cpuquota', ['int']); + $optionsResolver->addAllowedTypes('buildargs', ['string']); + $optionsResolver->addAllowedTypes('shmsize', ['int']); + $optionsResolver->addAllowedTypes('squash', ['bool']); + $optionsResolver->addAllowedTypes('labels', ['string']); + $optionsResolver->addAllowedTypes('networkmode', ['string']); + $optionsResolver->addAllowedTypes('platform', ['string']); + $optionsResolver->addAllowedTypes('target', ['string']); + $optionsResolver->addAllowedTypes('outputs', ['string']); + $optionsResolver->addAllowedTypes('version', ['string']); + + return $optionsResolver; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['Content-type', 'X-Registry-Config']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['Content-type' => 'application/x-tar']); + $optionsResolver->addAllowedTypes('Content-type', ['string']); + $optionsResolver->addAllowedTypes('X-Registry-Config', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageBuildBadRequestException + * @throws \Docker\API\Exception\ImageBuildInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageBuildBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageBuildInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageCommit.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageCommit.php new file mode 100644 index 000000000..673ebe211 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageCommit.php @@ -0,0 +1,95 @@ +`) + * @var bool $pause Whether to pause the container before committing + * @var string $changes `Dockerfile` instructions to apply while committing + * } + */ + public function __construct(?\Docker\API\Model\ContainerConfig $requestBody = null, array $queryParameters = []) + { + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/commit'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ContainerConfig) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['container', 'repo', 'tag', 'comment', 'author', 'pause', 'changes']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['pause' => true]); + $optionsResolver->addAllowedTypes('container', ['string']); + $optionsResolver->addAllowedTypes('repo', ['string']); + $optionsResolver->addAllowedTypes('tag', ['string']); + $optionsResolver->addAllowedTypes('comment', ['string']); + $optionsResolver->addAllowedTypes('author', ['string']); + $optionsResolver->addAllowedTypes('pause', ['bool']); + $optionsResolver->addAllowedTypes('changes', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageCommitNotFoundException + * @throws \Docker\API\Exception\ImageCommitInternalServerErrorException + * + * @return \Docker\API\Model\IdResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\IdResponse', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageCommitNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageCommitInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageCreate.php new file mode 100644 index 000000000..0328531f4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageCreate.php @@ -0,0 +1,140 @@ +body = $requestBody; + $this->queryParameters = $queryParameters; + $this->headerParameters = $headerParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/images/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_string($this->body)) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + if (\is_string($this->body)) { + return [['Content-Type' => ['application/octet-stream']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['fromImage', 'fromSrc', 'repo', 'tag', 'message', 'changes', 'platform']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('fromImage', ['string']); + $optionsResolver->addAllowedTypes('fromSrc', ['string']); + $optionsResolver->addAllowedTypes('repo', ['string']); + $optionsResolver->addAllowedTypes('tag', ['string']); + $optionsResolver->addAllowedTypes('message', ['string']); + $optionsResolver->addAllowedTypes('changes', ['array']); + $optionsResolver->addAllowedTypes('platform', ['string']); + + return $optionsResolver; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['X-Registry-Auth']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('X-Registry-Auth', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageCreateNotFoundException + * @throws \Docker\API\Exception\ImageCreateInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageCreateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageDelete.php new file mode 100644 index 000000000..b1e4a5fb7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageDelete.php @@ -0,0 +1,93 @@ +name = $name; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/images/{name}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['force', 'noprune']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['force' => false, 'noprune' => false]); + $optionsResolver->addAllowedTypes('force', ['bool']); + $optionsResolver->addAllowedTypes('noprune', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageDeleteNotFoundException + * @throws \Docker\API\Exception\ImageDeleteConflictException + * @throws \Docker\API\Exception\ImageDeleteInternalServerErrorException + * + * @return \Docker\API\Model\ImageDeleteResponseItem[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ImageDeleteResponseItem[]', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageDeleteConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageGet.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageGet.php new file mode 100644 index 000000000..b6adfd64a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageGet.php @@ -0,0 +1,81 @@ +name = $name; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/images/{name}/get'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/x-tar']]; + } + + /** + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageGetAll.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageGetAll.php new file mode 100644 index 000000000..51bbd600f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageGetAll.php @@ -0,0 +1,81 @@ +queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/images/get'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/x-tar']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['names']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('names', ['array']); + + return $optionsResolver; + } + + /** + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageHistory.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageHistory.php new file mode 100644 index 000000000..7b79220a3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageHistory.php @@ -0,0 +1,67 @@ +name = $name; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/images/{name}/history'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ImageHistoryNotFoundException + * @throws \Docker\API\Exception\ImageHistoryInternalServerErrorException + * + * @return \Docker\API\Model\ImagesNameHistoryGetResponse200Item[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ImagesNameHistoryGetResponse200Item[]', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageHistoryNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageHistoryInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageInspect.php new file mode 100644 index 000000000..39d4b291d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageInspect.php @@ -0,0 +1,67 @@ +name = $name; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/images/{name}/json'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\ImageInspectNotFoundException + * @throws \Docker\API\Exception\ImageInspectInternalServerErrorException + * + * @return \Docker\API\Model\ImageInspect|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ImageInspect', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageList.php new file mode 100644 index 000000000..30dbe12f1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageList.php @@ -0,0 +1,92 @@ +[:]`, `` or ``) + * - `dangling=true` + * - `label=key` or `label="key=value"` of an image label + * - `reference`=(`[:]`) + * - `since`=(`[:]`, `` or ``) + * - `until=` + * @var bool $shared-size Compute and show shared size as a `SharedSize` field on each image + * @var bool $digests Show digest information as a `RepoDigests` field on each image. + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/images/json'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['all', 'filters', 'shared-size', 'digests']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['all' => false, 'shared-size' => false, 'digests' => false]); + $optionsResolver->addAllowedTypes('all', ['bool']); + $optionsResolver->addAllowedTypes('filters', ['string']); + $optionsResolver->addAllowedTypes('shared-size', ['bool']); + $optionsResolver->addAllowedTypes('digests', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageListInternalServerErrorException + * + * @return \Docker\API\Model\ImageSummary[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ImageSummary[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageLoad.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageLoad.php new file mode 100644 index 000000000..6c67c6a4e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageLoad.php @@ -0,0 +1,83 @@ +body = $requestBody; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/images/load'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_string($this->body) || \is_resource($this->body) || $this->body instanceof \Psr\Http\Message\StreamInterface) { + return [['Content-Type' => ['application/x-tar']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['quiet']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['quiet' => false]); + $optionsResolver->addAllowedTypes('quiet', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageLoadInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageLoadInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImagePrune.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImagePrune.php new file mode 100644 index 000000000..0332a23b1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImagePrune.php @@ -0,0 +1,81 @@ +` When set to `true` (or `1`), prune only + * unused *and* untagged images. When set to `false` + * (or `0`), all unused images are pruned. + * - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/images/prune'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImagePruneInternalServerErrorException + * + * @return \Docker\API\Model\ImagesPrunePostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ImagesPrunePostResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImagePruneInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImagePush.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImagePush.php new file mode 100644 index 000000000..de7f7b3c1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImagePush.php @@ -0,0 +1,117 @@ +name = $name; + $this->queryParameters = $queryParameters; + $this->headerParameters = $headerParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/images/{name}/push'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['tag']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('tag', ['string']); + + return $optionsResolver; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['X-Registry-Auth']); + $optionsResolver->setRequired(['X-Registry-Auth']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('X-Registry-Auth', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImagePushNotFoundException + * @throws \Docker\API\Exception\ImagePushInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImagePushNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImagePushInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageSearch.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageSearch.php new file mode 100644 index 000000000..fcc4cb36a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageSearch.php @@ -0,0 +1,84 @@ +` Matches images that has at least 'number' stars. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/images/search'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['term', 'limit', 'filters']); + $optionsResolver->setRequired(['term']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('term', ['string']); + $optionsResolver->addAllowedTypes('limit', ['int']); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageSearchInternalServerErrorException + * + * @return \Docker\API\Model\ImagesSearchGetResponse200Item[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ImagesSearchGetResponse200Item[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageSearchInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageTag.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageTag.php new file mode 100644 index 000000000..b896956bb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ImageTag.php @@ -0,0 +1,100 @@ +name = $name; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/images/{name}/tag'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['repo', 'tag']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('repo', ['string']); + $optionsResolver->addAllowedTypes('tag', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ImageTagBadRequestException + * @throws \Docker\API\Exception\ImageTagNotFoundException + * @throws \Docker\API\Exception\ImageTagConflictException + * @throws \Docker\API\Exception\ImageTagInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (201 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageTagBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageTagNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageTagConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ImageTagInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkConnect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkConnect.php new file mode 100644 index 000000000..5add64516 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkConnect.php @@ -0,0 +1,86 @@ +id = $id; + $this->body = $requestBody; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/networks/{id}/connect'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\NetworksIdConnectPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\NetworkConnectBadRequestException + * @throws \Docker\API\Exception\NetworkConnectForbiddenException + * @throws \Docker\API\Exception\NetworkConnectNotFoundException + * @throws \Docker\API\Exception\NetworkConnectInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkConnectBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (403 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkConnectForbiddenException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkConnectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkConnectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkCreate.php new file mode 100644 index 000000000..c674fda5e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkCreate.php @@ -0,0 +1,73 @@ +body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/networks/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\NetworksCreatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\NetworkCreateBadRequestException + * @throws \Docker\API\Exception\NetworkCreateForbiddenException + * @throws \Docker\API\Exception\NetworkCreateNotFoundException + * @throws \Docker\API\Exception\NetworkCreateInternalServerErrorException + * + * @return \Docker\API\Model\NetworksCreatePostResponse201|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\NetworksCreatePostResponse201', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkCreateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (403 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkCreateForbiddenException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkCreateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkDelete.php new file mode 100644 index 000000000..50a8cad44 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkDelete.php @@ -0,0 +1,75 @@ +id = $id; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/networks/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\NetworkDeleteForbiddenException + * @throws \Docker\API\Exception\NetworkDeleteNotFoundException + * @throws \Docker\API\Exception\NetworkDeleteInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (403 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkDeleteForbiddenException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkDisconnect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkDisconnect.php new file mode 100644 index 000000000..87e4cb714 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkDisconnect.php @@ -0,0 +1,80 @@ +id = $id; + $this->body = $requestBody; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/networks/{id}/disconnect'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\NetworksIdDisconnectPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\NetworkDisconnectForbiddenException + * @throws \Docker\API\Exception\NetworkDisconnectNotFoundException + * @throws \Docker\API\Exception\NetworkDisconnectInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (403 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkDisconnectForbiddenException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkDisconnectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkDisconnectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkInspect.php new file mode 100644 index 000000000..210542516 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkInspect.php @@ -0,0 +1,83 @@ +id = $id; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/networks/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['verbose', 'scope']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['verbose' => false]); + $optionsResolver->addAllowedTypes('verbose', ['bool']); + $optionsResolver->addAllowedTypes('scope', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\NetworkInspectNotFoundException + * @throws \Docker\API\Exception\NetworkInspectInternalServerErrorException + * + * @return \Docker\API\Model\Network|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Network', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkList.php new file mode 100644 index 000000000..a008a6d38 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkList.php @@ -0,0 +1,96 @@ +` When set to `true` (or `1`), returns all + * networks that are not in use by a container. When set to `false` + * (or `0`), only networks that are in use by one or more + * containers are returned. + * - `driver=` Matches a network's driver. + * - `id=` Matches all or part of a network ID. + * - `label=` or `label==` of a network label. + * - `name=` Matches all or part of a network name. + * - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + * - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/networks'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\NetworkListInternalServerErrorException + * + * @return \Docker\API\Model\Network[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Network[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkPrune.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkPrune.php new file mode 100644 index 000000000..e52b92650 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NetworkPrune.php @@ -0,0 +1,79 @@ +` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + * - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/networks/prune'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\NetworkPruneInternalServerErrorException + * + * @return \Docker\API\Model\NetworksPrunePostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\NetworksPrunePostResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NetworkPruneInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeDelete.php new file mode 100644 index 000000000..c60a842ac --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeDelete.php @@ -0,0 +1,92 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/nodes/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['force']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['force' => false]); + $optionsResolver->addAllowedTypes('force', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\NodeDeleteNotFoundException + * @throws \Docker\API\Exception\NodeDeleteInternalServerErrorException + * @throws \Docker\API\Exception\NodeDeleteServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeDeleteServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeInspect.php new file mode 100644 index 000000000..34caa74f7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeInspect.php @@ -0,0 +1,76 @@ +id = $id; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/nodes/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\NodeInspectNotFoundException + * @throws \Docker\API\Exception\NodeInspectInternalServerErrorException + * @throws \Docker\API\Exception\NodeInspectServiceUnavailableException + * + * @return \Docker\API\Model\Node|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Node', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeInspectServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeList.php new file mode 100644 index 000000000..8d800b370 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeList.php @@ -0,0 +1,95 @@ +` + * - `label=` + * - `membership=`(`accepted`|`pending`)` + * - `name=` + * - `node.label=` + * - `role=`(`manager`|`worker`)` + * + * } + * + * @param array $accept Accept content header application/json|text/plain + */ + public function __construct(array $queryParameters = [], array $accept = []) + { + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/nodes'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\NodeListInternalServerErrorException + * @throws \Docker\API\Exception\NodeListServiceUnavailableException + * + * @return \Docker\API\Model\Node[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Node[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeListServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeUpdate.php new file mode 100644 index 000000000..64446dcaf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/NodeUpdate.php @@ -0,0 +1,106 @@ +id = $id; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/nodes/{id}/update'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\NodeSpec) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\NodeSpec) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['version']); + $optionsResolver->setRequired(['version']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('version', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\NodeUpdateBadRequestException + * @throws \Docker\API\Exception\NodeUpdateNotFoundException + * @throws \Docker\API\Exception\NodeUpdateInternalServerErrorException + * @throws \Docker\API\Exception\NodeUpdateServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeUpdateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeUpdateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\NodeUpdateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginCreate.php new file mode 100644 index 000000000..e69360551 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginCreate.php @@ -0,0 +1,89 @@ +body = $requestBody; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/plugins/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_string($this->body) || \is_resource($this->body) || $this->body instanceof \Psr\Http\Message\StreamInterface) { + return [['Content-Type' => ['application/x-tar']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['name']); + $optionsResolver->setRequired(['name']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('name', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginCreateInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginDelete.php new file mode 100644 index 000000000..fe6131748 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginDelete.php @@ -0,0 +1,92 @@ +name = $name; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['force']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['force' => false]); + $optionsResolver->addAllowedTypes('force', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginDeleteNotFoundException + * @throws \Docker\API\Exception\PluginDeleteInternalServerErrorException + * + * @return \Docker\API\Model\Plugin|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Plugin', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginDisable.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginDisable.php new file mode 100644 index 000000000..7ab02fb14 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginDisable.php @@ -0,0 +1,90 @@ +name = $name; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}/disable'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['force']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('force', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginDisableNotFoundException + * @throws \Docker\API\Exception\PluginDisableInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginDisableNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginDisableInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginEnable.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginEnable.php new file mode 100644 index 000000000..83e733024 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginEnable.php @@ -0,0 +1,89 @@ +name = $name; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}/enable'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['timeout']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['timeout' => 0]); + $optionsResolver->addAllowedTypes('timeout', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginEnableNotFoundException + * @throws \Docker\API\Exception\PluginEnableInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginEnableNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginEnableInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginInspect.php new file mode 100644 index 000000000..2a9b58833 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginInspect.php @@ -0,0 +1,73 @@ +name = $name; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}/json'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\PluginInspectNotFoundException + * @throws \Docker\API\Exception\PluginInspectInternalServerErrorException + * + * @return \Docker\API\Model\Plugin|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Plugin', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginList.php new file mode 100644 index 000000000..75a79581d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginList.php @@ -0,0 +1,83 @@ +` + * - `enable=|` + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/plugins'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginListInternalServerErrorException + * + * @return \Docker\API\Model\Plugin[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Plugin[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginPull.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginPull.php new file mode 100644 index 000000000..b7380cde9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginPull.php @@ -0,0 +1,114 @@ +body = $requestBody; + $this->queryParameters = $queryParameters; + $this->headerParameters = $headerParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/plugins/pull'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_array($this->body) && isset($this->body[0]) && $this->body[0] instanceof \Docker\API\Model\PluginPrivilege) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if (\is_array($this->body) && isset($this->body[0]) && $this->body[0] instanceof \Docker\API\Model\PluginPrivilege) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['remote', 'name']); + $optionsResolver->setRequired(['remote']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('remote', ['string']); + $optionsResolver->addAllowedTypes('name', ['string']); + + return $optionsResolver; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['X-Registry-Auth']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('X-Registry-Auth', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginPullInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginPullInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginPush.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginPush.php new file mode 100644 index 000000000..4b8102905 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginPush.php @@ -0,0 +1,74 @@ +name = $name; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}/push'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\PluginPushNotFoundException + * @throws \Docker\API\Exception\PluginPushInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginPushNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginPushInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginSet.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginSet.php new file mode 100644 index 000000000..d9d9c89bf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginSet.php @@ -0,0 +1,78 @@ +name = $name; + $this->body = $requestBody; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}/set'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_array($this->body) && isset($this->body[0]) && \is_array($this->body[0])) { + return [['Content-Type' => ['application/json']], json_encode($this->body)]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\PluginSetNotFoundException + * @throws \Docker\API\Exception\PluginSetInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginSetNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginSetInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginUpgrade.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginUpgrade.php new file mode 100644 index 000000000..d0daeed26 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PluginUpgrade.php @@ -0,0 +1,123 @@ +name = $name; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->headerParameters = $headerParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/plugins/{name}/upgrade'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_array($this->body) && isset($this->body[0]) && $this->body[0] instanceof \Docker\API\Model\PluginPrivilege) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if (\is_array($this->body) && isset($this->body[0]) && $this->body[0] instanceof \Docker\API\Model\PluginPrivilege) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['remote']); + $optionsResolver->setRequired(['remote']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('remote', ['string']); + + return $optionsResolver; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['X-Registry-Auth']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('X-Registry-Auth', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PluginUpgradeNotFoundException + * @throws \Docker\API\Exception\PluginUpgradeInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginUpgradeNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PluginUpgradeInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/PutContainerArchive.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PutContainerArchive.php new file mode 100644 index 000000000..c425375e9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/PutContainerArchive.php @@ -0,0 +1,117 @@ +id = $id; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'PUT'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/containers/{id}/archive'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if (\is_string($this->body) || \is_resource($this->body) || $this->body instanceof \Psr\Http\Message\StreamInterface) { + return [['Content-Type' => ['application/x-tar']], $this->body]; + } + if (\is_string($this->body) || \is_resource($this->body) || $this->body instanceof \Psr\Http\Message\StreamInterface) { + return [['Content-Type' => ['application/octet-stream']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['path', 'noOverwriteDirNonDir', 'copyUIDGID']); + $optionsResolver->setRequired(['path']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('path', ['string']); + $optionsResolver->addAllowedTypes('noOverwriteDirNonDir', ['string']); + $optionsResolver->addAllowedTypes('copyUIDGID', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\PutContainerArchiveBadRequestException + * @throws \Docker\API\Exception\PutContainerArchiveForbiddenException + * @throws \Docker\API\Exception\PutContainerArchiveNotFoundException + * @throws \Docker\API\Exception\PutContainerArchiveInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PutContainerArchiveBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (403 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PutContainerArchiveForbiddenException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PutContainerArchiveNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\PutContainerArchiveInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretCreate.php new file mode 100644 index 000000000..b2e9a2a32 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretCreate.php @@ -0,0 +1,69 @@ +body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/secrets/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\SecretsCreatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SecretCreateConflictException + * @throws \Docker\API\Exception\SecretCreateInternalServerErrorException + * @throws \Docker\API\Exception\SecretCreateServiceUnavailableException + * + * @return \Docker\API\Model\IdResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\IdResponse', 'json'); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretCreateConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretCreateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretDelete.php new file mode 100644 index 000000000..619a4966c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretDelete.php @@ -0,0 +1,68 @@ +id = $id; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/secrets/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SecretDeleteNotFoundException + * @throws \Docker\API\Exception\SecretDeleteInternalServerErrorException + * @throws \Docker\API\Exception\SecretDeleteServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretDeleteServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretInspect.php new file mode 100644 index 000000000..c15203bce --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretInspect.php @@ -0,0 +1,69 @@ +id = $id; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/secrets/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SecretInspectNotFoundException + * @throws \Docker\API\Exception\SecretInspectInternalServerErrorException + * @throws \Docker\API\Exception\SecretInspectServiceUnavailableException + * + * @return \Docker\API\Model\Secret|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Secret', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretInspectServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretList.php new file mode 100644 index 000000000..2f23ed2ca --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretList.php @@ -0,0 +1,87 @@ +` + * - `label= or label==value` + * - `name=` + * - `names=` + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/secrets'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\SecretListInternalServerErrorException + * @throws \Docker\API\Exception\SecretListServiceUnavailableException + * + * @return \Docker\API\Model\Secret[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Secret[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretListServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretUpdate.php new file mode 100644 index 000000000..d9f4fc480 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SecretUpdate.php @@ -0,0 +1,106 @@ +id = $id; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/secrets/{id}/update'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\SecretSpec) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\SecretSpec) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['version']); + $optionsResolver->setRequired(['version']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('version', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\SecretUpdateBadRequestException + * @throws \Docker\API\Exception\SecretUpdateNotFoundException + * @throws \Docker\API\Exception\SecretUpdateInternalServerErrorException + * @throws \Docker\API\Exception\SecretUpdateServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretUpdateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretUpdateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SecretUpdateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceCreate.php new file mode 100644 index 000000000..0c21165d8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceCreate.php @@ -0,0 +1,100 @@ +body = $requestBody; + $this->headerParameters = $headerParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/services/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ServicesCreatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['X-Registry-Auth']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('X-Registry-Auth', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ServiceCreateBadRequestException + * @throws \Docker\API\Exception\ServiceCreateForbiddenException + * @throws \Docker\API\Exception\ServiceCreateConflictException + * @throws \Docker\API\Exception\ServiceCreateInternalServerErrorException + * @throws \Docker\API\Exception\ServiceCreateServiceUnavailableException + * + * @return \Docker\API\Model\ServiceCreateResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ServiceCreateResponse', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceCreateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (403 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceCreateForbiddenException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceCreateConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceCreateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceDelete.php new file mode 100644 index 000000000..388c4988f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceDelete.php @@ -0,0 +1,75 @@ +id = $id; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/services/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\ServiceDeleteNotFoundException + * @throws \Docker\API\Exception\ServiceDeleteInternalServerErrorException + * @throws \Docker\API\Exception\ServiceDeleteServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceDeleteServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceInspect.php new file mode 100644 index 000000000..769d95400 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceInspect.php @@ -0,0 +1,93 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/services/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['insertDefaults']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['insertDefaults' => false]); + $optionsResolver->addAllowedTypes('insertDefaults', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ServiceInspectNotFoundException + * @throws \Docker\API\Exception\ServiceInspectInternalServerErrorException + * @throws \Docker\API\Exception\ServiceInspectServiceUnavailableException + * + * @return \Docker\API\Model\Service|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Service', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceInspectServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceList.php new file mode 100644 index 000000000..f7ef015f4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceList.php @@ -0,0 +1,97 @@ +` + * - `label=` + * - `mode=["replicated"|"global"]` + * - `name=` + * @var bool $status Include service status, with count of running and desired tasks. + * + * } + * + * @param array $accept Accept content header application/json|text/plain + */ + public function __construct(array $queryParameters = [], array $accept = []) + { + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/services'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters', 'status']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + $optionsResolver->addAllowedTypes('status', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ServiceListInternalServerErrorException + * @throws \Docker\API\Exception\ServiceListServiceUnavailableException + * + * @return \Docker\API\Model\Service[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Service[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceListServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceLogs.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceLogs.php new file mode 100644 index 000000000..7ec315c2b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceLogs.php @@ -0,0 +1,108 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/services/{id}/logs'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/vnd.docker.raw-stream', 'application/vnd.docker.multiplexed-stream', 'application/json']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['details', 'follow', 'stdout', 'stderr', 'since', 'timestamps', 'tail']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['details' => false, 'follow' => false, 'stdout' => false, 'stderr' => false, 'since' => 0, 'timestamps' => false, 'tail' => 'all']); + $optionsResolver->addAllowedTypes('details', ['bool']); + $optionsResolver->addAllowedTypes('follow', ['bool']); + $optionsResolver->addAllowedTypes('stdout', ['bool']); + $optionsResolver->addAllowedTypes('stderr', ['bool']); + $optionsResolver->addAllowedTypes('since', ['int']); + $optionsResolver->addAllowedTypes('timestamps', ['bool']); + $optionsResolver->addAllowedTypes('tail', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ServiceLogsNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceLogsNotFoundException($response); + } + if (500 === $status) { + } + if (503 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceUpdate.php new file mode 100644 index 000000000..629de29ad --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/ServiceUpdate.php @@ -0,0 +1,128 @@ +id = $id; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + $this->headerParameters = $headerParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/services/{id}/update'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\ServicesIdUpdatePostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['version', 'registryAuthFrom', 'rollback']); + $optionsResolver->setRequired(['version']); + $optionsResolver->setDefaults(['registryAuthFrom' => 'spec']); + $optionsResolver->addAllowedTypes('version', ['int']); + $optionsResolver->addAllowedTypes('registryAuthFrom', ['string']); + $optionsResolver->addAllowedTypes('rollback', ['string']); + + return $optionsResolver; + } + + protected function getHeadersOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getHeadersOptionsResolver(); + $optionsResolver->setDefined(['X-Registry-Auth']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('X-Registry-Auth', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\ServiceUpdateBadRequestException + * @throws \Docker\API\Exception\ServiceUpdateNotFoundException + * @throws \Docker\API\Exception\ServiceUpdateInternalServerErrorException + * @throws \Docker\API\Exception\ServiceUpdateServiceUnavailableException + * + * @return \Docker\API\Model\ServiceUpdateResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\ServiceUpdateResponse', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceUpdateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceUpdateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\ServiceUpdateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/Session.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/Session.php new file mode 100644 index 000000000..20801790f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/Session.php @@ -0,0 +1,50 @@ + ['application/vnd.docker.raw-stream']]; + } + + /** + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (101 === $status) { + } + if (400 === $status) { + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmInit.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmInit.php new file mode 100644 index 000000000..7bdabfc60 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmInit.php @@ -0,0 +1,81 @@ +body = $requestBody; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/swarm/init'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\SwarmInitPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\SwarmInitPostBody) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\SwarmInitBadRequestException + * @throws \Docker\API\Exception\SwarmInitInternalServerErrorException + * @throws \Docker\API\Exception\SwarmInitServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return json_decode($body); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmInitBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmInitInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmInitServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmInspect.php new file mode 100644 index 000000000..e342f5330 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmInspect.php @@ -0,0 +1,73 @@ +accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/swarm'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\SwarmInspectNotFoundException + * @throws \Docker\API\Exception\SwarmInspectInternalServerErrorException + * @throws \Docker\API\Exception\SwarmInspectServiceUnavailableException + * + * @return \Docker\API\Model\Swarm|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Swarm', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmInspectServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmJoin.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmJoin.php new file mode 100644 index 000000000..e697da791 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmJoin.php @@ -0,0 +1,80 @@ +body = $requestBody; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/swarm/join'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\SwarmJoinPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\SwarmJoinPostBody) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\SwarmJoinBadRequestException + * @throws \Docker\API\Exception\SwarmJoinInternalServerErrorException + * @throws \Docker\API\Exception\SwarmJoinServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmJoinBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmJoinInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmJoinServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmLeave.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmLeave.php new file mode 100644 index 000000000..ccc2db3b6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmLeave.php @@ -0,0 +1,87 @@ +queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/swarm/leave'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['force']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['force' => false]); + $optionsResolver->addAllowedTypes('force', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\SwarmLeaveInternalServerErrorException + * @throws \Docker\API\Exception\SwarmLeaveServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmLeaveInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmLeaveServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUnlock.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUnlock.php new file mode 100644 index 000000000..e98dd09fa --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUnlock.php @@ -0,0 +1,64 @@ +body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/swarm/unlock'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\SwarmUnlockPostBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SwarmUnlockInternalServerErrorException + * @throws \Docker\API\Exception\SwarmUnlockServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUnlockInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUnlockServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUnlockkey.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUnlockkey.php new file mode 100644 index 000000000..f56eca6a7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUnlockkey.php @@ -0,0 +1,69 @@ +accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/swarm/unlockkey'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + /** + * @throws \Docker\API\Exception\SwarmUnlockkeyInternalServerErrorException + * @throws \Docker\API\Exception\SwarmUnlockkeyServiceUnavailableException + * + * @return \Docker\API\Model\SwarmUnlockkeyGetJsonResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\SwarmUnlockkeyGetJsonResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUnlockkeyInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUnlockkeyServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUpdate.php new file mode 100644 index 000000000..7fafc203d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SwarmUpdate.php @@ -0,0 +1,104 @@ +body = $requestBody; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/swarm/update'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\SwarmSpec) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + if ($this->body instanceof \Docker\API\Model\SwarmSpec) { + return [['Content-Type' => ['text/plain']], $this->body]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['version', 'rotateWorkerToken', 'rotateManagerToken', 'rotateManagerUnlockKey']); + $optionsResolver->setRequired(['version']); + $optionsResolver->setDefaults(['rotateWorkerToken' => false, 'rotateManagerToken' => false, 'rotateManagerUnlockKey' => false]); + $optionsResolver->addAllowedTypes('version', ['int']); + $optionsResolver->addAllowedTypes('rotateWorkerToken', ['bool']); + $optionsResolver->addAllowedTypes('rotateManagerToken', ['bool']); + $optionsResolver->addAllowedTypes('rotateManagerUnlockKey', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\SwarmUpdateBadRequestException + * @throws \Docker\API\Exception\SwarmUpdateInternalServerErrorException + * @throws \Docker\API\Exception\SwarmUpdateServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUpdateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SwarmUpdateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemAuth.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemAuth.php new file mode 100644 index 000000000..926a3df2f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemAuth.php @@ -0,0 +1,71 @@ +body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/auth'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\AuthConfig) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SystemAuthUnauthorizedException + * @throws \Docker\API\Exception\SystemAuthInternalServerErrorException + * + * @return \Docker\API\Model\AuthPostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\AuthPostResponse200', 'json'); + } + if (204 === $status) { + } + if ((null === $contentType) === false && (401 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemAuthUnauthorizedException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemAuthInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemDataUsage.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemDataUsage.php new file mode 100644 index 000000000..25a50f617 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemDataUsage.php @@ -0,0 +1,82 @@ +queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/system/df'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['type']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('type', ['array']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\SystemDataUsageInternalServerErrorException + * + * @return \Docker\API\Model\SystemDfGetJsonResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\SystemDfGetJsonResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemDataUsageInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemEvents.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemEvents.php new file mode 100644 index 000000000..49c61cb2b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemEvents.php @@ -0,0 +1,122 @@ +` config name or ID + * - `container=` container name or ID + * - `daemon=` daemon name or ID + * - `event=` event type + * - `image=` image name or ID + * - `label=` image or container label + * - `network=` network name or ID + * - `node=` node ID + * - `plugin`= plugin name or ID + * - `scope`= local or swarm + * - `secret=` secret name or ID + * - `service=` service name or ID + * - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + * - `volume=` volume name + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/events'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['since', 'until', 'filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('since', ['string']); + $optionsResolver->addAllowedTypes('until', ['string']); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\SystemEventsBadRequestException + * @throws \Docker\API\Exception\SystemEventsInternalServerErrorException + * + * @return \Docker\API\Model\EventMessage|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\EventMessage', 'json'); + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemEventsBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemEventsInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemInfo.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemInfo.php new file mode 100644 index 000000000..d6a4d218c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemInfo.php @@ -0,0 +1,52 @@ + ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SystemInfoInternalServerErrorException + * + * @return \Docker\API\Model\SystemInfo|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\SystemInfo', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemInfoInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemPing.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemPing.php new file mode 100644 index 000000000..61f9b30b9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemPing.php @@ -0,0 +1,48 @@ + ['text/plain']]; + } + + /** + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemPingHead.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemPingHead.php new file mode 100644 index 000000000..c93d38e3e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemPingHead.php @@ -0,0 +1,48 @@ + ['text/plain']]; + } + + /** + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if (500 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemVersion.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemVersion.php new file mode 100644 index 000000000..60f69b4ec --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/SystemVersion.php @@ -0,0 +1,52 @@ + ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\SystemVersionInternalServerErrorException + * + * @return \Docker\API\Model\SystemVersion|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\SystemVersion', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\SystemVersionInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskInspect.php new file mode 100644 index 000000000..cad2a6f15 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskInspect.php @@ -0,0 +1,69 @@ +id = $id; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/tasks/{id}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\TaskInspectNotFoundException + * @throws \Docker\API\Exception\TaskInspectInternalServerErrorException + * @throws \Docker\API\Exception\TaskInspectServiceUnavailableException + * + * @return \Docker\API\Model\Task|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Task', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\TaskInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\TaskInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\TaskInspectServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskList.php new file mode 100644 index 000000000..fb3215245 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskList.php @@ -0,0 +1,89 @@ +` + * - `label=key` or `label="key=value"` + * - `name=` + * - `node=` + * - `service=` + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/tasks'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\TaskListInternalServerErrorException + * @throws \Docker\API\Exception\TaskListServiceUnavailableException + * + * @return \Docker\API\Model\Task[]|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Task[]', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\TaskListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\TaskListServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskLogs.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskLogs.php new file mode 100644 index 000000000..5e95f92f8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/TaskLogs.php @@ -0,0 +1,108 @@ +id = $id; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{id}'], [$this->id], '/tasks/{id}/logs'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/vnd.docker.raw-stream', 'application/vnd.docker.multiplexed-stream', 'application/json']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['details', 'follow', 'stdout', 'stderr', 'since', 'timestamps', 'tail']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['details' => false, 'follow' => false, 'stdout' => false, 'stderr' => false, 'since' => 0, 'timestamps' => false, 'tail' => 'all']); + $optionsResolver->addAllowedTypes('details', ['bool']); + $optionsResolver->addAllowedTypes('follow', ['bool']); + $optionsResolver->addAllowedTypes('stdout', ['bool']); + $optionsResolver->addAllowedTypes('stderr', ['bool']); + $optionsResolver->addAllowedTypes('since', ['int']); + $optionsResolver->addAllowedTypes('timestamps', ['bool']); + $optionsResolver->addAllowedTypes('tail', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\TaskLogsNotFoundException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\TaskLogsNotFoundException($response); + } + if (500 === $status) { + } + if (503 === $status) { + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeCreate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeCreate.php new file mode 100644 index 000000000..c71316884 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeCreate.php @@ -0,0 +1,61 @@ +body = $requestBody; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/volumes/create'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\VolumeCreateOptions) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\VolumeCreateInternalServerErrorException + * + * @return \Docker\API\Model\Volume|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (201 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Volume', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeCreateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeDelete.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeDelete.php new file mode 100644 index 000000000..a24e78e0c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeDelete.php @@ -0,0 +1,94 @@ +name = $name; + $this->queryParameters = $queryParameters; + $this->accept = $accept; + } + + public function getMethod(): string + { + return 'DELETE'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/volumes/{name}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + if (empty($this->accept)) { + return ['Accept' => ['application/json', 'text/plain']]; + } + + return $this->accept; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['force']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults(['force' => false]); + $optionsResolver->addAllowedTypes('force', ['bool']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\VolumeDeleteNotFoundException + * @throws \Docker\API\Exception\VolumeDeleteConflictException + * @throws \Docker\API\Exception\VolumeDeleteInternalServerErrorException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (204 === $status) { + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeDeleteNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (409 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeDeleteConflictException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeDeleteInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeInspect.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeInspect.php new file mode 100644 index 000000000..c8b02b18f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeInspect.php @@ -0,0 +1,65 @@ +name = $name; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/volumes/{name}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + /** + * @throws \Docker\API\Exception\VolumeInspectNotFoundException + * @throws \Docker\API\Exception\VolumeInspectInternalServerErrorException + * + * @return \Docker\API\Model\Volume|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\Volume', 'json'); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeInspectNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeInspectInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeList.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeList.php new file mode 100644 index 000000000..5a644ae95 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeList.php @@ -0,0 +1,85 @@ +` When set to `true` (or `1`), returns all + * volumes that are not in use by a container. When set to `false` + * (or `0`), only volumes that are in use by one or more + * containers are returned. + * - `driver=` Matches volumes based on their driver. + * - `label=` or `label=:` Matches volumes based on + * the presence of a `label` alone or a `label` and a value. + * - `name=` Matches all or part of a volume name. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'GET'; + } + + public function getUri(): string + { + return '/volumes'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\VolumeListInternalServerErrorException + * + * @return \Docker\API\Model\VolumeListResponse|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\VolumeListResponse', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeListInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumePrune.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumePrune.php new file mode 100644 index 000000000..864dd98c3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumePrune.php @@ -0,0 +1,79 @@ +`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + * - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. + * + * } + */ + public function __construct(array $queryParameters = []) + { + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'POST'; + } + + public function getUri(): string + { + return '/volumes/prune'; + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['filters']); + $optionsResolver->setRequired([]); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('filters', ['string']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\VolumePruneInternalServerErrorException + * + * @return \Docker\API\Model\VolumesPrunePostResponse200|null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if ((null === $contentType) === false && (200 === $status && false !== mb_strpos($contentType, 'application/json'))) { + return $serializer->deserialize($body, 'Docker\API\Model\VolumesPrunePostResponse200', 'json'); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumePruneInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeUpdate.php b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeUpdate.php new file mode 100644 index 000000000..5a437715a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Endpoint/VolumeUpdate.php @@ -0,0 +1,96 @@ +name = $name; + $this->body = $requestBody; + $this->queryParameters = $queryParameters; + } + + public function getMethod(): string + { + return 'PUT'; + } + + public function getUri(): string + { + return str_replace(['{name}'], [$this->name], '/volumes/{name}'); + } + + public function getBody(\Symfony\Component\Serializer\SerializerInterface $serializer, $streamFactory = null): array + { + if ($this->body instanceof \Docker\API\Model\VolumesNamePutBody) { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } + + return [[], null]; + } + + public function getExtraHeaders(): array + { + return ['Accept' => ['application/json']]; + } + + protected function getQueryOptionsResolver(): \Symfony\Component\OptionsResolver\OptionsResolver + { + $optionsResolver = parent::getQueryOptionsResolver(); + $optionsResolver->setDefined(['version']); + $optionsResolver->setRequired(['version']); + $optionsResolver->setDefaults([]); + $optionsResolver->addAllowedTypes('version', ['int']); + + return $optionsResolver; + } + + /** + * @throws \Docker\API\Exception\VolumeUpdateBadRequestException + * @throws \Docker\API\Exception\VolumeUpdateNotFoundException + * @throws \Docker\API\Exception\VolumeUpdateInternalServerErrorException + * @throws \Docker\API\Exception\VolumeUpdateServiceUnavailableException + * + * @return null + */ + protected function transformResponseBody(\Psr\Http\Message\ResponseInterface $response, \Symfony\Component\Serializer\SerializerInterface $serializer, ?string $contentType = null) + { + $status = $response->getStatusCode(); + $body = (string) $response->getBody(); + if (200 === $status) { + } + if ((null === $contentType) === false && (400 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeUpdateBadRequestException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (404 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeUpdateNotFoundException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (500 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeUpdateInternalServerErrorException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + if ((null === $contentType) === false && (503 === $status && false !== mb_strpos($contentType, 'application/json'))) { + throw new \Docker\API\Exception\VolumeUpdateServiceUnavailableException($serializer->deserialize($body, 'Docker\API\Model\ErrorResponse', 'json'), $response); + } + } + + public function getAuthenticationScopes(): array + { + return []; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ApiException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ApiException.php new file mode 100644 index 000000000..f81cc4950 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ApiException.php @@ -0,0 +1,9 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ClientException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ClientException.php new file mode 100644 index 000000000..37ba24aaf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ClientException.php @@ -0,0 +1,9 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigCreateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigCreateInternalServerErrorException.php new file mode 100644 index 000000000..b8b0ff260 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigCreateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigCreateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigCreateServiceUnavailableException.php new file mode 100644 index 000000000..b0571c82e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigCreateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteInternalServerErrorException.php new file mode 100644 index 000000000..ecd7ceec7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteNotFoundException.php new file mode 100644 index 000000000..ceac44916 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteServiceUnavailableException.php new file mode 100644 index 000000000..d80c49b73 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigDeleteServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectInternalServerErrorException.php new file mode 100644 index 000000000..2c6384e77 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectNotFoundException.php new file mode 100644 index 000000000..b7c8bab7c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectServiceUnavailableException.php new file mode 100644 index 000000000..5903584a5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigInspectServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigListInternalServerErrorException.php new file mode 100644 index 000000000..497ef694b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigListServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigListServiceUnavailableException.php new file mode 100644 index 000000000..5d4a06355 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigListServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateBadRequestException.php new file mode 100644 index 000000000..0ecc24f67 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateInternalServerErrorException.php new file mode 100644 index 000000000..92f68ac77 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateNotFoundException.php new file mode 100644 index 000000000..01105c808 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateServiceUnavailableException.php new file mode 100644 index 000000000..a796d0c7d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConfigUpdateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ConflictException.php new file mode 100644 index 000000000..0cd63b821 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ConflictException.php @@ -0,0 +1,13 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveInfoInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveInfoInternalServerErrorException.php new file mode 100644 index 000000000..a55981422 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveInfoInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveInfoNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveInfoNotFoundException.php new file mode 100644 index 000000000..24b0bfb50 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveInfoNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveNotFoundException.php new file mode 100644 index 000000000..13a11365f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerArchiveNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachNotFoundException.php new file mode 100644 index 000000000..22cd68168 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketBadRequestException.php new file mode 100644 index 000000000..1302675fd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketInternalServerErrorException.php new file mode 100644 index 000000000..51274ff35 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketNotFoundException.php new file mode 100644 index 000000000..22ad842fa --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerAttachWebsocketNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerChangesInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerChangesInternalServerErrorException.php new file mode 100644 index 000000000..2851e1c4f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerChangesInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerChangesNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerChangesNotFoundException.php new file mode 100644 index 000000000..2f973dd3e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerChangesNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateBadRequestException.php new file mode 100644 index 000000000..2461c7d59 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateConflictException.php new file mode 100644 index 000000000..df93c5f04 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateInternalServerErrorException.php new file mode 100644 index 000000000..18624c54b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateNotFoundException.php new file mode 100644 index 000000000..eb4aff585 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerCreateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteBadRequestException.php new file mode 100644 index 000000000..895a61c13 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteConflictException.php new file mode 100644 index 000000000..87425031b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteInternalServerErrorException.php new file mode 100644 index 000000000..be965f677 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteNotFoundException.php new file mode 100644 index 000000000..b9fbd9298 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecConflictException.php new file mode 100644 index 000000000..89eaafef5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecInternalServerErrorException.php new file mode 100644 index 000000000..0aab4e688 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecNotFoundException.php new file mode 100644 index 000000000..e8f7d7dc6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExecNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExportNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExportNotFoundException.php new file mode 100644 index 000000000..4f128b8ac --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerExportNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerInspectInternalServerErrorException.php new file mode 100644 index 000000000..6563e651b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerInspectNotFoundException.php new file mode 100644 index 000000000..4d0dcc351 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillConflictException.php new file mode 100644 index 000000000..24cc80cf9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillInternalServerErrorException.php new file mode 100644 index 000000000..910fb3ed1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillNotFoundException.php new file mode 100644 index 000000000..b18cac705 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerKillNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerListBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerListBadRequestException.php new file mode 100644 index 000000000..9fdd6c72f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerListBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerListInternalServerErrorException.php new file mode 100644 index 000000000..c43049bb0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerLogsNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerLogsNotFoundException.php new file mode 100644 index 000000000..a9e5bfcf0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerLogsNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPauseInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPauseInternalServerErrorException.php new file mode 100644 index 000000000..b2e654a3d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPauseInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPauseNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPauseNotFoundException.php new file mode 100644 index 000000000..f2d181202 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPauseNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPruneInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPruneInternalServerErrorException.php new file mode 100644 index 000000000..3c7d89fa5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerPruneInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameConflictException.php new file mode 100644 index 000000000..a77e4758a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameInternalServerErrorException.php new file mode 100644 index 000000000..f8655bb6d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameNotFoundException.php new file mode 100644 index 000000000..f59a909e3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRenameNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerResizeNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerResizeNotFoundException.php new file mode 100644 index 000000000..976c23cf5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerResizeNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRestartInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRestartInternalServerErrorException.php new file mode 100644 index 000000000..336fd2cb4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRestartInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRestartNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRestartNotFoundException.php new file mode 100644 index 000000000..ad4a95903 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerRestartNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStartInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStartInternalServerErrorException.php new file mode 100644 index 000000000..8b756f853 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStartInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStartNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStartNotFoundException.php new file mode 100644 index 000000000..48f5ee280 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStartNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStatsInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStatsInternalServerErrorException.php new file mode 100644 index 000000000..250f84a38 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStatsInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStatsNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStatsNotFoundException.php new file mode 100644 index 000000000..7466ee237 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStatsNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStopInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStopInternalServerErrorException.php new file mode 100644 index 000000000..e2aca0020 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStopInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStopNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStopNotFoundException.php new file mode 100644 index 000000000..3c5bbe4ec --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerStopNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerTopInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerTopInternalServerErrorException.php new file mode 100644 index 000000000..f0e5b071a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerTopInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerTopNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerTopNotFoundException.php new file mode 100644 index 000000000..157145cff --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerTopNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUnpauseInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUnpauseInternalServerErrorException.php new file mode 100644 index 000000000..51f7b2746 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUnpauseInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUnpauseNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUnpauseNotFoundException.php new file mode 100644 index 000000000..ea8d54667 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUnpauseNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUpdateInternalServerErrorException.php new file mode 100644 index 000000000..2d7628031 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUpdateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUpdateNotFoundException.php new file mode 100644 index 000000000..2eeba767a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerUpdateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitBadRequestException.php new file mode 100644 index 000000000..a986e90cf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitInternalServerErrorException.php new file mode 100644 index 000000000..64db3fa41 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitNotFoundException.php new file mode 100644 index 000000000..d4e2853c3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ContainerWaitNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/DistributionInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/DistributionInspectInternalServerErrorException.php new file mode 100644 index 000000000..f395da0de --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/DistributionInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/DistributionInspectUnauthorizedException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/DistributionInspectUnauthorizedException.php new file mode 100644 index 000000000..328db46e4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/DistributionInspectUnauthorizedException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ExecInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecInspectInternalServerErrorException.php new file mode 100644 index 000000000..9e4bc326f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ExecInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecInspectNotFoundException.php new file mode 100644 index 000000000..dd7daeacb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeBadRequestException.php new file mode 100644 index 000000000..bc8818f2c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeInternalServerErrorException.php new file mode 100644 index 000000000..b9426d3e1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeNotFoundException.php new file mode 100644 index 000000000..352d958ae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ExecResizeNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ForbiddenException.php new file mode 100644 index 000000000..07dee6184 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ForbiddenException.php @@ -0,0 +1,13 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageBuildBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageBuildBadRequestException.php new file mode 100644 index 000000000..6d0763730 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageBuildBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageBuildInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageBuildInternalServerErrorException.php new file mode 100644 index 000000000..59f8bdcee --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageBuildInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCommitInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCommitInternalServerErrorException.php new file mode 100644 index 000000000..aeda8c8fc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCommitInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCommitNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCommitNotFoundException.php new file mode 100644 index 000000000..b80bff3fc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCommitNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCreateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCreateInternalServerErrorException.php new file mode 100644 index 000000000..c657732fb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCreateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCreateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCreateNotFoundException.php new file mode 100644 index 000000000..2e2429d94 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageCreateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteConflictException.php new file mode 100644 index 000000000..77f898161 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteInternalServerErrorException.php new file mode 100644 index 000000000..df17fe10a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteNotFoundException.php new file mode 100644 index 000000000..2e401e852 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageHistoryInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageHistoryInternalServerErrorException.php new file mode 100644 index 000000000..bfee684e8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageHistoryInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageHistoryNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageHistoryNotFoundException.php new file mode 100644 index 000000000..479078780 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageHistoryNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageInspectInternalServerErrorException.php new file mode 100644 index 000000000..f06f1f6ed --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageInspectNotFoundException.php new file mode 100644 index 000000000..c1d6da006 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageListInternalServerErrorException.php new file mode 100644 index 000000000..69f4c0612 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageLoadInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageLoadInternalServerErrorException.php new file mode 100644 index 000000000..8b2163241 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageLoadInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePruneInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePruneInternalServerErrorException.php new file mode 100644 index 000000000..696f092a1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePruneInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePushInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePushInternalServerErrorException.php new file mode 100644 index 000000000..3fa34318b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePushInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePushNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePushNotFoundException.php new file mode 100644 index 000000000..b2c788981 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImagePushNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageSearchInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageSearchInternalServerErrorException.php new file mode 100644 index 000000000..82c859d76 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageSearchInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagBadRequestException.php new file mode 100644 index 000000000..c447bacca --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagConflictException.php new file mode 100644 index 000000000..bc65db35f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagInternalServerErrorException.php new file mode 100644 index 000000000..aee456a7d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagNotFoundException.php new file mode 100644 index 000000000..593758e8f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ImageTagNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/InternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/InternalServerErrorException.php new file mode 100644 index 000000000..e59af6ac9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/InternalServerErrorException.php @@ -0,0 +1,13 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectForbiddenException.php new file mode 100644 index 000000000..350694804 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectForbiddenException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectInternalServerErrorException.php new file mode 100644 index 000000000..7a9e96dcf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectNotFoundException.php new file mode 100644 index 000000000..5c1fae315 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkConnectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateBadRequestException.php new file mode 100644 index 000000000..943ea1269 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateForbiddenException.php new file mode 100644 index 000000000..38493f283 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateForbiddenException.php @@ -0,0 +1,36 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateInternalServerErrorException.php new file mode 100644 index 000000000..f8dfdf623 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateNotFoundException.php new file mode 100644 index 000000000..fdcf8ab2a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkCreateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteForbiddenException.php new file mode 100644 index 000000000..352455991 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteForbiddenException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteInternalServerErrorException.php new file mode 100644 index 000000000..042423629 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteNotFoundException.php new file mode 100644 index 000000000..8b2acb7a6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectForbiddenException.php new file mode 100644 index 000000000..830dcd296 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectForbiddenException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectInternalServerErrorException.php new file mode 100644 index 000000000..955160a3d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectNotFoundException.php new file mode 100644 index 000000000..66e891493 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkDisconnectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkInspectInternalServerErrorException.php new file mode 100644 index 000000000..09755ee4c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkInspectNotFoundException.php new file mode 100644 index 000000000..7f1ad636b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkListInternalServerErrorException.php new file mode 100644 index 000000000..881e3c92c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkPruneInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkPruneInternalServerErrorException.php new file mode 100644 index 000000000..c957acd6a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NetworkPruneInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteInternalServerErrorException.php new file mode 100644 index 000000000..c968a408a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteNotFoundException.php new file mode 100644 index 000000000..bffeeedd8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteServiceUnavailableException.php new file mode 100644 index 000000000..36872a20d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeDeleteServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectInternalServerErrorException.php new file mode 100644 index 000000000..4fc618339 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectNotFoundException.php new file mode 100644 index 000000000..d7a7cd3d7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectServiceUnavailableException.php new file mode 100644 index 000000000..427267b24 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeInspectServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeListInternalServerErrorException.php new file mode 100644 index 000000000..2cd0ba48b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeListServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeListServiceUnavailableException.php new file mode 100644 index 000000000..abadf6321 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeListServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateBadRequestException.php new file mode 100644 index 000000000..4a8ec8690 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateInternalServerErrorException.php new file mode 100644 index 000000000..9630e88ad --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateNotFoundException.php new file mode 100644 index 000000000..660a2b788 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateServiceUnavailableException.php new file mode 100644 index 000000000..4453c01c1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NodeUpdateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/NotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/NotFoundException.php new file mode 100644 index 000000000..fa6f6c8a6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/NotFoundException.php @@ -0,0 +1,13 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDeleteInternalServerErrorException.php new file mode 100644 index 000000000..c0816e5a4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDeleteNotFoundException.php new file mode 100644 index 000000000..9daea453f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDisableInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDisableInternalServerErrorException.php new file mode 100644 index 000000000..017c5adae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDisableInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDisableNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDisableNotFoundException.php new file mode 100644 index 000000000..a51779fb7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginDisableNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginEnableInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginEnableInternalServerErrorException.php new file mode 100644 index 000000000..53b14846c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginEnableInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginEnableNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginEnableNotFoundException.php new file mode 100644 index 000000000..3eb438cca --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginEnableNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginInspectInternalServerErrorException.php new file mode 100644 index 000000000..d4242ae57 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginInspectNotFoundException.php new file mode 100644 index 000000000..6d1aef71e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginListInternalServerErrorException.php new file mode 100644 index 000000000..a5c7fc04f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPullInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPullInternalServerErrorException.php new file mode 100644 index 000000000..d1c480bf5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPullInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPushInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPushInternalServerErrorException.php new file mode 100644 index 000000000..755460296 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPushInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPushNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPushNotFoundException.php new file mode 100644 index 000000000..486ff0c53 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginPushNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginSetInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginSetInternalServerErrorException.php new file mode 100644 index 000000000..071b5d3f8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginSetInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginSetNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginSetNotFoundException.php new file mode 100644 index 000000000..e7d2f37ca --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginSetNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginUpgradeInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginUpgradeInternalServerErrorException.php new file mode 100644 index 000000000..9a4b34c8f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginUpgradeInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PluginUpgradeNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginUpgradeNotFoundException.php new file mode 100644 index 000000000..e02bba697 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PluginUpgradeNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveBadRequestException.php new file mode 100644 index 000000000..903f49a7b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveForbiddenException.php new file mode 100644 index 000000000..4fd78e921 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveForbiddenException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveInternalServerErrorException.php new file mode 100644 index 000000000..db3937bda --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveNotFoundException.php new file mode 100644 index 000000000..e05b6e476 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/PutContainerArchiveNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateConflictException.php new file mode 100644 index 000000000..350fcd51a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateInternalServerErrorException.php new file mode 100644 index 000000000..19e250516 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateServiceUnavailableException.php new file mode 100644 index 000000000..c09454b02 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretCreateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteInternalServerErrorException.php new file mode 100644 index 000000000..3515bcce4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteNotFoundException.php new file mode 100644 index 000000000..bb280a662 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteServiceUnavailableException.php new file mode 100644 index 000000000..512fe0ade --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretDeleteServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectInternalServerErrorException.php new file mode 100644 index 000000000..9bcaa5727 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectNotFoundException.php new file mode 100644 index 000000000..bd6dbe817 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectServiceUnavailableException.php new file mode 100644 index 000000000..ed9cd288b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretInspectServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretListInternalServerErrorException.php new file mode 100644 index 000000000..6e085f3c1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretListServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretListServiceUnavailableException.php new file mode 100644 index 000000000..5cbf8b4bc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretListServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateBadRequestException.php new file mode 100644 index 000000000..481d040b7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateInternalServerErrorException.php new file mode 100644 index 000000000..a5b6e2739 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateNotFoundException.php new file mode 100644 index 000000000..8fe63ba8a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateServiceUnavailableException.php new file mode 100644 index 000000000..456d714c0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SecretUpdateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServerException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServerException.php new file mode 100644 index 000000000..76ae5c35c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServerException.php @@ -0,0 +1,9 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateConflictException.php new file mode 100644 index 000000000..2e2973d40 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateForbiddenException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateForbiddenException.php new file mode 100644 index 000000000..1a6fe6601 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateForbiddenException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateInternalServerErrorException.php new file mode 100644 index 000000000..6f9457303 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateServiceUnavailableException.php new file mode 100644 index 000000000..59c5ee554 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceCreateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteInternalServerErrorException.php new file mode 100644 index 000000000..89f3a71e8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteNotFoundException.php new file mode 100644 index 000000000..c42ba3152 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteServiceUnavailableException.php new file mode 100644 index 000000000..0355948ad --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceDeleteServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectInternalServerErrorException.php new file mode 100644 index 000000000..0ac6f2931 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectNotFoundException.php new file mode 100644 index 000000000..e4b7a91ea --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectServiceUnavailableException.php new file mode 100644 index 000000000..8cc3cb2ed --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceInspectServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceListInternalServerErrorException.php new file mode 100644 index 000000000..49a88cf60 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceListServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceListServiceUnavailableException.php new file mode 100644 index 000000000..5c9316df8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceListServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceLogsNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceLogsNotFoundException.php new file mode 100644 index 000000000..a07787124 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceLogsNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUnavailableException.php new file mode 100644 index 000000000..ef87f510d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUnavailableException.php @@ -0,0 +1,13 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateInternalServerErrorException.php new file mode 100644 index 000000000..83e0a895f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateNotFoundException.php new file mode 100644 index 000000000..de2ace0e0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateServiceUnavailableException.php new file mode 100644 index 000000000..3007a4820 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/ServiceUpdateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitBadRequestException.php new file mode 100644 index 000000000..057e87daf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitInternalServerErrorException.php new file mode 100644 index 000000000..7fb83e46c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitServiceUnavailableException.php new file mode 100644 index 000000000..70b8354a5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInitServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectInternalServerErrorException.php new file mode 100644 index 000000000..03a1a39ae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectNotFoundException.php new file mode 100644 index 000000000..6c81eb3a8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectServiceUnavailableException.php new file mode 100644 index 000000000..c6db133ae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmInspectServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinBadRequestException.php new file mode 100644 index 000000000..fc2b5abab --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinInternalServerErrorException.php new file mode 100644 index 000000000..2ba81d3a1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinServiceUnavailableException.php new file mode 100644 index 000000000..ca054324c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmJoinServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmLeaveInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmLeaveInternalServerErrorException.php new file mode 100644 index 000000000..d9a56313a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmLeaveInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmLeaveServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmLeaveServiceUnavailableException.php new file mode 100644 index 000000000..a7b6dfc53 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmLeaveServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockInternalServerErrorException.php new file mode 100644 index 000000000..85f16b09c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockServiceUnavailableException.php new file mode 100644 index 000000000..31e2ad3c2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockkeyInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockkeyInternalServerErrorException.php new file mode 100644 index 000000000..cb4258d89 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockkeyInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockkeyServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockkeyServiceUnavailableException.php new file mode 100644 index 000000000..687134028 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUnlockkeyServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateBadRequestException.php new file mode 100644 index 000000000..e176ed41f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateInternalServerErrorException.php new file mode 100644 index 000000000..63f0004ae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateServiceUnavailableException.php new file mode 100644 index 000000000..c3f12c123 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SwarmUpdateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemAuthInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemAuthInternalServerErrorException.php new file mode 100644 index 000000000..55ba05e49 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemAuthInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemAuthUnauthorizedException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemAuthUnauthorizedException.php new file mode 100644 index 000000000..3b98013bb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemAuthUnauthorizedException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemDataUsageInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemDataUsageInternalServerErrorException.php new file mode 100644 index 000000000..7c8b720d6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemDataUsageInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemEventsBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemEventsBadRequestException.php new file mode 100644 index 000000000..a606cbd6f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemEventsBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemEventsInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemEventsInternalServerErrorException.php new file mode 100644 index 000000000..abab7b3ad --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemEventsInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemInfoInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemInfoInternalServerErrorException.php new file mode 100644 index 000000000..00746aec1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemInfoInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/SystemVersionInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemVersionInternalServerErrorException.php new file mode 100644 index 000000000..a1aadc79b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/SystemVersionInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectInternalServerErrorException.php new file mode 100644 index 000000000..9ebce1e6e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectNotFoundException.php new file mode 100644 index 000000000..e33844218 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectServiceUnavailableException.php new file mode 100644 index 000000000..bf3258d8d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskInspectServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/TaskListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskListInternalServerErrorException.php new file mode 100644 index 000000000..7e3d4873e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/TaskListServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskListServiceUnavailableException.php new file mode 100644 index 000000000..e6cd1067d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskListServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/TaskLogsNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskLogsNotFoundException.php new file mode 100644 index 000000000..21fff1bec --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/TaskLogsNotFoundException.php @@ -0,0 +1,24 @@ +response = $response; + } + + public function getResponse(): ?\Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/UnauthorizedException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/UnauthorizedException.php new file mode 100644 index 000000000..685c19c62 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/UnauthorizedException.php @@ -0,0 +1,13 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteConflictException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteConflictException.php new file mode 100644 index 000000000..32282d9a1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteConflictException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteInternalServerErrorException.php new file mode 100644 index 000000000..95ec47b82 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteNotFoundException.php new file mode 100644 index 000000000..18c02b159 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeDeleteNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeInspectInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeInspectInternalServerErrorException.php new file mode 100644 index 000000000..24928851d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeInspectInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeInspectNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeInspectNotFoundException.php new file mode 100644 index 000000000..49e728428 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeInspectNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeListInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeListInternalServerErrorException.php new file mode 100644 index 000000000..2e323ed80 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeListInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumePruneInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumePruneInternalServerErrorException.php new file mode 100644 index 000000000..70e52fd00 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumePruneInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateBadRequestException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateBadRequestException.php new file mode 100644 index 000000000..d423d4cf4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateBadRequestException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateInternalServerErrorException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateInternalServerErrorException.php new file mode 100644 index 000000000..fad2b7106 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateInternalServerErrorException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateNotFoundException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateNotFoundException.php new file mode 100644 index 000000000..0309562d0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateNotFoundException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateServiceUnavailableException.php b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateServiceUnavailableException.php new file mode 100644 index 000000000..52e891a1c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Exception/VolumeUpdateServiceUnavailableException.php @@ -0,0 +1,34 @@ +errorResponse = $errorResponse; + $this->response = $response; + } + + public function getErrorResponse(): \Docker\API\Model\ErrorResponse + { + return $this->errorResponse; + } + + public function getResponse(): \Psr\Http\Message\ResponseInterface + { + return $this->response; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Address.php b/app/vendor/beluga-php/docker-php-api/src/Model/Address.php new file mode 100644 index 000000000..536395cb6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Address.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * IP address. + * + * @var string|null + */ + protected $addr; + /** + * Mask length of the IP address. + * + * @var int|null + */ + protected $prefixLen; + + /** + * IP address. + */ + public function getAddr(): ?string + { + return $this->addr; + } + + /** + * IP address. + */ + public function setAddr(?string $addr): self + { + $this->initialized['addr'] = true; + $this->addr = $addr; + + return $this; + } + + /** + * Mask length of the IP address. + */ + public function getPrefixLen(): ?int + { + return $this->prefixLen; + } + + /** + * Mask length of the IP address. + */ + public function setPrefixLen(?int $prefixLen): self + { + $this->initialized['prefixLen'] = true; + $this->prefixLen = $prefixLen; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/AuthConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/AuthConfig.php new file mode 100644 index 000000000..ed7af28be --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/AuthConfig.php @@ -0,0 +1,86 @@ +initialized); + } + /** + * @var string|null + */ + protected $username; + /** + * @var string|null + */ + protected $password; + /** + * @var string|null + */ + protected $email; + /** + * @var string|null + */ + protected $serveraddress; + + public function getUsername(): ?string + { + return $this->username; + } + + public function setUsername(?string $username): self + { + $this->initialized['username'] = true; + $this->username = $username; + + return $this; + } + + public function getPassword(): ?string + { + return $this->password; + } + + public function setPassword(?string $password): self + { + $this->initialized['password'] = true; + $this->password = $password; + + return $this; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(?string $email): self + { + $this->initialized['email'] = true; + $this->email = $email; + + return $this; + } + + public function getServeraddress(): ?string + { + return $this->serveraddress; + } + + public function setServeraddress(?string $serveraddress): self + { + $this->initialized['serveraddress'] = true; + $this->serveraddress = $serveraddress; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/AuthPostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/AuthPostResponse200.php new file mode 100644 index 000000000..3ef9bdfa7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/AuthPostResponse200.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The status of the authentication. + * + * @var string|null + */ + protected $status; + /** + * An opaque token used to authenticate a user after a successful login. + * + * @var string|null + */ + protected $identityToken; + + /** + * The status of the authentication. + */ + public function getStatus(): ?string + { + return $this->status; + } + + /** + * The status of the authentication. + */ + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + /** + * An opaque token used to authenticate a user after a successful login. + */ + public function getIdentityToken(): ?string + { + return $this->identityToken; + } + + /** + * An opaque token used to authenticate a user after a successful login. + */ + public function setIdentityToken(?string $identityToken): self + { + $this->initialized['identityToken'] = true; + $this->identityToken = $identityToken; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/BuildCache.php b/app/vendor/beluga-php/docker-php-api/src/Model/BuildCache.php new file mode 100644 index 000000000..c947bd235 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/BuildCache.php @@ -0,0 +1,301 @@ +initialized); + } + /** + * Unique ID of the build cache record. + * + * @var string|null + */ + protected $iD; + /** + * ID of the parent build cache record. + * + * > **Deprecated**: This field is deprecated, and omitted if empty. + * + * @var string|null + */ + protected $parent; + /** + * List of parent build cache record IDs. + * + * @var list|null + */ + protected $parents; + /** + * Cache record type. + * + * @var string|null + */ + protected $type; + /** + * Description of the build-step that produced the build cache. + * + * @var string|null + */ + protected $description; + /** + * Indicates if the build cache is in use. + * + * @var bool|null + */ + protected $inUse; + /** + * Indicates if the build cache is shared. + * + * @var bool|null + */ + protected $shared; + /** + * Amount of disk space used by the build cache (in bytes). + * + * @var int|null + */ + protected $size; + /** + * Date and time at which the build cache was created in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $createdAt; + /** + * Date and time at which the build cache was last used in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $lastUsedAt; + /** + * @var int|null + */ + protected $usageCount; + + /** + * Unique ID of the build cache record. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * Unique ID of the build cache record. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * ID of the parent build cache record. + * + * > **Deprecated**: This field is deprecated, and omitted if empty. + */ + public function getParent(): ?string + { + return $this->parent; + } + + /** + * ID of the parent build cache record. + * + * > **Deprecated**: This field is deprecated, and omitted if empty. + */ + public function setParent(?string $parent): self + { + $this->initialized['parent'] = true; + $this->parent = $parent; + + return $this; + } + + /** + * List of parent build cache record IDs. + * + * @return list|null + */ + public function getParents(): ?array + { + return $this->parents; + } + + /** + * List of parent build cache record IDs. + * + * @param list|null $parents + */ + public function setParents(?array $parents): self + { + $this->initialized['parents'] = true; + $this->parents = $parents; + + return $this; + } + + /** + * Cache record type. + */ + public function getType(): ?string + { + return $this->type; + } + + /** + * Cache record type. + */ + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * Description of the build-step that produced the build cache. + */ + public function getDescription(): ?string + { + return $this->description; + } + + /** + * Description of the build-step that produced the build cache. + */ + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * Indicates if the build cache is in use. + */ + public function getInUse(): ?bool + { + return $this->inUse; + } + + /** + * Indicates if the build cache is in use. + */ + public function setInUse(?bool $inUse): self + { + $this->initialized['inUse'] = true; + $this->inUse = $inUse; + + return $this; + } + + /** + * Indicates if the build cache is shared. + */ + public function getShared(): ?bool + { + return $this->shared; + } + + /** + * Indicates if the build cache is shared. + */ + public function setShared(?bool $shared): self + { + $this->initialized['shared'] = true; + $this->shared = $shared; + + return $this; + } + + /** + * Amount of disk space used by the build cache (in bytes). + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * Amount of disk space used by the build cache (in bytes). + */ + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } + + /** + * Date and time at which the build cache was created in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + /** + * Date and time at which the build cache was created in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + /** + * Date and time at which the build cache was last used in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getLastUsedAt(): ?string + { + return $this->lastUsedAt; + } + + /** + * Date and time at which the build cache was last used in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setLastUsedAt(?string $lastUsedAt): self + { + $this->initialized['lastUsedAt'] = true; + $this->lastUsedAt = $lastUsedAt; + + return $this; + } + + public function getUsageCount(): ?int + { + return $this->usageCount; + } + + public function setUsageCount(?int $usageCount): self + { + $this->initialized['usageCount'] = true; + $this->usageCount = $usageCount; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/BuildInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/BuildInfo.php new file mode 100644 index 000000000..c849d6151 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/BuildInfo.php @@ -0,0 +1,162 @@ +initialized); + } + /** + * @var string|null + */ + protected $id; + /** + * @var string|null + */ + protected $stream; + /** + * @var string|null + */ + protected $error; + /** + * @var ErrorDetail|null + */ + protected $errorDetail; + /** + * @var string|null + */ + protected $status; + /** + * @var string|null + */ + protected $progress; + /** + * @var ProgressDetail|null + */ + protected $progressDetail; + /** + * Image ID or Digest. + * + * @var ImageID|null + */ + protected $aux; + + public function getId(): ?string + { + return $this->id; + } + + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + public function getStream(): ?string + { + return $this->stream; + } + + public function setStream(?string $stream): self + { + $this->initialized['stream'] = true; + $this->stream = $stream; + + return $this; + } + + public function getError(): ?string + { + return $this->error; + } + + public function setError(?string $error): self + { + $this->initialized['error'] = true; + $this->error = $error; + + return $this; + } + + public function getErrorDetail(): ?ErrorDetail + { + return $this->errorDetail; + } + + public function setErrorDetail(?ErrorDetail $errorDetail): self + { + $this->initialized['errorDetail'] = true; + $this->errorDetail = $errorDetail; + + return $this; + } + + public function getStatus(): ?string + { + return $this->status; + } + + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + public function getProgress(): ?string + { + return $this->progress; + } + + public function setProgress(?string $progress): self + { + $this->initialized['progress'] = true; + $this->progress = $progress; + + return $this; + } + + public function getProgressDetail(): ?ProgressDetail + { + return $this->progressDetail; + } + + public function setProgressDetail(?ProgressDetail $progressDetail): self + { + $this->initialized['progressDetail'] = true; + $this->progressDetail = $progressDetail; + + return $this; + } + + /** + * Image ID or Digest. + */ + public function getAux(): ?ImageID + { + return $this->aux; + } + + /** + * Image ID or Digest. + */ + public function setAux(?ImageID $aux): self + { + $this->initialized['aux'] = true; + $this->aux = $aux; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/BuildPrunePostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/BuildPrunePostResponse200.php new file mode 100644 index 000000000..b630ca4c5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/BuildPrunePostResponse200.php @@ -0,0 +1,66 @@ +initialized); + } + /** + * @var list|null + */ + protected $cachesDeleted; + /** + * Disk space reclaimed in bytes. + * + * @var int|null + */ + protected $spaceReclaimed; + + /** + * @return list|null + */ + public function getCachesDeleted(): ?array + { + return $this->cachesDeleted; + } + + /** + * @param list|null $cachesDeleted + */ + public function setCachesDeleted(?array $cachesDeleted): self + { + $this->initialized['cachesDeleted'] = true; + $this->cachesDeleted = $cachesDeleted; + + return $this; + } + + /** + * Disk space reclaimed in bytes. + */ + public function getSpaceReclaimed(): ?int + { + return $this->spaceReclaimed; + } + + /** + * Disk space reclaimed in bytes. + */ + public function setSpaceReclaimed(?int $spaceReclaimed): self + { + $this->initialized['spaceReclaimed'] = true; + $this->spaceReclaimed = $spaceReclaimed; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterInfo.php new file mode 100644 index 000000000..0b679457a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterInfo.php @@ -0,0 +1,320 @@ +initialized); + } + /** + * The ID of the swarm. + * + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * Date and time at which the swarm was initialised in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $createdAt; + /** + * Date and time at which the swarm was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $updatedAt; + /** + * User modifiable swarm configuration. + * + * @var SwarmSpec|null + */ + protected $spec; + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + * + * @var TLSInfo|null + */ + protected $tLSInfo; + /** + * Whether there is currently a root CA rotation in progress for the swarm. + * + * @var bool|null + */ + protected $rootRotationInProgress; + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * If no port is set or is set to 0, the default port (4789) is used. + * + * @var int|null + */ + protected $dataPathPort; + /** + * Default Address Pool specifies default subnet pools for global scope + * networks. + * + * @var list|null + */ + protected $defaultAddrPool; + /** + * SubnetSize specifies the subnet size of the networks created from the + * default subnet pool. + * + * @var int|null + */ + protected $subnetSize; + + /** + * The ID of the swarm. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * The ID of the swarm. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + /** + * Date and time at which the swarm was initialised in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + /** + * Date and time at which the swarm was initialised in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + /** + * Date and time at which the swarm was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + /** + * Date and time at which the swarm was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + /** + * User modifiable swarm configuration. + */ + public function getSpec(): ?SwarmSpec + { + return $this->spec; + } + + /** + * User modifiable swarm configuration. + */ + public function setSpec(?SwarmSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + */ + public function getTLSInfo(): ?TLSInfo + { + return $this->tLSInfo; + } + + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + */ + public function setTLSInfo(?TLSInfo $tLSInfo): self + { + $this->initialized['tLSInfo'] = true; + $this->tLSInfo = $tLSInfo; + + return $this; + } + + /** + * Whether there is currently a root CA rotation in progress for the swarm. + */ + public function getRootRotationInProgress(): ?bool + { + return $this->rootRotationInProgress; + } + + /** + * Whether there is currently a root CA rotation in progress for the swarm. + */ + public function setRootRotationInProgress(?bool $rootRotationInProgress): self + { + $this->initialized['rootRotationInProgress'] = true; + $this->rootRotationInProgress = $rootRotationInProgress; + + return $this; + } + + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * If no port is set or is set to 0, the default port (4789) is used. + */ + public function getDataPathPort(): ?int + { + return $this->dataPathPort; + } + + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * If no port is set or is set to 0, the default port (4789) is used. + */ + public function setDataPathPort(?int $dataPathPort): self + { + $this->initialized['dataPathPort'] = true; + $this->dataPathPort = $dataPathPort; + + return $this; + } + + /** + * Default Address Pool specifies default subnet pools for global scope + * networks. + * + * @return list|null + */ + public function getDefaultAddrPool(): ?array + { + return $this->defaultAddrPool; + } + + /** + * Default Address Pool specifies default subnet pools for global scope + * networks. + * + * @param list|null $defaultAddrPool + */ + public function setDefaultAddrPool(?array $defaultAddrPool): self + { + $this->initialized['defaultAddrPool'] = true; + $this->defaultAddrPool = $defaultAddrPool; + + return $this; + } + + /** + * SubnetSize specifies the subnet size of the networks created from the + * default subnet pool. + */ + public function getSubnetSize(): ?int + { + return $this->subnetSize; + } + + /** + * SubnetSize specifies the subnet size of the networks created from the + * default subnet pool. + */ + public function setSubnetSize(?int $subnetSize): self + { + $this->initialized['subnetSize'] = true; + $this->subnetSize = $subnetSize; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolume.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolume.php new file mode 100644 index 000000000..dfc6e9f3a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolume.php @@ -0,0 +1,217 @@ +initialized); + } + /** + * The Swarm ID of this volume. Because cluster volumes are Swarm + * objects, they have an ID, unlike non-cluster volumes. This ID can + * be used to refer to the Volume instead of the name. + * + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * @var string|null + */ + protected $createdAt; + /** + * @var string|null + */ + protected $updatedAt; + /** + * Cluster-specific options used to create the volume. + * + * @var ClusterVolumeSpec|null + */ + protected $spec; + /** + * Information about the global status of the volume. + * + * @var ClusterVolumeInfo|null + */ + protected $info; + /** + * The status of the volume as it pertains to its publishing and use on + * specific nodes. + * + * @var list|null + */ + protected $publishStatus; + + /** + * The Swarm ID of this volume. Because cluster volumes are Swarm + * objects, they have an ID, unlike non-cluster volumes. This ID can + * be used to refer to the Volume instead of the name. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * The Swarm ID of this volume. Because cluster volumes are Swarm + * objects, they have an ID, unlike non-cluster volumes. This ID can + * be used to refer to the Volume instead of the name. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + /** + * Cluster-specific options used to create the volume. + */ + public function getSpec(): ?ClusterVolumeSpec + { + return $this->spec; + } + + /** + * Cluster-specific options used to create the volume. + */ + public function setSpec(?ClusterVolumeSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + /** + * Information about the global status of the volume. + */ + public function getInfo(): ?ClusterVolumeInfo + { + return $this->info; + } + + /** + * Information about the global status of the volume. + */ + public function setInfo(?ClusterVolumeInfo $info): self + { + $this->initialized['info'] = true; + $this->info = $info; + + return $this; + } + + /** + * The status of the volume as it pertains to its publishing and use on + * specific nodes. + * + * @return list|null + */ + public function getPublishStatus(): ?array + { + return $this->publishStatus; + } + + /** + * The status of the volume as it pertains to its publishing and use on + * specific nodes. + * + * @param list|null $publishStatus + */ + public function setPublishStatus(?array $publishStatus): self + { + $this->initialized['publishStatus'] = true; + $this->publishStatus = $publishStatus; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeInfo.php new file mode 100644 index 000000000..1a8d4f581 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeInfo.php @@ -0,0 +1,144 @@ +initialized); + } + /** + * The capacity of the volume in bytes. A value of 0 indicates that + * the capacity is unknown. + * + * @var int|null + */ + protected $capacityBytes; + /** + * A map of strings to strings returned from the storage plugin when + * the volume is created. + * + * @var array|null + */ + protected $volumeContext; + /** + * The ID of the volume as returned by the CSI storage plugin. This + * is distinct from the volume's ID as provided by Docker. This ID + * is never used by the user when communicating with Docker to refer + * to this volume. If the ID is blank, then the Volume has not been + * successfully created in the plugin yet. + * + * @var string|null + */ + protected $volumeID; + /** + * The topology this volume is actually accessible from. + * + * @var list>|null + */ + protected $accessibleTopology; + + /** + * The capacity of the volume in bytes. A value of 0 indicates that + * the capacity is unknown. + */ + public function getCapacityBytes(): ?int + { + return $this->capacityBytes; + } + + /** + * The capacity of the volume in bytes. A value of 0 indicates that + * the capacity is unknown. + */ + public function setCapacityBytes(?int $capacityBytes): self + { + $this->initialized['capacityBytes'] = true; + $this->capacityBytes = $capacityBytes; + + return $this; + } + + /** + * A map of strings to strings returned from the storage plugin when + * the volume is created. + * + * @return array|null + */ + public function getVolumeContext(): ?iterable + { + return $this->volumeContext; + } + + /** + * A map of strings to strings returned from the storage plugin when + * the volume is created. + * + * @param array|null $volumeContext + */ + public function setVolumeContext(?iterable $volumeContext): self + { + $this->initialized['volumeContext'] = true; + $this->volumeContext = $volumeContext; + + return $this; + } + + /** + * The ID of the volume as returned by the CSI storage plugin. This + * is distinct from the volume's ID as provided by Docker. This ID + * is never used by the user when communicating with Docker to refer + * to this volume. If the ID is blank, then the Volume has not been + * successfully created in the plugin yet. + */ + public function getVolumeID(): ?string + { + return $this->volumeID; + } + + /** + * The ID of the volume as returned by the CSI storage plugin. This + * is distinct from the volume's ID as provided by Docker. This ID + * is never used by the user when communicating with Docker to refer + * to this volume. If the ID is blank, then the Volume has not been + * successfully created in the plugin yet. + */ + public function setVolumeID(?string $volumeID): self + { + $this->initialized['volumeID'] = true; + $this->volumeID = $volumeID; + + return $this; + } + + /** + * The topology this volume is actually accessible from. + * + * @return list>|null + */ + public function getAccessibleTopology(): ?array + { + return $this->accessibleTopology; + } + + /** + * The topology this volume is actually accessible from. + * + * @param list>|null $accessibleTopology + */ + public function setAccessibleTopology(?array $accessibleTopology): self + { + $this->initialized['accessibleTopology'] = true; + $this->accessibleTopology = $accessibleTopology; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumePublishStatusItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumePublishStatusItem.php new file mode 100644 index 000000000..11f99925a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumePublishStatusItem.php @@ -0,0 +1,112 @@ +initialized); + } + /** + * The ID of the Swarm node the volume is published on. + * + * @var string|null + */ + protected $nodeID; + /** + * The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + * + * @var string|null + */ + protected $state; + /** + * A map of strings to strings returned by the CSI controller + * plugin when a volume is published. + * + * @var array|null + */ + protected $publishContext; + + /** + * The ID of the Swarm node the volume is published on. + */ + public function getNodeID(): ?string + { + return $this->nodeID; + } + + /** + * The ID of the Swarm node the volume is published on. + */ + public function setNodeID(?string $nodeID): self + { + $this->initialized['nodeID'] = true; + $this->nodeID = $nodeID; + + return $this; + } + + /** + * The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + */ + public function getState(): ?string + { + return $this->state; + } + + /** + * The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + */ + public function setState(?string $state): self + { + $this->initialized['state'] = true; + $this->state = $state; + + return $this; + } + + /** + * A map of strings to strings returned by the CSI controller + * plugin when a volume is published. + * + * @return array|null + */ + public function getPublishContext(): ?iterable + { + return $this->publishContext; + } + + /** + * A map of strings to strings returned by the CSI controller + * plugin when a volume is published. + * + * @param array|null $publishContext + */ + public function setPublishContext(?iterable $publishContext): self + { + $this->initialized['publishContext'] = true; + $this->publishContext = $publishContext; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpec.php new file mode 100644 index 000000000..a8e8db240 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpec.php @@ -0,0 +1,83 @@ +initialized); + } + /** + * Group defines the volume group of this volume. Volumes belonging to + * the same group can be referred to by group name when creating + * Services. Referring to a volume by group instructs Swarm to treat + * volumes in that group interchangeably for the purpose of scheduling. + * Volumes with an empty string for a group technically all belong to + * the same, emptystring group. + * + * @var string|null + */ + protected $group; + /** + * Defines how the volume is used by tasks. + * + * @var ClusterVolumeSpecAccessMode|null + */ + protected $accessMode; + + /** + * Group defines the volume group of this volume. Volumes belonging to + * the same group can be referred to by group name when creating + * Services. Referring to a volume by group instructs Swarm to treat + * volumes in that group interchangeably for the purpose of scheduling. + * Volumes with an empty string for a group technically all belong to + * the same, emptystring group. + */ + public function getGroup(): ?string + { + return $this->group; + } + + /** + * Group defines the volume group of this volume. Volumes belonging to + * the same group can be referred to by group name when creating + * Services. Referring to a volume by group instructs Swarm to treat + * volumes in that group interchangeably for the purpose of scheduling. + * Volumes with an empty string for a group technically all belong to + * the same, emptystring group. + */ + public function setGroup(?string $group): self + { + $this->initialized['group'] = true; + $this->group = $group; + + return $this; + } + + /** + * Defines how the volume is used by tasks. + */ + public function getAccessMode(): ?ClusterVolumeSpecAccessMode + { + return $this->accessMode; + } + + /** + * Defines how the volume is used by tasks. + */ + public function setAccessMode(?ClusterVolumeSpecAccessMode $accessMode): self + { + $this->initialized['accessMode'] = true; + $this->accessMode = $accessMode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessMode.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessMode.php new file mode 100644 index 000000000..661b6be1f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessMode.php @@ -0,0 +1,299 @@ +initialized); + } + /** + * The set of nodes this volume can be used on at one time. + * - `single` The volume may only be scheduled to one node at a time. + * - `multi` the volume may be scheduled to any supported number of nodes at a time. + * + * @var string|null + */ + protected $scope = 'single'; + /** + * The number and way that different tasks can use this volume + * at one time. + * - `none` The volume may only be used by one task at a time. + * - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + * - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + * - `all` The volume may have any number of readers and writers. + * + * @var string|null + */ + protected $sharing = 'none'; + /** + * Options for using this volume as a Mount-type volume. + * + * Either MountVolume or BlockVolume, but not both, must be + * present. + * properties: + * FsType: + * type: "string" + * description: | + * Specifies the filesystem type for the mount volume. + * Optional. + * MountFlags: + * type: "array" + * description: | + * Flags to pass when mounting the volume. Optional. + * items: + * type: "string" + * BlockVolume: + * type: "object" + * description: | + * Options for using this volume as a Block-type volume. + * Intentionally empty. + * + * @var ClusterVolumeSpecAccessModeMountVolume|null + */ + protected $mountVolume; + /** + * Swarm Secrets that are passed to the CSI storage plugin when + * operating on this volume. + * + * @var list|null + */ + protected $secrets; + /** + * Requirements for the accessible topology of the volume. These + * fields are optional. For an in-depth description of what these + * fields mean, see the CSI specification. + * + * @var ClusterVolumeSpecAccessModeAccessibilityRequirements|null + */ + protected $accessibilityRequirements; + /** + * The desired capacity that the volume should be created with. If + * empty, the plugin will decide the capacity. + * + * @var ClusterVolumeSpecAccessModeCapacityRange|null + */ + protected $capacityRange; + /** + * The availability of the volume for use in tasks. + * - `active` The volume is fully available for scheduling on the cluster + * - `pause` No new workloads should use the volume, but existing workloads are not stopped. + * - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + * + * @var string|null + */ + protected $availability = 'active'; + + /** + * The set of nodes this volume can be used on at one time. + * - `single` The volume may only be scheduled to one node at a time. + * - `multi` the volume may be scheduled to any supported number of nodes at a time. + */ + public function getScope(): ?string + { + return $this->scope; + } + + /** + * The set of nodes this volume can be used on at one time. + * - `single` The volume may only be scheduled to one node at a time. + * - `multi` the volume may be scheduled to any supported number of nodes at a time. + */ + public function setScope(?string $scope): self + { + $this->initialized['scope'] = true; + $this->scope = $scope; + + return $this; + } + + /** + * The number and way that different tasks can use this volume + * at one time. + * - `none` The volume may only be used by one task at a time. + * - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + * - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + * - `all` The volume may have any number of readers and writers. + */ + public function getSharing(): ?string + { + return $this->sharing; + } + + /** + * The number and way that different tasks can use this volume + * at one time. + * - `none` The volume may only be used by one task at a time. + * - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + * - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + * - `all` The volume may have any number of readers and writers. + */ + public function setSharing(?string $sharing): self + { + $this->initialized['sharing'] = true; + $this->sharing = $sharing; + + return $this; + } + + /** + * Options for using this volume as a Mount-type volume. + * + * Either MountVolume or BlockVolume, but not both, must be + * present. + * properties: + * FsType: + * type: "string" + * description: | + * Specifies the filesystem type for the mount volume. + * Optional. + * MountFlags: + * type: "array" + * description: | + * Flags to pass when mounting the volume. Optional. + * items: + * type: "string" + * BlockVolume: + * type: "object" + * description: | + * Options for using this volume as a Block-type volume. + * Intentionally empty. + */ + public function getMountVolume(): ?ClusterVolumeSpecAccessModeMountVolume + { + return $this->mountVolume; + } + + /** + * Options for using this volume as a Mount-type volume. + * + * Either MountVolume or BlockVolume, but not both, must be + * present. + * properties: + * FsType: + * type: "string" + * description: | + * Specifies the filesystem type for the mount volume. + * Optional. + * MountFlags: + * type: "array" + * description: | + * Flags to pass when mounting the volume. Optional. + * items: + * type: "string" + * BlockVolume: + * type: "object" + * description: | + * Options for using this volume as a Block-type volume. + * Intentionally empty. + */ + public function setMountVolume(?ClusterVolumeSpecAccessModeMountVolume $mountVolume): self + { + $this->initialized['mountVolume'] = true; + $this->mountVolume = $mountVolume; + + return $this; + } + + /** + * Swarm Secrets that are passed to the CSI storage plugin when + * operating on this volume. + * + * @return list|null + */ + public function getSecrets(): ?array + { + return $this->secrets; + } + + /** + * Swarm Secrets that are passed to the CSI storage plugin when + * operating on this volume. + * + * @param list|null $secrets + */ + public function setSecrets(?array $secrets): self + { + $this->initialized['secrets'] = true; + $this->secrets = $secrets; + + return $this; + } + + /** + * Requirements for the accessible topology of the volume. These + * fields are optional. For an in-depth description of what these + * fields mean, see the CSI specification. + */ + public function getAccessibilityRequirements(): ?ClusterVolumeSpecAccessModeAccessibilityRequirements + { + return $this->accessibilityRequirements; + } + + /** + * Requirements for the accessible topology of the volume. These + * fields are optional. For an in-depth description of what these + * fields mean, see the CSI specification. + */ + public function setAccessibilityRequirements(?ClusterVolumeSpecAccessModeAccessibilityRequirements $accessibilityRequirements): self + { + $this->initialized['accessibilityRequirements'] = true; + $this->accessibilityRequirements = $accessibilityRequirements; + + return $this; + } + + /** + * The desired capacity that the volume should be created with. If + * empty, the plugin will decide the capacity. + */ + public function getCapacityRange(): ?ClusterVolumeSpecAccessModeCapacityRange + { + return $this->capacityRange; + } + + /** + * The desired capacity that the volume should be created with. If + * empty, the plugin will decide the capacity. + */ + public function setCapacityRange(?ClusterVolumeSpecAccessModeCapacityRange $capacityRange): self + { + $this->initialized['capacityRange'] = true; + $this->capacityRange = $capacityRange; + + return $this; + } + + /** + * The availability of the volume for use in tasks. + * - `active` The volume is fully available for scheduling on the cluster + * - `pause` No new workloads should use the volume, but existing workloads are not stopped. + * - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + */ + public function getAvailability(): ?string + { + return $this->availability; + } + + /** + * The availability of the volume for use in tasks. + * - `active` The volume is fully available for scheduling on the cluster + * - `pause` No new workloads should use the volume, but existing workloads are not stopped. + * - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + */ + public function setAvailability(?string $availability): self + { + $this->initialized['availability'] = true; + $this->availability = $availability; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeAccessibilityRequirements.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeAccessibilityRequirements.php new file mode 100644 index 000000000..795f330b0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeAccessibilityRequirements.php @@ -0,0 +1,82 @@ +initialized); + } + /** + * A list of required topologies, at least one of which the + * volume must be accessible from. + * + * @var list>|null + */ + protected $requisite; + /** + * A list of topologies that the volume should attempt to be + * provisioned in. + * + * @var list>|null + */ + protected $preferred; + + /** + * A list of required topologies, at least one of which the + * volume must be accessible from. + * + * @return list>|null + */ + public function getRequisite(): ?array + { + return $this->requisite; + } + + /** + * A list of required topologies, at least one of which the + * volume must be accessible from. + * + * @param list>|null $requisite + */ + public function setRequisite(?array $requisite): self + { + $this->initialized['requisite'] = true; + $this->requisite = $requisite; + + return $this; + } + + /** + * A list of topologies that the volume should attempt to be + * provisioned in. + * + * @return list>|null + */ + public function getPreferred(): ?array + { + return $this->preferred; + } + + /** + * A list of topologies that the volume should attempt to be + * provisioned in. + * + * @param list>|null $preferred + */ + public function setPreferred(?array $preferred): self + { + $this->initialized['preferred'] = true; + $this->preferred = $preferred; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeCapacityRange.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeCapacityRange.php new file mode 100644 index 000000000..36d430f37 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeCapacityRange.php @@ -0,0 +1,74 @@ +initialized); + } + /** + * The volume must be at least this big. The value of 0 + * indicates an unspecified minimum. + * + * @var int|null + */ + protected $requiredBytes; + /** + * The volume must not be bigger than this. The value of 0 + * indicates an unspecified maximum. + * + * @var int|null + */ + protected $limitBytes; + + /** + * The volume must be at least this big. The value of 0 + * indicates an unspecified minimum. + */ + public function getRequiredBytes(): ?int + { + return $this->requiredBytes; + } + + /** + * The volume must be at least this big. The value of 0 + * indicates an unspecified minimum. + */ + public function setRequiredBytes(?int $requiredBytes): self + { + $this->initialized['requiredBytes'] = true; + $this->requiredBytes = $requiredBytes; + + return $this; + } + + /** + * The volume must not be bigger than this. The value of 0 + * indicates an unspecified maximum. + */ + public function getLimitBytes(): ?int + { + return $this->limitBytes; + } + + /** + * The volume must not be bigger than this. The value of 0 + * indicates an unspecified maximum. + */ + public function setLimitBytes(?int $limitBytes): self + { + $this->initialized['limitBytes'] = true; + $this->limitBytes = $limitBytes; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeMountVolume.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeMountVolume.php new file mode 100644 index 000000000..3148eaadf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeMountVolume.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeSecretsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeSecretsItem.php new file mode 100644 index 000000000..1c68a7dd0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ClusterVolumeSpecAccessModeSecretsItem.php @@ -0,0 +1,80 @@ +initialized); + } + /** + * Key is the name of the key of the key-value pair passed to + * the plugin. + * + * @var string|null + */ + protected $key; + /** + * Secret is the swarm Secret object from which to read data. + * This can be a Secret name or ID. The Secret data is + * retrieved by swarm and used as the value of the key-value + * pair passed to the plugin. + * + * @var string|null + */ + protected $secret; + + /** + * Key is the name of the key of the key-value pair passed to + * the plugin. + */ + public function getKey(): ?string + { + return $this->key; + } + + /** + * Key is the name of the key of the key-value pair passed to + * the plugin. + */ + public function setKey(?string $key): self + { + $this->initialized['key'] = true; + $this->key = $key; + + return $this; + } + + /** + * Secret is the swarm Secret object from which to read data. + * This can be a Secret name or ID. The Secret data is + * retrieved by swarm and used as the value of the key-value + * pair passed to the plugin. + */ + public function getSecret(): ?string + { + return $this->secret; + } + + /** + * Secret is the swarm Secret object from which to read data. + * This can be a Secret name or ID. The Secret data is + * retrieved by swarm and used as the value of the key-value + * pair passed to the plugin. + */ + public function setSecret(?string $secret): self + { + $this->initialized['secret'] = true; + $this->secret = $secret; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Commit.php b/app/vendor/beluga-php/docker-php-api/src/Model/Commit.php new file mode 100644 index 000000000..d66c92476 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Commit.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * Actual commit ID of external tool. + * + * @var string|null + */ + protected $iD; + /** + * Commit ID of external tool expected by dockerd as set at build time. + * + * @var string|null + */ + protected $expected; + + /** + * Actual commit ID of external tool. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * Actual commit ID of external tool. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * Commit ID of external tool expected by dockerd as set at build time. + */ + public function getExpected(): ?string + { + return $this->expected; + } + + /** + * Commit ID of external tool expected by dockerd as set at build time. + */ + public function setExpected(?string $expected): self + { + $this->initialized['expected'] = true; + $this->expected = $expected; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Config.php b/app/vendor/beluga-php/docker-php-api/src/Model/Config.php new file mode 100644 index 000000000..43285757b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Config.php @@ -0,0 +1,138 @@ +initialized); + } + /** + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * @var string|null + */ + protected $createdAt; + /** + * @var string|null + */ + protected $updatedAt; + /** + * @var ConfigSpec|null + */ + protected $spec; + + public function getID(): ?string + { + return $this->iD; + } + + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + public function getSpec(): ?ConfigSpec + { + return $this->spec; + } + + public function setSpec(?ConfigSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ConfigSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/ConfigSpec.php new file mode 100644 index 000000000..876e4b118 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ConfigSpec.php @@ -0,0 +1,125 @@ +initialized); + } + /** + * User-defined name of the config. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * config data. + * + * @var string|null + */ + protected $data; + /** + * Driver represents a driver (network, logging, secrets). + * + * @var Driver|null + */ + protected $templating; + + /** + * User-defined name of the config. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * User-defined name of the config. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * config data. + */ + public function getData(): ?string + { + return $this->data; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * config data. + */ + public function setData(?string $data): self + { + $this->initialized['data'] = true; + $this->data = $data; + + return $this; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function getTemplating(): ?Driver + { + return $this->templating; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function setTemplating(?Driver $templating): self + { + $this->initialized['templating'] = true; + $this->templating = $templating; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ConfigsCreatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ConfigsCreatePostBody.php new file mode 100644 index 000000000..4d2b70787 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ConfigsCreatePostBody.php @@ -0,0 +1,125 @@ +initialized); + } + /** + * User-defined name of the config. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * config data. + * + * @var string|null + */ + protected $data; + /** + * Driver represents a driver (network, logging, secrets). + * + * @var Driver|null + */ + protected $templating; + + /** + * User-defined name of the config. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * User-defined name of the config. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * config data. + */ + public function getData(): ?string + { + return $this->data; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * config data. + */ + public function setData(?string $data): self + { + $this->initialized['data'] = true; + $this->data = $data; + + return $this; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function getTemplating(): ?Driver + { + return $this->templating; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function setTemplating(?Driver $templating): self + { + $this->initialized['templating'] = true; + $this->templating = $templating; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfig.php new file mode 100644 index 000000000..7eaef0f21 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfig.php @@ -0,0 +1,711 @@ +initialized); + } + /** + * The hostname to use for the container, as a valid RFC 1123 hostname. + * + * @var string|null + */ + protected $hostname; + /** + * The domain name to use for the container. + * + * @var string|null + */ + protected $domainname; + /** + * The user that commands are run as inside the container. + * + * @var string|null + */ + protected $user; + /** + * Whether to attach to `stdin`. + * + * @var bool|null + */ + protected $attachStdin = false; + /** + * Whether to attach to `stdout`. + * + * @var bool|null + */ + protected $attachStdout = true; + /** + * Whether to attach to `stderr`. + * + * @var bool|null + */ + protected $attachStderr = true; + /** + * An object mapping ports to an empty object in the form: + * + * `{"/": {}}` + * + * @var array|null + */ + protected $exposedPorts; + /** + * Attach standard streams to a TTY, including `stdin` if it is not closed. + * + * @var bool|null + */ + protected $tty = false; + /** + * Open `stdin`. + * + * @var bool|null + */ + protected $openStdin = false; + /** + * Close `stdin` after one attached client disconnects. + * + * @var bool|null + */ + protected $stdinOnce = false; + /** + * A list of environment variables to set inside the container in the + * form `["VAR=value", ...]`. A variable without `=` is removed from the + * environment, rather than to have an empty value. + * + * @var list|null + */ + protected $env; + /** + * Command to run specified as a string or an array of strings. + * + * @var list|null + */ + protected $cmd; + /** + * A test to perform to check that the container is healthy. + * + * @var HealthConfig|null + */ + protected $healthcheck; + /** + * Command is already escaped (Windows only). + * + * @var bool|null + */ + protected $argsEscaped = false; + /** + * The name (or reference) of the image to use when creating the container, + * or which was used when the container was created. + * + * @var string|null + */ + protected $image; + /** + * An object mapping mount point paths inside the container to empty + * objects. + * + * @var array|null + */ + protected $volumes; + /** + * The working directory for commands to run in. + * + * @var string|null + */ + protected $workingDir; + /** + * The entry point for the container as a string or an array of strings. + * + * If the array consists of exactly one empty string (`[""]`) then the + * entry point is reset to system default (i.e., the entry point used by + * docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + * + * @var list|null + */ + protected $entrypoint; + /** + * Disable networking for the container. + * + * @var bool|null + */ + protected $networkDisabled; + /** + * MAC address of the container. + * + * Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. + * + * @var string|null + */ + protected $macAddress; + /** + * `ONBUILD` metadata that were defined in the image's `Dockerfile`. + * + * @var list|null + */ + protected $onBuild; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Signal to stop a container as a string or unsigned integer. + * + * @var string|null + */ + protected $stopSignal; + /** + * Timeout to stop a container in seconds. + * + * @var int|null + */ + protected $stopTimeout; + /** + * Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + * + * @var list|null + */ + protected $shell; + + /** + * The hostname to use for the container, as a valid RFC 1123 hostname. + */ + public function getHostname(): ?string + { + return $this->hostname; + } + + /** + * The hostname to use for the container, as a valid RFC 1123 hostname. + */ + public function setHostname(?string $hostname): self + { + $this->initialized['hostname'] = true; + $this->hostname = $hostname; + + return $this; + } + + /** + * The domain name to use for the container. + */ + public function getDomainname(): ?string + { + return $this->domainname; + } + + /** + * The domain name to use for the container. + */ + public function setDomainname(?string $domainname): self + { + $this->initialized['domainname'] = true; + $this->domainname = $domainname; + + return $this; + } + + /** + * The user that commands are run as inside the container. + */ + public function getUser(): ?string + { + return $this->user; + } + + /** + * The user that commands are run as inside the container. + */ + public function setUser(?string $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + /** + * Whether to attach to `stdin`. + */ + public function getAttachStdin(): ?bool + { + return $this->attachStdin; + } + + /** + * Whether to attach to `stdin`. + */ + public function setAttachStdin(?bool $attachStdin): self + { + $this->initialized['attachStdin'] = true; + $this->attachStdin = $attachStdin; + + return $this; + } + + /** + * Whether to attach to `stdout`. + */ + public function getAttachStdout(): ?bool + { + return $this->attachStdout; + } + + /** + * Whether to attach to `stdout`. + */ + public function setAttachStdout(?bool $attachStdout): self + { + $this->initialized['attachStdout'] = true; + $this->attachStdout = $attachStdout; + + return $this; + } + + /** + * Whether to attach to `stderr`. + */ + public function getAttachStderr(): ?bool + { + return $this->attachStderr; + } + + /** + * Whether to attach to `stderr`. + */ + public function setAttachStderr(?bool $attachStderr): self + { + $this->initialized['attachStderr'] = true; + $this->attachStderr = $attachStderr; + + return $this; + } + + /** + * An object mapping ports to an empty object in the form: + * + * `{"/": {}}` + * + * @return array|null + */ + public function getExposedPorts(): ?iterable + { + return $this->exposedPorts; + } + + /** + * An object mapping ports to an empty object in the form: + * + * `{"/": {}}` + * + * @param array|null $exposedPorts + */ + public function setExposedPorts(?iterable $exposedPorts): self + { + $this->initialized['exposedPorts'] = true; + $this->exposedPorts = $exposedPorts; + + return $this; + } + + /** + * Attach standard streams to a TTY, including `stdin` if it is not closed. + */ + public function getTty(): ?bool + { + return $this->tty; + } + + /** + * Attach standard streams to a TTY, including `stdin` if it is not closed. + */ + public function setTty(?bool $tty): self + { + $this->initialized['tty'] = true; + $this->tty = $tty; + + return $this; + } + + /** + * Open `stdin`. + */ + public function getOpenStdin(): ?bool + { + return $this->openStdin; + } + + /** + * Open `stdin`. + */ + public function setOpenStdin(?bool $openStdin): self + { + $this->initialized['openStdin'] = true; + $this->openStdin = $openStdin; + + return $this; + } + + /** + * Close `stdin` after one attached client disconnects. + */ + public function getStdinOnce(): ?bool + { + return $this->stdinOnce; + } + + /** + * Close `stdin` after one attached client disconnects. + */ + public function setStdinOnce(?bool $stdinOnce): self + { + $this->initialized['stdinOnce'] = true; + $this->stdinOnce = $stdinOnce; + + return $this; + } + + /** + * A list of environment variables to set inside the container in the + * form `["VAR=value", ...]`. A variable without `=` is removed from the + * environment, rather than to have an empty value. + * + * @return list|null + */ + public function getEnv(): ?array + { + return $this->env; + } + + /** + * A list of environment variables to set inside the container in the + * form `["VAR=value", ...]`. A variable without `=` is removed from the + * environment, rather than to have an empty value. + * + * @param list|null $env + */ + public function setEnv(?array $env): self + { + $this->initialized['env'] = true; + $this->env = $env; + + return $this; + } + + /** + * Command to run specified as a string or an array of strings. + * + * @return list|null + */ + public function getCmd(): ?array + { + return $this->cmd; + } + + /** + * Command to run specified as a string or an array of strings. + * + * @param list|null $cmd + */ + public function setCmd(?array $cmd): self + { + $this->initialized['cmd'] = true; + $this->cmd = $cmd; + + return $this; + } + + /** + * A test to perform to check that the container is healthy. + */ + public function getHealthcheck(): ?HealthConfig + { + return $this->healthcheck; + } + + /** + * A test to perform to check that the container is healthy. + */ + public function setHealthcheck(?HealthConfig $healthcheck): self + { + $this->initialized['healthcheck'] = true; + $this->healthcheck = $healthcheck; + + return $this; + } + + /** + * Command is already escaped (Windows only). + */ + public function getArgsEscaped(): ?bool + { + return $this->argsEscaped; + } + + /** + * Command is already escaped (Windows only). + */ + public function setArgsEscaped(?bool $argsEscaped): self + { + $this->initialized['argsEscaped'] = true; + $this->argsEscaped = $argsEscaped; + + return $this; + } + + /** + * The name (or reference) of the image to use when creating the container, + * or which was used when the container was created. + */ + public function getImage(): ?string + { + return $this->image; + } + + /** + * The name (or reference) of the image to use when creating the container, + * or which was used when the container was created. + */ + public function setImage(?string $image): self + { + $this->initialized['image'] = true; + $this->image = $image; + + return $this; + } + + /** + * An object mapping mount point paths inside the container to empty + * objects. + * + * @return array|null + */ + public function getVolumes(): ?iterable + { + return $this->volumes; + } + + /** + * An object mapping mount point paths inside the container to empty + * objects. + * + * @param array|null $volumes + */ + public function setVolumes(?iterable $volumes): self + { + $this->initialized['volumes'] = true; + $this->volumes = $volumes; + + return $this; + } + + /** + * The working directory for commands to run in. + */ + public function getWorkingDir(): ?string + { + return $this->workingDir; + } + + /** + * The working directory for commands to run in. + */ + public function setWorkingDir(?string $workingDir): self + { + $this->initialized['workingDir'] = true; + $this->workingDir = $workingDir; + + return $this; + } + + /** + * The entry point for the container as a string or an array of strings. + * + * If the array consists of exactly one empty string (`[""]`) then the + * entry point is reset to system default (i.e., the entry point used by + * docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + * + * @return list|null + */ + public function getEntrypoint(): ?array + { + return $this->entrypoint; + } + + /** + * The entry point for the container as a string or an array of strings. + * + * If the array consists of exactly one empty string (`[""]`) then the + * entry point is reset to system default (i.e., the entry point used by + * docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + * + * @param list|null $entrypoint + */ + public function setEntrypoint(?array $entrypoint): self + { + $this->initialized['entrypoint'] = true; + $this->entrypoint = $entrypoint; + + return $this; + } + + /** + * Disable networking for the container. + */ + public function getNetworkDisabled(): ?bool + { + return $this->networkDisabled; + } + + /** + * Disable networking for the container. + */ + public function setNetworkDisabled(?bool $networkDisabled): self + { + $this->initialized['networkDisabled'] = true; + $this->networkDisabled = $networkDisabled; + + return $this; + } + + /** + * MAC address of the container. + * + * Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. + */ + public function getMacAddress(): ?string + { + return $this->macAddress; + } + + /** + * MAC address of the container. + * + * Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. + */ + public function setMacAddress(?string $macAddress): self + { + $this->initialized['macAddress'] = true; + $this->macAddress = $macAddress; + + return $this; + } + + /** + * `ONBUILD` metadata that were defined in the image's `Dockerfile`. + * + * @return list|null + */ + public function getOnBuild(): ?array + { + return $this->onBuild; + } + + /** + * `ONBUILD` metadata that were defined in the image's `Dockerfile`. + * + * @param list|null $onBuild + */ + public function setOnBuild(?array $onBuild): self + { + $this->initialized['onBuild'] = true; + $this->onBuild = $onBuild; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Signal to stop a container as a string or unsigned integer. + */ + public function getStopSignal(): ?string + { + return $this->stopSignal; + } + + /** + * Signal to stop a container as a string or unsigned integer. + */ + public function setStopSignal(?string $stopSignal): self + { + $this->initialized['stopSignal'] = true; + $this->stopSignal = $stopSignal; + + return $this; + } + + /** + * Timeout to stop a container in seconds. + */ + public function getStopTimeout(): ?int + { + return $this->stopTimeout; + } + + /** + * Timeout to stop a container in seconds. + */ + public function setStopTimeout(?int $stopTimeout): self + { + $this->initialized['stopTimeout'] = true; + $this->stopTimeout = $stopTimeout; + + return $this; + } + + /** + * Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + * + * @return list|null + */ + public function getShell(): ?array + { + return $this->shell; + } + + /** + * Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + * + * @param list|null $shell + */ + public function setShell(?array $shell): self + { + $this->initialized['shell'] = true; + $this->shell = $shell; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfigExposedPortsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfigExposedPortsItem.php new file mode 100644 index 000000000..3db6a8306 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfigExposedPortsItem.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfigVolumesItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfigVolumesItem.php new file mode 100644 index 000000000..c29847157 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerConfigVolumesItem.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerCreateResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerCreateResponse.php new file mode 100644 index 000000000..1bfbafc30 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerCreateResponse.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * The ID of the created container. + * + * @var string|null + */ + protected $id; + /** + * Warnings encountered when creating the container. + * + * @var list|null + */ + protected $warnings; + + /** + * The ID of the created container. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * The ID of the created container. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + /** + * Warnings encountered when creating the container. + * + * @return list|null + */ + public function getWarnings(): ?array + { + return $this->warnings; + } + + /** + * Warnings encountered when creating the container. + * + * @param list|null $warnings + */ + public function setWarnings(?array $warnings): self + { + $this->initialized['warnings'] = true; + $this->warnings = $warnings; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerState.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerState.php new file mode 100644 index 000000000..94819a620 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerState.php @@ -0,0 +1,335 @@ +initialized); + } + /** + * String representation of the container state. Can be one of "created", + * "running", "paused", "restarting", "removing", "exited", or "dead". + * + * @var string|null + */ + protected $status; + /** + * Whether this container is running. + * + * Note that a running container can be _paused_. The `Running` and `Paused` + * booleans are not mutually exclusive: + * + * When pausing a container (on Linux), the freezer cgroup is used to suspend + * all processes in the container. Freezing the process requires the process to + * be running. As a result, paused containers are both `Running` _and_ `Paused`. + * + * Use the `Status` field instead to determine if a container's state is "running". + * + * @var bool|null + */ + protected $running; + /** + * Whether this container is paused. + * + * @var bool|null + */ + protected $paused; + /** + * Whether this container is restarting. + * + * @var bool|null + */ + protected $restarting; + /** + * Whether a process within this container has been killed because it ran + * out of memory since the container was last started. + * + * @var bool|null + */ + protected $oOMKilled; + /** + * @var bool|null + */ + protected $dead; + /** + * The process ID of this container. + * + * @var int|null + */ + protected $pid; + /** + * The last exit code of this container. + * + * @var int|null + */ + protected $exitCode; + /** + * @var string|null + */ + protected $error; + /** + * The time when this container was last started. + * + * @var string|null + */ + protected $startedAt; + /** + * The time when this container last exited. + * + * @var string|null + */ + protected $finishedAt; + /** + * Health stores information about the container's healthcheck results. + * + * @var Health|null + */ + protected $health; + + /** + * String representation of the container state. Can be one of "created", + * "running", "paused", "restarting", "removing", "exited", or "dead". + */ + public function getStatus(): ?string + { + return $this->status; + } + + /** + * String representation of the container state. Can be one of "created", + * "running", "paused", "restarting", "removing", "exited", or "dead". + */ + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + /** + * Whether this container is running. + * + * Note that a running container can be _paused_. The `Running` and `Paused` + * booleans are not mutually exclusive: + * + * When pausing a container (on Linux), the freezer cgroup is used to suspend + * all processes in the container. Freezing the process requires the process to + * be running. As a result, paused containers are both `Running` _and_ `Paused`. + * + * Use the `Status` field instead to determine if a container's state is "running". + */ + public function getRunning(): ?bool + { + return $this->running; + } + + /** + * Whether this container is running. + * + * Note that a running container can be _paused_. The `Running` and `Paused` + * booleans are not mutually exclusive: + * + * When pausing a container (on Linux), the freezer cgroup is used to suspend + * all processes in the container. Freezing the process requires the process to + * be running. As a result, paused containers are both `Running` _and_ `Paused`. + * + * Use the `Status` field instead to determine if a container's state is "running". + */ + public function setRunning(?bool $running): self + { + $this->initialized['running'] = true; + $this->running = $running; + + return $this; + } + + /** + * Whether this container is paused. + */ + public function getPaused(): ?bool + { + return $this->paused; + } + + /** + * Whether this container is paused. + */ + public function setPaused(?bool $paused): self + { + $this->initialized['paused'] = true; + $this->paused = $paused; + + return $this; + } + + /** + * Whether this container is restarting. + */ + public function getRestarting(): ?bool + { + return $this->restarting; + } + + /** + * Whether this container is restarting. + */ + public function setRestarting(?bool $restarting): self + { + $this->initialized['restarting'] = true; + $this->restarting = $restarting; + + return $this; + } + + /** + * Whether a process within this container has been killed because it ran + * out of memory since the container was last started. + */ + public function getOOMKilled(): ?bool + { + return $this->oOMKilled; + } + + /** + * Whether a process within this container has been killed because it ran + * out of memory since the container was last started. + */ + public function setOOMKilled(?bool $oOMKilled): self + { + $this->initialized['oOMKilled'] = true; + $this->oOMKilled = $oOMKilled; + + return $this; + } + + public function getDead(): ?bool + { + return $this->dead; + } + + public function setDead(?bool $dead): self + { + $this->initialized['dead'] = true; + $this->dead = $dead; + + return $this; + } + + /** + * The process ID of this container. + */ + public function getPid(): ?int + { + return $this->pid; + } + + /** + * The process ID of this container. + */ + public function setPid(?int $pid): self + { + $this->initialized['pid'] = true; + $this->pid = $pid; + + return $this; + } + + /** + * The last exit code of this container. + */ + public function getExitCode(): ?int + { + return $this->exitCode; + } + + /** + * The last exit code of this container. + */ + public function setExitCode(?int $exitCode): self + { + $this->initialized['exitCode'] = true; + $this->exitCode = $exitCode; + + return $this; + } + + public function getError(): ?string + { + return $this->error; + } + + public function setError(?string $error): self + { + $this->initialized['error'] = true; + $this->error = $error; + + return $this; + } + + /** + * The time when this container was last started. + */ + public function getStartedAt(): ?string + { + return $this->startedAt; + } + + /** + * The time when this container was last started. + */ + public function setStartedAt(?string $startedAt): self + { + $this->initialized['startedAt'] = true; + $this->startedAt = $startedAt; + + return $this; + } + + /** + * The time when this container last exited. + */ + public function getFinishedAt(): ?string + { + return $this->finishedAt; + } + + /** + * The time when this container last exited. + */ + public function setFinishedAt(?string $finishedAt): self + { + $this->initialized['finishedAt'] = true; + $this->finishedAt = $finishedAt; + + return $this; + } + + /** + * Health stores information about the container's healthcheck results. + */ + public function getHealth(): ?Health + { + return $this->health; + } + + /** + * Health stores information about the container's healthcheck results. + */ + public function setHealth(?Health $health): self + { + $this->initialized['health'] = true; + $this->health = $health; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerStatus.php new file mode 100644 index 000000000..86284fe02 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerStatus.php @@ -0,0 +1,69 @@ +initialized); + } + /** + * @var string|null + */ + protected $containerID; + /** + * @var int|null + */ + protected $pID; + /** + * @var int|null + */ + protected $exitCode; + + public function getContainerID(): ?string + { + return $this->containerID; + } + + public function setContainerID(?string $containerID): self + { + $this->initialized['containerID'] = true; + $this->containerID = $containerID; + + return $this; + } + + public function getPID(): ?int + { + return $this->pID; + } + + public function setPID(?int $pID): self + { + $this->initialized['pID'] = true; + $this->pID = $pID; + + return $this; + } + + public function getExitCode(): ?int + { + return $this->exitCode; + } + + public function setExitCode(?int $exitCode): self + { + $this->initialized['exitCode'] = true; + $this->exitCode = $exitCode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummary.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummary.php new file mode 100644 index 000000000..7d225e471 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummary.php @@ -0,0 +1,395 @@ +initialized); + } + /** + * The ID of this container. + * + * @var string|null + */ + protected $id; + /** + * The names that this container has been given. + * + * @var list|null + */ + protected $names; + /** + * The name of the image used when creating this container. + * + * @var string|null + */ + protected $image; + /** + * The ID of the image that this container was created from. + * + * @var string|null + */ + protected $imageID; + /** + * Command to run when starting the container. + * + * @var string|null + */ + protected $command; + /** + * When the container was created. + * + * @var int|null + */ + protected $created; + /** + * The ports exposed by this container. + * + * @var list|null + */ + protected $ports; + /** + * The size of files that have been created or changed by this container. + * + * @var int|null + */ + protected $sizeRw; + /** + * The total size of all the files in this container. + * + * @var int|null + */ + protected $sizeRootFs; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * The state of this container (e.g. `Exited`). + * + * @var string|null + */ + protected $state; + /** + * Additional human-readable status of this container (e.g. `Exit 0`). + * + * @var string|null + */ + protected $status; + /** + * @var ContainerSummaryHostConfig|null + */ + protected $hostConfig; + /** + * A summary of the container's network settings. + * + * @var ContainerSummaryNetworkSettings|null + */ + protected $networkSettings; + /** + * @var list|null + */ + protected $mounts; + + /** + * The ID of this container. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * The ID of this container. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + /** + * The names that this container has been given. + * + * @return list|null + */ + public function getNames(): ?array + { + return $this->names; + } + + /** + * The names that this container has been given. + * + * @param list|null $names + */ + public function setNames(?array $names): self + { + $this->initialized['names'] = true; + $this->names = $names; + + return $this; + } + + /** + * The name of the image used when creating this container. + */ + public function getImage(): ?string + { + return $this->image; + } + + /** + * The name of the image used when creating this container. + */ + public function setImage(?string $image): self + { + $this->initialized['image'] = true; + $this->image = $image; + + return $this; + } + + /** + * The ID of the image that this container was created from. + */ + public function getImageID(): ?string + { + return $this->imageID; + } + + /** + * The ID of the image that this container was created from. + */ + public function setImageID(?string $imageID): self + { + $this->initialized['imageID'] = true; + $this->imageID = $imageID; + + return $this; + } + + /** + * Command to run when starting the container. + */ + public function getCommand(): ?string + { + return $this->command; + } + + /** + * Command to run when starting the container. + */ + public function setCommand(?string $command): self + { + $this->initialized['command'] = true; + $this->command = $command; + + return $this; + } + + /** + * When the container was created. + */ + public function getCreated(): ?int + { + return $this->created; + } + + /** + * When the container was created. + */ + public function setCreated(?int $created): self + { + $this->initialized['created'] = true; + $this->created = $created; + + return $this; + } + + /** + * The ports exposed by this container. + * + * @return list|null + */ + public function getPorts(): ?array + { + return $this->ports; + } + + /** + * The ports exposed by this container. + * + * @param list|null $ports + */ + public function setPorts(?array $ports): self + { + $this->initialized['ports'] = true; + $this->ports = $ports; + + return $this; + } + + /** + * The size of files that have been created or changed by this container. + */ + public function getSizeRw(): ?int + { + return $this->sizeRw; + } + + /** + * The size of files that have been created or changed by this container. + */ + public function setSizeRw(?int $sizeRw): self + { + $this->initialized['sizeRw'] = true; + $this->sizeRw = $sizeRw; + + return $this; + } + + /** + * The total size of all the files in this container. + */ + public function getSizeRootFs(): ?int + { + return $this->sizeRootFs; + } + + /** + * The total size of all the files in this container. + */ + public function setSizeRootFs(?int $sizeRootFs): self + { + $this->initialized['sizeRootFs'] = true; + $this->sizeRootFs = $sizeRootFs; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * The state of this container (e.g. `Exited`). + */ + public function getState(): ?string + { + return $this->state; + } + + /** + * The state of this container (e.g. `Exited`). + */ + public function setState(?string $state): self + { + $this->initialized['state'] = true; + $this->state = $state; + + return $this; + } + + /** + * Additional human-readable status of this container (e.g. `Exit 0`). + */ + public function getStatus(): ?string + { + return $this->status; + } + + /** + * Additional human-readable status of this container (e.g. `Exit 0`). + */ + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + public function getHostConfig(): ?ContainerSummaryHostConfig + { + return $this->hostConfig; + } + + public function setHostConfig(?ContainerSummaryHostConfig $hostConfig): self + { + $this->initialized['hostConfig'] = true; + $this->hostConfig = $hostConfig; + + return $this; + } + + /** + * A summary of the container's network settings. + */ + public function getNetworkSettings(): ?ContainerSummaryNetworkSettings + { + return $this->networkSettings; + } + + /** + * A summary of the container's network settings. + */ + public function setNetworkSettings(?ContainerSummaryNetworkSettings $networkSettings): self + { + $this->initialized['networkSettings'] = true; + $this->networkSettings = $networkSettings; + + return $this; + } + + /** + * @return list|null + */ + public function getMounts(): ?array + { + return $this->mounts; + } + + /** + * @param list|null $mounts + */ + public function setMounts(?array $mounts): self + { + $this->initialized['mounts'] = true; + $this->mounts = $mounts; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummaryHostConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummaryHostConfig.php new file mode 100644 index 000000000..6c845f933 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummaryHostConfig.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var string|null + */ + protected $networkMode; + + public function getNetworkMode(): ?string + { + return $this->networkMode; + } + + public function setNetworkMode(?string $networkMode): self + { + $this->initialized['networkMode'] = true; + $this->networkMode = $networkMode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummaryNetworkSettings.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummaryNetworkSettings.php new file mode 100644 index 000000000..237de0f69 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerSummaryNetworkSettings.php @@ -0,0 +1,41 @@ +initialized); + } + /** + * @var array|null + */ + protected $networks; + + /** + * @return array|null + */ + public function getNetworks(): ?iterable + { + return $this->networks; + } + + /** + * @param array|null $networks + */ + public function setNetworks(?iterable $networks): self + { + $this->initialized['networks'] = true; + $this->networks = $networks; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerWaitExitError.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerWaitExitError.php new file mode 100644 index 000000000..bce2ac564 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerWaitExitError.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * Details of an error. + * + * @var string|null + */ + protected $message; + + /** + * Details of an error. + */ + public function getMessage(): ?string + { + return $this->message; + } + + /** + * Details of an error. + */ + public function setMessage(?string $message): self + { + $this->initialized['message'] = true; + $this->message = $message; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainerWaitResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerWaitResponse.php new file mode 100644 index 000000000..ff2125f2e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainerWaitResponse.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * Exit code of the container. + * + * @var int|null + */ + protected $statusCode; + /** + * container waiting error, if any. + * + * @var ContainerWaitExitError|null + */ + protected $error; + + /** + * Exit code of the container. + */ + public function getStatusCode(): ?int + { + return $this->statusCode; + } + + /** + * Exit code of the container. + */ + public function setStatusCode(?int $statusCode): self + { + $this->initialized['statusCode'] = true; + $this->statusCode = $statusCode; + + return $this; + } + + /** + * container waiting error, if any. + */ + public function getError(): ?ContainerWaitExitError + { + return $this->error; + } + + /** + * container waiting error, if any. + */ + public function setError(?ContainerWaitExitError $error): self + { + $this->initialized['error'] = true; + $this->error = $error; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersCreatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersCreatePostBody.php new file mode 100644 index 000000000..2772f972b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersCreatePostBody.php @@ -0,0 +1,770 @@ +initialized); + } + /** + * The hostname to use for the container, as a valid RFC 1123 hostname. + * + * @var string|null + */ + protected $hostname; + /** + * The domain name to use for the container. + * + * @var string|null + */ + protected $domainname; + /** + * The user that commands are run as inside the container. + * + * @var string|null + */ + protected $user; + /** + * Whether to attach to `stdin`. + * + * @var bool|null + */ + protected $attachStdin = false; + /** + * Whether to attach to `stdout`. + * + * @var bool|null + */ + protected $attachStdout = true; + /** + * Whether to attach to `stderr`. + * + * @var bool|null + */ + protected $attachStderr = true; + /** + * An object mapping ports to an empty object in the form: + * + * `{"/": {}}` + * + * @var array|null + */ + protected $exposedPorts; + /** + * Attach standard streams to a TTY, including `stdin` if it is not closed. + * + * @var bool|null + */ + protected $tty = false; + /** + * Open `stdin`. + * + * @var bool|null + */ + protected $openStdin = false; + /** + * Close `stdin` after one attached client disconnects. + * + * @var bool|null + */ + protected $stdinOnce = false; + /** + * A list of environment variables to set inside the container in the + * form `["VAR=value", ...]`. A variable without `=` is removed from the + * environment, rather than to have an empty value. + * + * @var list|null + */ + protected $env; + /** + * Command to run specified as a string or an array of strings. + * + * @var list|null + */ + protected $cmd; + /** + * A test to perform to check that the container is healthy. + * + * @var HealthConfig|null + */ + protected $healthcheck; + /** + * Command is already escaped (Windows only). + * + * @var bool|null + */ + protected $argsEscaped = false; + /** + * The name (or reference) of the image to use when creating the container, + * or which was used when the container was created. + * + * @var string|null + */ + protected $image; + /** + * An object mapping mount point paths inside the container to empty + * objects. + * + * @var array|null + */ + protected $volumes; + /** + * The working directory for commands to run in. + * + * @var string|null + */ + protected $workingDir; + /** + * The entry point for the container as a string or an array of strings. + * + * If the array consists of exactly one empty string (`[""]`) then the + * entry point is reset to system default (i.e., the entry point used by + * docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + * + * @var list|null + */ + protected $entrypoint; + /** + * Disable networking for the container. + * + * @var bool|null + */ + protected $networkDisabled; + /** + * MAC address of the container. + * + * Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. + * + * @var string|null + */ + protected $macAddress; + /** + * `ONBUILD` metadata that were defined in the image's `Dockerfile`. + * + * @var list|null + */ + protected $onBuild; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Signal to stop a container as a string or unsigned integer. + * + * @var string|null + */ + protected $stopSignal; + /** + * Timeout to stop a container in seconds. + * + * @var int|null + */ + protected $stopTimeout; + /** + * Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + * + * @var list|null + */ + protected $shell; + /** + * Container configuration that depends on the host we are running on. + * + * @var HostConfig|null + */ + protected $hostConfig; + /** + * NetworkingConfig represents the container's networking configuration for + * each of its interfaces. + * It is used for the networking configs specified in the `docker create` + * and `docker network connect` commands. + * + * @var NetworkingConfig|null + */ + protected $networkingConfig; + + /** + * The hostname to use for the container, as a valid RFC 1123 hostname. + */ + public function getHostname(): ?string + { + return $this->hostname; + } + + /** + * The hostname to use for the container, as a valid RFC 1123 hostname. + */ + public function setHostname(?string $hostname): self + { + $this->initialized['hostname'] = true; + $this->hostname = $hostname; + + return $this; + } + + /** + * The domain name to use for the container. + */ + public function getDomainname(): ?string + { + return $this->domainname; + } + + /** + * The domain name to use for the container. + */ + public function setDomainname(?string $domainname): self + { + $this->initialized['domainname'] = true; + $this->domainname = $domainname; + + return $this; + } + + /** + * The user that commands are run as inside the container. + */ + public function getUser(): ?string + { + return $this->user; + } + + /** + * The user that commands are run as inside the container. + */ + public function setUser(?string $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + /** + * Whether to attach to `stdin`. + */ + public function getAttachStdin(): ?bool + { + return $this->attachStdin; + } + + /** + * Whether to attach to `stdin`. + */ + public function setAttachStdin(?bool $attachStdin): self + { + $this->initialized['attachStdin'] = true; + $this->attachStdin = $attachStdin; + + return $this; + } + + /** + * Whether to attach to `stdout`. + */ + public function getAttachStdout(): ?bool + { + return $this->attachStdout; + } + + /** + * Whether to attach to `stdout`. + */ + public function setAttachStdout(?bool $attachStdout): self + { + $this->initialized['attachStdout'] = true; + $this->attachStdout = $attachStdout; + + return $this; + } + + /** + * Whether to attach to `stderr`. + */ + public function getAttachStderr(): ?bool + { + return $this->attachStderr; + } + + /** + * Whether to attach to `stderr`. + */ + public function setAttachStderr(?bool $attachStderr): self + { + $this->initialized['attachStderr'] = true; + $this->attachStderr = $attachStderr; + + return $this; + } + + /** + * An object mapping ports to an empty object in the form: + * + * `{"/": {}}` + * + * @return array|null + */ + public function getExposedPorts(): ?iterable + { + return $this->exposedPorts; + } + + /** + * An object mapping ports to an empty object in the form: + * + * `{"/": {}}` + * + * @param array|null $exposedPorts + */ + public function setExposedPorts(?iterable $exposedPorts): self + { + $this->initialized['exposedPorts'] = true; + $this->exposedPorts = $exposedPorts; + + return $this; + } + + /** + * Attach standard streams to a TTY, including `stdin` if it is not closed. + */ + public function getTty(): ?bool + { + return $this->tty; + } + + /** + * Attach standard streams to a TTY, including `stdin` if it is not closed. + */ + public function setTty(?bool $tty): self + { + $this->initialized['tty'] = true; + $this->tty = $tty; + + return $this; + } + + /** + * Open `stdin`. + */ + public function getOpenStdin(): ?bool + { + return $this->openStdin; + } + + /** + * Open `stdin`. + */ + public function setOpenStdin(?bool $openStdin): self + { + $this->initialized['openStdin'] = true; + $this->openStdin = $openStdin; + + return $this; + } + + /** + * Close `stdin` after one attached client disconnects. + */ + public function getStdinOnce(): ?bool + { + return $this->stdinOnce; + } + + /** + * Close `stdin` after one attached client disconnects. + */ + public function setStdinOnce(?bool $stdinOnce): self + { + $this->initialized['stdinOnce'] = true; + $this->stdinOnce = $stdinOnce; + + return $this; + } + + /** + * A list of environment variables to set inside the container in the + * form `["VAR=value", ...]`. A variable without `=` is removed from the + * environment, rather than to have an empty value. + * + * @return list|null + */ + public function getEnv(): ?array + { + return $this->env; + } + + /** + * A list of environment variables to set inside the container in the + * form `["VAR=value", ...]`. A variable without `=` is removed from the + * environment, rather than to have an empty value. + * + * @param list|null $env + */ + public function setEnv(?array $env): self + { + $this->initialized['env'] = true; + $this->env = $env; + + return $this; + } + + /** + * Command to run specified as a string or an array of strings. + * + * @return list|null + */ + public function getCmd(): ?array + { + return $this->cmd; + } + + /** + * Command to run specified as a string or an array of strings. + * + * @param list|null $cmd + */ + public function setCmd(?array $cmd): self + { + $this->initialized['cmd'] = true; + $this->cmd = $cmd; + + return $this; + } + + /** + * A test to perform to check that the container is healthy. + */ + public function getHealthcheck(): ?HealthConfig + { + return $this->healthcheck; + } + + /** + * A test to perform to check that the container is healthy. + */ + public function setHealthcheck(?HealthConfig $healthcheck): self + { + $this->initialized['healthcheck'] = true; + $this->healthcheck = $healthcheck; + + return $this; + } + + /** + * Command is already escaped (Windows only). + */ + public function getArgsEscaped(): ?bool + { + return $this->argsEscaped; + } + + /** + * Command is already escaped (Windows only). + */ + public function setArgsEscaped(?bool $argsEscaped): self + { + $this->initialized['argsEscaped'] = true; + $this->argsEscaped = $argsEscaped; + + return $this; + } + + /** + * The name (or reference) of the image to use when creating the container, + * or which was used when the container was created. + */ + public function getImage(): ?string + { + return $this->image; + } + + /** + * The name (or reference) of the image to use when creating the container, + * or which was used when the container was created. + */ + public function setImage(?string $image): self + { + $this->initialized['image'] = true; + $this->image = $image; + + return $this; + } + + /** + * An object mapping mount point paths inside the container to empty + * objects. + * + * @return array|null + */ + public function getVolumes(): ?iterable + { + return $this->volumes; + } + + /** + * An object mapping mount point paths inside the container to empty + * objects. + * + * @param array|null $volumes + */ + public function setVolumes(?iterable $volumes): self + { + $this->initialized['volumes'] = true; + $this->volumes = $volumes; + + return $this; + } + + /** + * The working directory for commands to run in. + */ + public function getWorkingDir(): ?string + { + return $this->workingDir; + } + + /** + * The working directory for commands to run in. + */ + public function setWorkingDir(?string $workingDir): self + { + $this->initialized['workingDir'] = true; + $this->workingDir = $workingDir; + + return $this; + } + + /** + * The entry point for the container as a string or an array of strings. + * + * If the array consists of exactly one empty string (`[""]`) then the + * entry point is reset to system default (i.e., the entry point used by + * docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + * + * @return list|null + */ + public function getEntrypoint(): ?array + { + return $this->entrypoint; + } + + /** + * The entry point for the container as a string or an array of strings. + * + * If the array consists of exactly one empty string (`[""]`) then the + * entry point is reset to system default (i.e., the entry point used by + * docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + * + * @param list|null $entrypoint + */ + public function setEntrypoint(?array $entrypoint): self + { + $this->initialized['entrypoint'] = true; + $this->entrypoint = $entrypoint; + + return $this; + } + + /** + * Disable networking for the container. + */ + public function getNetworkDisabled(): ?bool + { + return $this->networkDisabled; + } + + /** + * Disable networking for the container. + */ + public function setNetworkDisabled(?bool $networkDisabled): self + { + $this->initialized['networkDisabled'] = true; + $this->networkDisabled = $networkDisabled; + + return $this; + } + + /** + * MAC address of the container. + * + * Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. + */ + public function getMacAddress(): ?string + { + return $this->macAddress; + } + + /** + * MAC address of the container. + * + * Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. + */ + public function setMacAddress(?string $macAddress): self + { + $this->initialized['macAddress'] = true; + $this->macAddress = $macAddress; + + return $this; + } + + /** + * `ONBUILD` metadata that were defined in the image's `Dockerfile`. + * + * @return list|null + */ + public function getOnBuild(): ?array + { + return $this->onBuild; + } + + /** + * `ONBUILD` metadata that were defined in the image's `Dockerfile`. + * + * @param list|null $onBuild + */ + public function setOnBuild(?array $onBuild): self + { + $this->initialized['onBuild'] = true; + $this->onBuild = $onBuild; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Signal to stop a container as a string or unsigned integer. + */ + public function getStopSignal(): ?string + { + return $this->stopSignal; + } + + /** + * Signal to stop a container as a string or unsigned integer. + */ + public function setStopSignal(?string $stopSignal): self + { + $this->initialized['stopSignal'] = true; + $this->stopSignal = $stopSignal; + + return $this; + } + + /** + * Timeout to stop a container in seconds. + */ + public function getStopTimeout(): ?int + { + return $this->stopTimeout; + } + + /** + * Timeout to stop a container in seconds. + */ + public function setStopTimeout(?int $stopTimeout): self + { + $this->initialized['stopTimeout'] = true; + $this->stopTimeout = $stopTimeout; + + return $this; + } + + /** + * Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + * + * @return list|null + */ + public function getShell(): ?array + { + return $this->shell; + } + + /** + * Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + * + * @param list|null $shell + */ + public function setShell(?array $shell): self + { + $this->initialized['shell'] = true; + $this->shell = $shell; + + return $this; + } + + /** + * Container configuration that depends on the host we are running on. + */ + public function getHostConfig(): ?HostConfig + { + return $this->hostConfig; + } + + /** + * Container configuration that depends on the host we are running on. + */ + public function setHostConfig(?HostConfig $hostConfig): self + { + $this->initialized['hostConfig'] = true; + $this->hostConfig = $hostConfig; + + return $this; + } + + /** + * NetworkingConfig represents the container's networking configuration for + * each of its interfaces. + * It is used for the networking configs specified in the `docker create` + * and `docker network connect` commands. + */ + public function getNetworkingConfig(): ?NetworkingConfig + { + return $this->networkingConfig; + } + + /** + * NetworkingConfig represents the container's networking configuration for + * each of its interfaces. + * It is used for the networking configs specified in the `docker create` + * and `docker network connect` commands. + */ + public function setNetworkingConfig(?NetworkingConfig $networkingConfig): self + { + $this->initialized['networkingConfig'] = true; + $this->networkingConfig = $networkingConfig; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdExecPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdExecPostBody.php new file mode 100644 index 000000000..ae0c8b2cf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdExecPostBody.php @@ -0,0 +1,317 @@ +initialized); + } + /** + * Attach to `stdin` of the exec command. + * + * @var bool|null + */ + protected $attachStdin; + /** + * Attach to `stdout` of the exec command. + * + * @var bool|null + */ + protected $attachStdout; + /** + * Attach to `stderr` of the exec command. + * + * @var bool|null + */ + protected $attachStderr; + /** + * Initial console size, as an `[height, width]` array. + * + * @var list|null + */ + protected $consoleSize; + /** + * Override the key sequence for detaching a container. Format is + * a single character `[a-Z]` or `ctrl-` where `` + * is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + * + * @var string|null + */ + protected $detachKeys; + /** + * Allocate a pseudo-TTY. + * + * @var bool|null + */ + protected $tty; + /** + * A list of environment variables in the form `["VAR=value", ...]`. + * + * @var list|null + */ + protected $env; + /** + * Command to run, as a string or array of strings. + * + * @var list|null + */ + protected $cmd; + /** + * Runs the exec process with extended privileges. + * + * @var bool|null + */ + protected $privileged = false; + /** + * The user, and optionally, group to run the exec process inside + * the container. Format is one of: `user`, `user:group`, `uid`, + * or `uid:gid`. + * + * @var string|null + */ + protected $user; + /** + * The working directory for the exec process inside the container. + * + * @var string|null + */ + protected $workingDir; + + /** + * Attach to `stdin` of the exec command. + */ + public function getAttachStdin(): ?bool + { + return $this->attachStdin; + } + + /** + * Attach to `stdin` of the exec command. + */ + public function setAttachStdin(?bool $attachStdin): self + { + $this->initialized['attachStdin'] = true; + $this->attachStdin = $attachStdin; + + return $this; + } + + /** + * Attach to `stdout` of the exec command. + */ + public function getAttachStdout(): ?bool + { + return $this->attachStdout; + } + + /** + * Attach to `stdout` of the exec command. + */ + public function setAttachStdout(?bool $attachStdout): self + { + $this->initialized['attachStdout'] = true; + $this->attachStdout = $attachStdout; + + return $this; + } + + /** + * Attach to `stderr` of the exec command. + */ + public function getAttachStderr(): ?bool + { + return $this->attachStderr; + } + + /** + * Attach to `stderr` of the exec command. + */ + public function setAttachStderr(?bool $attachStderr): self + { + $this->initialized['attachStderr'] = true; + $this->attachStderr = $attachStderr; + + return $this; + } + + /** + * Initial console size, as an `[height, width]` array. + * + * @return list|null + */ + public function getConsoleSize(): ?array + { + return $this->consoleSize; + } + + /** + * Initial console size, as an `[height, width]` array. + * + * @param list|null $consoleSize + */ + public function setConsoleSize(?array $consoleSize): self + { + $this->initialized['consoleSize'] = true; + $this->consoleSize = $consoleSize; + + return $this; + } + + /** + * Override the key sequence for detaching a container. Format is + * a single character `[a-Z]` or `ctrl-` where `` + * is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + */ + public function getDetachKeys(): ?string + { + return $this->detachKeys; + } + + /** + * Override the key sequence for detaching a container. Format is + * a single character `[a-Z]` or `ctrl-` where `` + * is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + */ + public function setDetachKeys(?string $detachKeys): self + { + $this->initialized['detachKeys'] = true; + $this->detachKeys = $detachKeys; + + return $this; + } + + /** + * Allocate a pseudo-TTY. + */ + public function getTty(): ?bool + { + return $this->tty; + } + + /** + * Allocate a pseudo-TTY. + */ + public function setTty(?bool $tty): self + { + $this->initialized['tty'] = true; + $this->tty = $tty; + + return $this; + } + + /** + * A list of environment variables in the form `["VAR=value", ...]`. + * + * @return list|null + */ + public function getEnv(): ?array + { + return $this->env; + } + + /** + * A list of environment variables in the form `["VAR=value", ...]`. + * + * @param list|null $env + */ + public function setEnv(?array $env): self + { + $this->initialized['env'] = true; + $this->env = $env; + + return $this; + } + + /** + * Command to run, as a string or array of strings. + * + * @return list|null + */ + public function getCmd(): ?array + { + return $this->cmd; + } + + /** + * Command to run, as a string or array of strings. + * + * @param list|null $cmd + */ + public function setCmd(?array $cmd): self + { + $this->initialized['cmd'] = true; + $this->cmd = $cmd; + + return $this; + } + + /** + * Runs the exec process with extended privileges. + */ + public function getPrivileged(): ?bool + { + return $this->privileged; + } + + /** + * Runs the exec process with extended privileges. + */ + public function setPrivileged(?bool $privileged): self + { + $this->initialized['privileged'] = true; + $this->privileged = $privileged; + + return $this; + } + + /** + * The user, and optionally, group to run the exec process inside + * the container. Format is one of: `user`, `user:group`, `uid`, + * or `uid:gid`. + */ + public function getUser(): ?string + { + return $this->user; + } + + /** + * The user, and optionally, group to run the exec process inside + * the container. Format is one of: `user`, `user:group`, `uid`, + * or `uid:gid`. + */ + public function setUser(?string $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + /** + * The working directory for the exec process inside the container. + */ + public function getWorkingDir(): ?string + { + return $this->workingDir; + } + + /** + * The working directory for the exec process inside the container. + */ + public function setWorkingDir(?string $workingDir): self + { + $this->initialized['workingDir'] = true; + $this->workingDir = $workingDir; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdJsonGetResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdJsonGetResponse200.php new file mode 100644 index 000000000..cc7030cad --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdJsonGetResponse200.php @@ -0,0 +1,591 @@ +initialized); + } + /** + * The ID of the container. + * + * @var string|null + */ + protected $id; + /** + * The time the container was created. + * + * @var string|null + */ + protected $created; + /** + * The path to the command being run. + * + * @var string|null + */ + protected $path; + /** + * The arguments to the command being run. + * + * @var list|null + */ + protected $args; + /** + * ContainerState stores container's running state. It's part of ContainerJSONBase + * and will be returned by the "inspect" command. + * + * @var ContainerState|null + */ + protected $state; + /** + * The container's image ID. + * + * @var string|null + */ + protected $image; + /** + * @var string|null + */ + protected $resolvConfPath; + /** + * @var string|null + */ + protected $hostnamePath; + /** + * @var string|null + */ + protected $hostsPath; + /** + * @var string|null + */ + protected $logPath; + /** + * @var string|null + */ + protected $name; + /** + * @var int|null + */ + protected $restartCount; + /** + * @var string|null + */ + protected $driver; + /** + * @var string|null + */ + protected $platform; + /** + * @var string|null + */ + protected $mountLabel; + /** + * @var string|null + */ + protected $processLabel; + /** + * @var string|null + */ + protected $appArmorProfile; + /** + * IDs of exec instances that are running in the container. + * + * @var list|null + */ + protected $execIDs; + /** + * Container configuration that depends on the host we are running on. + * + * @var HostConfig|null + */ + protected $hostConfig; + /** + * Information about the storage driver used to store the container's and + * image's filesystem. + * + * @var GraphDriverData|null + */ + protected $graphDriver; + /** + * The size of files that have been created or changed by this + * container. + * + * @var int|null + */ + protected $sizeRw; + /** + * The total size of all the files in this container. + * + * @var int|null + */ + protected $sizeRootFs; + /** + * @var list|null + */ + protected $mounts; + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + * + * @var ContainerConfig|null + */ + protected $config; + /** + * NetworkSettings exposes the network settings in the API. + * + * @var NetworkSettings|null + */ + protected $networkSettings; + + /** + * The ID of the container. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * The ID of the container. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + /** + * The time the container was created. + */ + public function getCreated(): ?string + { + return $this->created; + } + + /** + * The time the container was created. + */ + public function setCreated(?string $created): self + { + $this->initialized['created'] = true; + $this->created = $created; + + return $this; + } + + /** + * The path to the command being run. + */ + public function getPath(): ?string + { + return $this->path; + } + + /** + * The path to the command being run. + */ + public function setPath(?string $path): self + { + $this->initialized['path'] = true; + $this->path = $path; + + return $this; + } + + /** + * The arguments to the command being run. + * + * @return list|null + */ + public function getArgs(): ?array + { + return $this->args; + } + + /** + * The arguments to the command being run. + * + * @param list|null $args + */ + public function setArgs(?array $args): self + { + $this->initialized['args'] = true; + $this->args = $args; + + return $this; + } + + /** + * ContainerState stores container's running state. It's part of ContainerJSONBase + * and will be returned by the "inspect" command. + */ + public function getState(): ?ContainerState + { + return $this->state; + } + + /** + * ContainerState stores container's running state. It's part of ContainerJSONBase + * and will be returned by the "inspect" command. + */ + public function setState(?ContainerState $state): self + { + $this->initialized['state'] = true; + $this->state = $state; + + return $this; + } + + /** + * The container's image ID. + */ + public function getImage(): ?string + { + return $this->image; + } + + /** + * The container's image ID. + */ + public function setImage(?string $image): self + { + $this->initialized['image'] = true; + $this->image = $image; + + return $this; + } + + public function getResolvConfPath(): ?string + { + return $this->resolvConfPath; + } + + public function setResolvConfPath(?string $resolvConfPath): self + { + $this->initialized['resolvConfPath'] = true; + $this->resolvConfPath = $resolvConfPath; + + return $this; + } + + public function getHostnamePath(): ?string + { + return $this->hostnamePath; + } + + public function setHostnamePath(?string $hostnamePath): self + { + $this->initialized['hostnamePath'] = true; + $this->hostnamePath = $hostnamePath; + + return $this; + } + + public function getHostsPath(): ?string + { + return $this->hostsPath; + } + + public function setHostsPath(?string $hostsPath): self + { + $this->initialized['hostsPath'] = true; + $this->hostsPath = $hostsPath; + + return $this; + } + + public function getLogPath(): ?string + { + return $this->logPath; + } + + public function setLogPath(?string $logPath): self + { + $this->initialized['logPath'] = true; + $this->logPath = $logPath; + + return $this; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getRestartCount(): ?int + { + return $this->restartCount; + } + + public function setRestartCount(?int $restartCount): self + { + $this->initialized['restartCount'] = true; + $this->restartCount = $restartCount; + + return $this; + } + + public function getDriver(): ?string + { + return $this->driver; + } + + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + public function getPlatform(): ?string + { + return $this->platform; + } + + public function setPlatform(?string $platform): self + { + $this->initialized['platform'] = true; + $this->platform = $platform; + + return $this; + } + + public function getMountLabel(): ?string + { + return $this->mountLabel; + } + + public function setMountLabel(?string $mountLabel): self + { + $this->initialized['mountLabel'] = true; + $this->mountLabel = $mountLabel; + + return $this; + } + + public function getProcessLabel(): ?string + { + return $this->processLabel; + } + + public function setProcessLabel(?string $processLabel): self + { + $this->initialized['processLabel'] = true; + $this->processLabel = $processLabel; + + return $this; + } + + public function getAppArmorProfile(): ?string + { + return $this->appArmorProfile; + } + + public function setAppArmorProfile(?string $appArmorProfile): self + { + $this->initialized['appArmorProfile'] = true; + $this->appArmorProfile = $appArmorProfile; + + return $this; + } + + /** + * IDs of exec instances that are running in the container. + * + * @return list|null + */ + public function getExecIDs(): ?array + { + return $this->execIDs; + } + + /** + * IDs of exec instances that are running in the container. + * + * @param list|null $execIDs + */ + public function setExecIDs(?array $execIDs): self + { + $this->initialized['execIDs'] = true; + $this->execIDs = $execIDs; + + return $this; + } + + /** + * Container configuration that depends on the host we are running on. + */ + public function getHostConfig(): ?HostConfig + { + return $this->hostConfig; + } + + /** + * Container configuration that depends on the host we are running on. + */ + public function setHostConfig(?HostConfig $hostConfig): self + { + $this->initialized['hostConfig'] = true; + $this->hostConfig = $hostConfig; + + return $this; + } + + /** + * Information about the storage driver used to store the container's and + * image's filesystem. + */ + public function getGraphDriver(): ?GraphDriverData + { + return $this->graphDriver; + } + + /** + * Information about the storage driver used to store the container's and + * image's filesystem. + */ + public function setGraphDriver(?GraphDriverData $graphDriver): self + { + $this->initialized['graphDriver'] = true; + $this->graphDriver = $graphDriver; + + return $this; + } + + /** + * The size of files that have been created or changed by this + * container. + */ + public function getSizeRw(): ?int + { + return $this->sizeRw; + } + + /** + * The size of files that have been created or changed by this + * container. + */ + public function setSizeRw(?int $sizeRw): self + { + $this->initialized['sizeRw'] = true; + $this->sizeRw = $sizeRw; + + return $this; + } + + /** + * The total size of all the files in this container. + */ + public function getSizeRootFs(): ?int + { + return $this->sizeRootFs; + } + + /** + * The total size of all the files in this container. + */ + public function setSizeRootFs(?int $sizeRootFs): self + { + $this->initialized['sizeRootFs'] = true; + $this->sizeRootFs = $sizeRootFs; + + return $this; + } + + /** + * @return list|null + */ + public function getMounts(): ?array + { + return $this->mounts; + } + + /** + * @param list|null $mounts + */ + public function setMounts(?array $mounts): self + { + $this->initialized['mounts'] = true; + $this->mounts = $mounts; + + return $this; + } + + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + */ + public function getConfig(): ?ContainerConfig + { + return $this->config; + } + + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + */ + public function setConfig(?ContainerConfig $config): self + { + $this->initialized['config'] = true; + $this->config = $config; + + return $this; + } + + /** + * NetworkSettings exposes the network settings in the API. + */ + public function getNetworkSettings(): ?NetworkSettings + { + return $this->networkSettings; + } + + /** + * NetworkSettings exposes the network settings in the API. + */ + public function setNetworkSettings(?NetworkSettings $networkSettings): self + { + $this->initialized['networkSettings'] = true; + $this->networkSettings = $networkSettings; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdTopGetJsonResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdTopGetJsonResponse200.php new file mode 100644 index 000000000..d7b487954 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdTopGetJsonResponse200.php @@ -0,0 +1,79 @@ +initialized); + } + /** + * The ps column titles. + * + * @var list|null + */ + protected $titles; + /** + * Each process running in the container, where each is process + * is an array of values corresponding to the titles. + * + * @var list>|null + */ + protected $processes; + + /** + * The ps column titles. + * + * @return list|null + */ + public function getTitles(): ?array + { + return $this->titles; + } + + /** + * The ps column titles. + * + * @param list|null $titles + */ + public function setTitles(?array $titles): self + { + $this->initialized['titles'] = true; + $this->titles = $titles; + + return $this; + } + + /** + * Each process running in the container, where each is process + * is an array of values corresponding to the titles. + * + * @return list>|null + */ + public function getProcesses(): ?array + { + return $this->processes; + } + + /** + * Each process running in the container, where each is process + * is an array of values corresponding to the titles. + * + * @param list>|null $processes + */ + public function setProcesses(?array $processes): self + { + $this->initialized['processes'] = true; + $this->processes = $processes; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdTopGetTextplainResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdTopGetTextplainResponse200.php new file mode 100644 index 000000000..d991cc228 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdTopGetTextplainResponse200.php @@ -0,0 +1,79 @@ +initialized); + } + /** + * The ps column titles. + * + * @var list|null + */ + protected $titles; + /** + * Each process running in the container, where each is process + * is an array of values corresponding to the titles. + * + * @var list>|null + */ + protected $processes; + + /** + * The ps column titles. + * + * @return list|null + */ + public function getTitles(): ?array + { + return $this->titles; + } + + /** + * The ps column titles. + * + * @param list|null $titles + */ + public function setTitles(?array $titles): self + { + $this->initialized['titles'] = true; + $this->titles = $titles; + + return $this; + } + + /** + * Each process running in the container, where each is process + * is an array of values corresponding to the titles. + * + * @return list>|null + */ + public function getProcesses(): ?array + { + return $this->processes; + } + + /** + * Each process running in the container, where each is process + * is an array of values corresponding to the titles. + * + * @param list>|null $processes + */ + public function setProcesses(?array $processes): self + { + $this->initialized['processes'] = true; + $this->processes = $processes; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdUpdatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdUpdatePostBody.php new file mode 100644 index 000000000..fc6fb7633 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdUpdatePostBody.php @@ -0,0 +1,1013 @@ +initialized); + } + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + * + * @var int|null + */ + protected $cpuShares; + /** + * Memory limit in bytes. + * + * @var int|null + */ + protected $memory = 0; + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + * + * @var string|null + */ + protected $cgroupParent; + /** + * Block IO weight (relative weight). + * + * @var int|null + */ + protected $blkioWeight; + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @var list|null + */ + protected $blkioWeightDevice; + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceReadBps; + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceWriteBps; + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceReadIOps; + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceWriteIOps; + /** + * The length of a CPU period in microseconds. + * + * @var int|null + */ + protected $cpuPeriod; + /** + * Microseconds of CPU time that the container can get in a CPU period. + * + * @var int|null + */ + protected $cpuQuota; + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + * + * @var int|null + */ + protected $cpuRealtimePeriod; + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + * + * @var int|null + */ + protected $cpuRealtimeRuntime; + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + * + * @var string|null + */ + protected $cpusetCpus; + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + * + * @var string|null + */ + protected $cpusetMems; + /** + * A list of devices to add to the container. + * + * @var list|null + */ + protected $devices; + /** + * a list of cgroup rules to apply to the container. + * + * @var list|null + */ + protected $deviceCgroupRules; + /** + * A list of requests for devices to be sent to device drivers. + * + * @var list|null + */ + protected $deviceRequests; + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + * + * @var int|null + */ + protected $kernelMemoryTCP; + /** + * Memory soft limit in bytes. + * + * @var int|null + */ + protected $memoryReservation; + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + * + * @var int|null + */ + protected $memorySwap; + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + * + * @var int|null + */ + protected $memorySwappiness; + /** + * CPU quota in units of 10-9 CPUs. + * + * @var int|null + */ + protected $nanoCpus; + /** + * Disable OOM Killer for the container. + * + * @var bool|null + */ + protected $oomKillDisable; + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + * + * @var bool|null + */ + protected $init; + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + * + * @var int|null + */ + protected $pidsLimit; + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @var list|null + */ + protected $ulimits; + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + * + * @var int|null + */ + protected $cpuCount; + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + * + * @var int|null + */ + protected $cpuPercent; + /** + * Maximum IOps for the container system drive (Windows only). + * + * @var int|null + */ + protected $iOMaximumIOps; + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + * + * @var int|null + */ + protected $iOMaximumBandwidth; + /** + * The behavior to apply when the container exits. The default is not to + * restart. + * + * An ever increasing delay (double the previous delay, starting at 100ms) is + * added before each restart to prevent flooding the server. + * + * @var RestartPolicy|null + */ + protected $restartPolicy; + + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + */ + public function getCpuShares(): ?int + { + return $this->cpuShares; + } + + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + */ + public function setCpuShares(?int $cpuShares): self + { + $this->initialized['cpuShares'] = true; + $this->cpuShares = $cpuShares; + + return $this; + } + + /** + * Memory limit in bytes. + */ + public function getMemory(): ?int + { + return $this->memory; + } + + /** + * Memory limit in bytes. + */ + public function setMemory(?int $memory): self + { + $this->initialized['memory'] = true; + $this->memory = $memory; + + return $this; + } + + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + */ + public function getCgroupParent(): ?string + { + return $this->cgroupParent; + } + + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + */ + public function setCgroupParent(?string $cgroupParent): self + { + $this->initialized['cgroupParent'] = true; + $this->cgroupParent = $cgroupParent; + + return $this; + } + + /** + * Block IO weight (relative weight). + */ + public function getBlkioWeight(): ?int + { + return $this->blkioWeight; + } + + /** + * Block IO weight (relative weight). + */ + public function setBlkioWeight(?int $blkioWeight): self + { + $this->initialized['blkioWeight'] = true; + $this->blkioWeight = $blkioWeight; + + return $this; + } + + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @return list|null + */ + public function getBlkioWeightDevice(): ?array + { + return $this->blkioWeightDevice; + } + + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @param list|null $blkioWeightDevice + */ + public function setBlkioWeightDevice(?array $blkioWeightDevice): self + { + $this->initialized['blkioWeightDevice'] = true; + $this->blkioWeightDevice = $blkioWeightDevice; + + return $this; + } + + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceReadBps(): ?array + { + return $this->blkioDeviceReadBps; + } + + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceReadBps + */ + public function setBlkioDeviceReadBps(?array $blkioDeviceReadBps): self + { + $this->initialized['blkioDeviceReadBps'] = true; + $this->blkioDeviceReadBps = $blkioDeviceReadBps; + + return $this; + } + + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceWriteBps(): ?array + { + return $this->blkioDeviceWriteBps; + } + + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceWriteBps + */ + public function setBlkioDeviceWriteBps(?array $blkioDeviceWriteBps): self + { + $this->initialized['blkioDeviceWriteBps'] = true; + $this->blkioDeviceWriteBps = $blkioDeviceWriteBps; + + return $this; + } + + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceReadIOps(): ?array + { + return $this->blkioDeviceReadIOps; + } + + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceReadIOps + */ + public function setBlkioDeviceReadIOps(?array $blkioDeviceReadIOps): self + { + $this->initialized['blkioDeviceReadIOps'] = true; + $this->blkioDeviceReadIOps = $blkioDeviceReadIOps; + + return $this; + } + + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceWriteIOps(): ?array + { + return $this->blkioDeviceWriteIOps; + } + + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceWriteIOps + */ + public function setBlkioDeviceWriteIOps(?array $blkioDeviceWriteIOps): self + { + $this->initialized['blkioDeviceWriteIOps'] = true; + $this->blkioDeviceWriteIOps = $blkioDeviceWriteIOps; + + return $this; + } + + /** + * The length of a CPU period in microseconds. + */ + public function getCpuPeriod(): ?int + { + return $this->cpuPeriod; + } + + /** + * The length of a CPU period in microseconds. + */ + public function setCpuPeriod(?int $cpuPeriod): self + { + $this->initialized['cpuPeriod'] = true; + $this->cpuPeriod = $cpuPeriod; + + return $this; + } + + /** + * Microseconds of CPU time that the container can get in a CPU period. + */ + public function getCpuQuota(): ?int + { + return $this->cpuQuota; + } + + /** + * Microseconds of CPU time that the container can get in a CPU period. + */ + public function setCpuQuota(?int $cpuQuota): self + { + $this->initialized['cpuQuota'] = true; + $this->cpuQuota = $cpuQuota; + + return $this; + } + + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function getCpuRealtimePeriod(): ?int + { + return $this->cpuRealtimePeriod; + } + + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function setCpuRealtimePeriod(?int $cpuRealtimePeriod): self + { + $this->initialized['cpuRealtimePeriod'] = true; + $this->cpuRealtimePeriod = $cpuRealtimePeriod; + + return $this; + } + + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function getCpuRealtimeRuntime(): ?int + { + return $this->cpuRealtimeRuntime; + } + + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function setCpuRealtimeRuntime(?int $cpuRealtimeRuntime): self + { + $this->initialized['cpuRealtimeRuntime'] = true; + $this->cpuRealtimeRuntime = $cpuRealtimeRuntime; + + return $this; + } + + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + */ + public function getCpusetCpus(): ?string + { + return $this->cpusetCpus; + } + + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + */ + public function setCpusetCpus(?string $cpusetCpus): self + { + $this->initialized['cpusetCpus'] = true; + $this->cpusetCpus = $cpusetCpus; + + return $this; + } + + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + */ + public function getCpusetMems(): ?string + { + return $this->cpusetMems; + } + + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + */ + public function setCpusetMems(?string $cpusetMems): self + { + $this->initialized['cpusetMems'] = true; + $this->cpusetMems = $cpusetMems; + + return $this; + } + + /** + * A list of devices to add to the container. + * + * @return list|null + */ + public function getDevices(): ?array + { + return $this->devices; + } + + /** + * A list of devices to add to the container. + * + * @param list|null $devices + */ + public function setDevices(?array $devices): self + { + $this->initialized['devices'] = true; + $this->devices = $devices; + + return $this; + } + + /** + * a list of cgroup rules to apply to the container. + * + * @return list|null + */ + public function getDeviceCgroupRules(): ?array + { + return $this->deviceCgroupRules; + } + + /** + * a list of cgroup rules to apply to the container. + * + * @param list|null $deviceCgroupRules + */ + public function setDeviceCgroupRules(?array $deviceCgroupRules): self + { + $this->initialized['deviceCgroupRules'] = true; + $this->deviceCgroupRules = $deviceCgroupRules; + + return $this; + } + + /** + * A list of requests for devices to be sent to device drivers. + * + * @return list|null + */ + public function getDeviceRequests(): ?array + { + return $this->deviceRequests; + } + + /** + * A list of requests for devices to be sent to device drivers. + * + * @param list|null $deviceRequests + */ + public function setDeviceRequests(?array $deviceRequests): self + { + $this->initialized['deviceRequests'] = true; + $this->deviceRequests = $deviceRequests; + + return $this; + } + + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + */ + public function getKernelMemoryTCP(): ?int + { + return $this->kernelMemoryTCP; + } + + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + */ + public function setKernelMemoryTCP(?int $kernelMemoryTCP): self + { + $this->initialized['kernelMemoryTCP'] = true; + $this->kernelMemoryTCP = $kernelMemoryTCP; + + return $this; + } + + /** + * Memory soft limit in bytes. + */ + public function getMemoryReservation(): ?int + { + return $this->memoryReservation; + } + + /** + * Memory soft limit in bytes. + */ + public function setMemoryReservation(?int $memoryReservation): self + { + $this->initialized['memoryReservation'] = true; + $this->memoryReservation = $memoryReservation; + + return $this; + } + + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + */ + public function getMemorySwap(): ?int + { + return $this->memorySwap; + } + + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + */ + public function setMemorySwap(?int $memorySwap): self + { + $this->initialized['memorySwap'] = true; + $this->memorySwap = $memorySwap; + + return $this; + } + + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + */ + public function getMemorySwappiness(): ?int + { + return $this->memorySwappiness; + } + + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + */ + public function setMemorySwappiness(?int $memorySwappiness): self + { + $this->initialized['memorySwappiness'] = true; + $this->memorySwappiness = $memorySwappiness; + + return $this; + } + + /** + * CPU quota in units of 10-9 CPUs. + */ + public function getNanoCpus(): ?int + { + return $this->nanoCpus; + } + + /** + * CPU quota in units of 10-9 CPUs. + */ + public function setNanoCpus(?int $nanoCpus): self + { + $this->initialized['nanoCpus'] = true; + $this->nanoCpus = $nanoCpus; + + return $this; + } + + /** + * Disable OOM Killer for the container. + */ + public function getOomKillDisable(): ?bool + { + return $this->oomKillDisable; + } + + /** + * Disable OOM Killer for the container. + */ + public function setOomKillDisable(?bool $oomKillDisable): self + { + $this->initialized['oomKillDisable'] = true; + $this->oomKillDisable = $oomKillDisable; + + return $this; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function getInit(): ?bool + { + return $this->init; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function setInit(?bool $init): self + { + $this->initialized['init'] = true; + $this->init = $init; + + return $this; + } + + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + */ + public function getPidsLimit(): ?int + { + return $this->pidsLimit; + } + + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + */ + public function setPidsLimit(?int $pidsLimit): self + { + $this->initialized['pidsLimit'] = true; + $this->pidsLimit = $pidsLimit; + + return $this; + } + + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @return list|null + */ + public function getUlimits(): ?array + { + return $this->ulimits; + } + + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @param list|null $ulimits + */ + public function setUlimits(?array $ulimits): self + { + $this->initialized['ulimits'] = true; + $this->ulimits = $ulimits; + + return $this; + } + + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function getCpuCount(): ?int + { + return $this->cpuCount; + } + + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function setCpuCount(?int $cpuCount): self + { + $this->initialized['cpuCount'] = true; + $this->cpuCount = $cpuCount; + + return $this; + } + + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function getCpuPercent(): ?int + { + return $this->cpuPercent; + } + + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function setCpuPercent(?int $cpuPercent): self + { + $this->initialized['cpuPercent'] = true; + $this->cpuPercent = $cpuPercent; + + return $this; + } + + /** + * Maximum IOps for the container system drive (Windows only). + */ + public function getIOMaximumIOps(): ?int + { + return $this->iOMaximumIOps; + } + + /** + * Maximum IOps for the container system drive (Windows only). + */ + public function setIOMaximumIOps(?int $iOMaximumIOps): self + { + $this->initialized['iOMaximumIOps'] = true; + $this->iOMaximumIOps = $iOMaximumIOps; + + return $this; + } + + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + */ + public function getIOMaximumBandwidth(): ?int + { + return $this->iOMaximumBandwidth; + } + + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + */ + public function setIOMaximumBandwidth(?int $iOMaximumBandwidth): self + { + $this->initialized['iOMaximumBandwidth'] = true; + $this->iOMaximumBandwidth = $iOMaximumBandwidth; + + return $this; + } + + /** + * The behavior to apply when the container exits. The default is not to + * restart. + * + * An ever increasing delay (double the previous delay, starting at 100ms) is + * added before each restart to prevent flooding the server. + */ + public function getRestartPolicy(): ?RestartPolicy + { + return $this->restartPolicy; + } + + /** + * The behavior to apply when the container exits. The default is not to + * restart. + * + * An ever increasing delay (double the previous delay, starting at 100ms) is + * added before each restart to prevent flooding the server. + */ + public function setRestartPolicy(?RestartPolicy $restartPolicy): self + { + $this->initialized['restartPolicy'] = true; + $this->restartPolicy = $restartPolicy; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdUpdatePostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdUpdatePostResponse200.php new file mode 100644 index 000000000..8cff530cb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersIdUpdatePostResponse200.php @@ -0,0 +1,41 @@ +initialized); + } + /** + * @var list|null + */ + protected $warnings; + + /** + * @return list|null + */ + public function getWarnings(): ?array + { + return $this->warnings; + } + + /** + * @param list|null $warnings + */ + public function setWarnings(?array $warnings): self + { + $this->initialized['warnings'] = true; + $this->warnings = $warnings; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ContainersPrunePostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersPrunePostResponse200.php new file mode 100644 index 000000000..99d4f002f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ContainersPrunePostResponse200.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * Container IDs that were deleted. + * + * @var list|null + */ + protected $containersDeleted; + /** + * Disk space reclaimed in bytes. + * + * @var int|null + */ + protected $spaceReclaimed; + + /** + * Container IDs that were deleted. + * + * @return list|null + */ + public function getContainersDeleted(): ?array + { + return $this->containersDeleted; + } + + /** + * Container IDs that were deleted. + * + * @param list|null $containersDeleted + */ + public function setContainersDeleted(?array $containersDeleted): self + { + $this->initialized['containersDeleted'] = true; + $this->containersDeleted = $containersDeleted; + + return $this; + } + + /** + * Disk space reclaimed in bytes. + */ + public function getSpaceReclaimed(): ?int + { + return $this->spaceReclaimed; + } + + /** + * Disk space reclaimed in bytes. + */ + public function setSpaceReclaimed(?int $spaceReclaimed): self + { + $this->initialized['spaceReclaimed'] = true; + $this->spaceReclaimed = $spaceReclaimed; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/CreateImageInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/CreateImageInfo.php new file mode 100644 index 000000000..3d1b83984 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/CreateImageInfo.php @@ -0,0 +1,120 @@ +initialized); + } + /** + * @var string|null + */ + protected $id; + /** + * @var string|null + */ + protected $error; + /** + * @var ErrorDetail|null + */ + protected $errorDetail; + /** + * @var string|null + */ + protected $status; + /** + * @var string|null + */ + protected $progress; + /** + * @var ProgressDetail|null + */ + protected $progressDetail; + + public function getId(): ?string + { + return $this->id; + } + + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + public function getError(): ?string + { + return $this->error; + } + + public function setError(?string $error): self + { + $this->initialized['error'] = true; + $this->error = $error; + + return $this; + } + + public function getErrorDetail(): ?ErrorDetail + { + return $this->errorDetail; + } + + public function setErrorDetail(?ErrorDetail $errorDetail): self + { + $this->initialized['errorDetail'] = true; + $this->errorDetail = $errorDetail; + + return $this; + } + + public function getStatus(): ?string + { + return $this->status; + } + + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + public function getProgress(): ?string + { + return $this->progress; + } + + public function setProgress(?string $progress): self + { + $this->initialized['progress'] = true; + $this->progress = $progress; + + return $this; + } + + public function getProgressDetail(): ?ProgressDetail + { + return $this->progressDetail; + } + + public function setProgressDetail(?ProgressDetail $progressDetail): self + { + $this->initialized['progressDetail'] = true; + $this->progressDetail = $progressDetail; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/DeviceMapping.php b/app/vendor/beluga-php/docker-php-api/src/Model/DeviceMapping.php new file mode 100644 index 000000000..437cccef2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/DeviceMapping.php @@ -0,0 +1,69 @@ +initialized); + } + /** + * @var string|null + */ + protected $pathOnHost; + /** + * @var string|null + */ + protected $pathInContainer; + /** + * @var string|null + */ + protected $cgroupPermissions; + + public function getPathOnHost(): ?string + { + return $this->pathOnHost; + } + + public function setPathOnHost(?string $pathOnHost): self + { + $this->initialized['pathOnHost'] = true; + $this->pathOnHost = $pathOnHost; + + return $this; + } + + public function getPathInContainer(): ?string + { + return $this->pathInContainer; + } + + public function setPathInContainer(?string $pathInContainer): self + { + $this->initialized['pathInContainer'] = true; + $this->pathInContainer = $pathInContainer; + + return $this; + } + + public function getCgroupPermissions(): ?string + { + return $this->cgroupPermissions; + } + + public function setCgroupPermissions(?string $cgroupPermissions): self + { + $this->initialized['cgroupPermissions'] = true; + $this->cgroupPermissions = $cgroupPermissions; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/DeviceRequest.php b/app/vendor/beluga-php/docker-php-api/src/Model/DeviceRequest.php new file mode 100644 index 000000000..a57bf77fd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/DeviceRequest.php @@ -0,0 +1,136 @@ +initialized); + } + /** + * @var string|null + */ + protected $driver; + /** + * @var int|null + */ + protected $count; + /** + * @var list|null + */ + protected $deviceIDs; + /** + * A list of capabilities; an OR list of AND lists of capabilities. + * + * @var list>|null + */ + protected $capabilities; + /** + * Driver-specific options, specified as a key/value pairs. These options + * are passed directly to the driver. + * + * @var array|null + */ + protected $options; + + public function getDriver(): ?string + { + return $this->driver; + } + + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + public function getCount(): ?int + { + return $this->count; + } + + public function setCount(?int $count): self + { + $this->initialized['count'] = true; + $this->count = $count; + + return $this; + } + + /** + * @return list|null + */ + public function getDeviceIDs(): ?array + { + return $this->deviceIDs; + } + + /** + * @param list|null $deviceIDs + */ + public function setDeviceIDs(?array $deviceIDs): self + { + $this->initialized['deviceIDs'] = true; + $this->deviceIDs = $deviceIDs; + + return $this; + } + + /** + * A list of capabilities; an OR list of AND lists of capabilities. + * + * @return list>|null + */ + public function getCapabilities(): ?array + { + return $this->capabilities; + } + + /** + * A list of capabilities; an OR list of AND lists of capabilities. + * + * @param list>|null $capabilities + */ + public function setCapabilities(?array $capabilities): self + { + $this->initialized['capabilities'] = true; + $this->capabilities = $capabilities; + + return $this; + } + + /** + * Driver-specific options, specified as a key/value pairs. These options + * are passed directly to the driver. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * Driver-specific options, specified as a key/value pairs. These options + * are passed directly to the driver. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/DistributionInspect.php b/app/vendor/beluga-php/docker-php-api/src/Model/DistributionInspect.php new file mode 100644 index 000000000..40a11718c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/DistributionInspect.php @@ -0,0 +1,75 @@ +initialized); + } + /** + * A descriptor struct containing digest, media type, and size, as defined in + * the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + * + * @var OCIDescriptor|null + */ + protected $descriptor; + /** + * An array containing all platforms supported by the image. + * + * @var list|null + */ + protected $platforms; + + /** + * A descriptor struct containing digest, media type, and size, as defined in + * the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + */ + public function getDescriptor(): ?OCIDescriptor + { + return $this->descriptor; + } + + /** + * A descriptor struct containing digest, media type, and size, as defined in + * the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + */ + public function setDescriptor(?OCIDescriptor $descriptor): self + { + $this->initialized['descriptor'] = true; + $this->descriptor = $descriptor; + + return $this; + } + + /** + * An array containing all platforms supported by the image. + * + * @return list|null + */ + public function getPlatforms(): ?array + { + return $this->platforms; + } + + /** + * An array containing all platforms supported by the image. + * + * @param list|null $platforms + */ + public function setPlatforms(?array $platforms): self + { + $this->initialized['platforms'] = true; + $this->platforms = $platforms; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Driver.php b/app/vendor/beluga-php/docker-php-api/src/Model/Driver.php new file mode 100644 index 000000000..648bbc60b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Driver.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * Name of the driver. + * + * @var string|null + */ + protected $name; + /** + * Key/value map of driver-specific options. + * + * @var array|null + */ + protected $options; + + /** + * Name of the driver. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the driver. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Key/value map of driver-specific options. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * Key/value map of driver-specific options. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EndpointIPAMConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointIPAMConfig.php new file mode 100644 index 000000000..fb6e33fe9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointIPAMConfig.php @@ -0,0 +1,75 @@ +initialized); + } + /** + * @var string|null + */ + protected $iPv4Address; + /** + * @var string|null + */ + protected $iPv6Address; + /** + * @var list|null + */ + protected $linkLocalIPs; + + public function getIPv4Address(): ?string + { + return $this->iPv4Address; + } + + public function setIPv4Address(?string $iPv4Address): self + { + $this->initialized['iPv4Address'] = true; + $this->iPv4Address = $iPv4Address; + + return $this; + } + + public function getIPv6Address(): ?string + { + return $this->iPv6Address; + } + + public function setIPv6Address(?string $iPv6Address): self + { + $this->initialized['iPv6Address'] = true; + $this->iPv6Address = $iPv6Address; + + return $this; + } + + /** + * @return list|null + */ + public function getLinkLocalIPs(): ?array + { + return $this->linkLocalIPs; + } + + /** + * @param list|null $linkLocalIPs + */ + public function setLinkLocalIPs(?array $linkLocalIPs): self + { + $this->initialized['linkLocalIPs'] = true; + $this->linkLocalIPs = $linkLocalIPs; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EndpointPortConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointPortConfig.php new file mode 100644 index 000000000..443ec8f7a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointPortConfig.php @@ -0,0 +1,151 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $protocol; + /** + * The port inside the container. + * + * @var int|null + */ + protected $targetPort; + /** + * The port on the swarm hosts. + * + * @var int|null + */ + protected $publishedPort; + /** + * The mode in which port is published. + * + *


+ * + * - "ingress" makes the target port accessible on every node, + * regardless of whether there is a task for the service running on + * that node or not. + * - "host" bypasses the routing mesh and publish the port directly on + * the swarm node where that service is running. + * + * @var string|null + */ + protected $publishMode = 'ingress'; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getProtocol(): ?string + { + return $this->protocol; + } + + public function setProtocol(?string $protocol): self + { + $this->initialized['protocol'] = true; + $this->protocol = $protocol; + + return $this; + } + + /** + * The port inside the container. + */ + public function getTargetPort(): ?int + { + return $this->targetPort; + } + + /** + * The port inside the container. + */ + public function setTargetPort(?int $targetPort): self + { + $this->initialized['targetPort'] = true; + $this->targetPort = $targetPort; + + return $this; + } + + /** + * The port on the swarm hosts. + */ + public function getPublishedPort(): ?int + { + return $this->publishedPort; + } + + /** + * The port on the swarm hosts. + */ + public function setPublishedPort(?int $publishedPort): self + { + $this->initialized['publishedPort'] = true; + $this->publishedPort = $publishedPort; + + return $this; + } + + /** + * The mode in which port is published. + * + *


+ * + * - "ingress" makes the target port accessible on every node, + * regardless of whether there is a task for the service running on + * that node or not. + * - "host" bypasses the routing mesh and publish the port directly on + * the swarm node where that service is running. + */ + public function getPublishMode(): ?string + { + return $this->publishMode; + } + + /** + * The mode in which port is published. + * + *


+ * + * - "ingress" makes the target port accessible on every node, + * regardless of whether there is a task for the service running on + * that node or not. + * - "host" bypasses the routing mesh and publish the port directly on + * the swarm node where that service is running. + */ + public function setPublishMode(?string $publishMode): self + { + $this->initialized['publishMode'] = true; + $this->publishMode = $publishMode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EndpointSettings.php b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointSettings.php new file mode 100644 index 000000000..dd01dec63 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointSettings.php @@ -0,0 +1,399 @@ +initialized); + } + /** + * EndpointIPAMConfig represents an endpoint's IPAM configuration. + * + * @var EndpointIPAMConfig|null + */ + protected $iPAMConfig; + /** + * @var list|null + */ + protected $links; + /** + * MAC address for the endpoint on this network. The network driver might ignore this parameter. + * + * @var string|null + */ + protected $macAddress; + /** + * @var list|null + */ + protected $aliases; + /** + * Unique ID of the network. + * + * @var string|null + */ + protected $networkID; + /** + * Unique ID for the service endpoint in a Sandbox. + * + * @var string|null + */ + protected $endpointID; + /** + * Gateway address for this network. + * + * @var string|null + */ + protected $gateway; + /** + * IPv4 address. + * + * @var string|null + */ + protected $iPAddress; + /** + * Mask length of the IPv4 address. + * + * @var int|null + */ + protected $iPPrefixLen; + /** + * IPv6 gateway address. + * + * @var string|null + */ + protected $iPv6Gateway; + /** + * Global IPv6 address. + * + * @var string|null + */ + protected $globalIPv6Address; + /** + * Mask length of the global IPv6 address. + * + * @var int|null + */ + protected $globalIPv6PrefixLen; + /** + * DriverOpts is a mapping of driver options and values. These options + * are passed directly to the driver and are driver specific. + * + * @var array|null + */ + protected $driverOpts; + /** + * List of all DNS names an endpoint has on a specific network. This + * list is based on the container name, network aliases, container short + * ID, and hostname. + * + * These DNS names are non-fully qualified but can contain several dots. + * You can get fully qualified DNS names by appending `.`. + * For instance, if container name is `my.ctr` and the network is named + * `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + * `my.ctr.testnet`. + * + * @var list|null + */ + protected $dNSNames; + + /** + * EndpointIPAMConfig represents an endpoint's IPAM configuration. + */ + public function getIPAMConfig(): ?EndpointIPAMConfig + { + return $this->iPAMConfig; + } + + /** + * EndpointIPAMConfig represents an endpoint's IPAM configuration. + */ + public function setIPAMConfig(?EndpointIPAMConfig $iPAMConfig): self + { + $this->initialized['iPAMConfig'] = true; + $this->iPAMConfig = $iPAMConfig; + + return $this; + } + + /** + * @return list|null + */ + public function getLinks(): ?array + { + return $this->links; + } + + /** + * @param list|null $links + */ + public function setLinks(?array $links): self + { + $this->initialized['links'] = true; + $this->links = $links; + + return $this; + } + + /** + * MAC address for the endpoint on this network. The network driver might ignore this parameter. + */ + public function getMacAddress(): ?string + { + return $this->macAddress; + } + + /** + * MAC address for the endpoint on this network. The network driver might ignore this parameter. + */ + public function setMacAddress(?string $macAddress): self + { + $this->initialized['macAddress'] = true; + $this->macAddress = $macAddress; + + return $this; + } + + /** + * @return list|null + */ + public function getAliases(): ?array + { + return $this->aliases; + } + + /** + * @param list|null $aliases + */ + public function setAliases(?array $aliases): self + { + $this->initialized['aliases'] = true; + $this->aliases = $aliases; + + return $this; + } + + /** + * Unique ID of the network. + */ + public function getNetworkID(): ?string + { + return $this->networkID; + } + + /** + * Unique ID of the network. + */ + public function setNetworkID(?string $networkID): self + { + $this->initialized['networkID'] = true; + $this->networkID = $networkID; + + return $this; + } + + /** + * Unique ID for the service endpoint in a Sandbox. + */ + public function getEndpointID(): ?string + { + return $this->endpointID; + } + + /** + * Unique ID for the service endpoint in a Sandbox. + */ + public function setEndpointID(?string $endpointID): self + { + $this->initialized['endpointID'] = true; + $this->endpointID = $endpointID; + + return $this; + } + + /** + * Gateway address for this network. + */ + public function getGateway(): ?string + { + return $this->gateway; + } + + /** + * Gateway address for this network. + */ + public function setGateway(?string $gateway): self + { + $this->initialized['gateway'] = true; + $this->gateway = $gateway; + + return $this; + } + + /** + * IPv4 address. + */ + public function getIPAddress(): ?string + { + return $this->iPAddress; + } + + /** + * IPv4 address. + */ + public function setIPAddress(?string $iPAddress): self + { + $this->initialized['iPAddress'] = true; + $this->iPAddress = $iPAddress; + + return $this; + } + + /** + * Mask length of the IPv4 address. + */ + public function getIPPrefixLen(): ?int + { + return $this->iPPrefixLen; + } + + /** + * Mask length of the IPv4 address. + */ + public function setIPPrefixLen(?int $iPPrefixLen): self + { + $this->initialized['iPPrefixLen'] = true; + $this->iPPrefixLen = $iPPrefixLen; + + return $this; + } + + /** + * IPv6 gateway address. + */ + public function getIPv6Gateway(): ?string + { + return $this->iPv6Gateway; + } + + /** + * IPv6 gateway address. + */ + public function setIPv6Gateway(?string $iPv6Gateway): self + { + $this->initialized['iPv6Gateway'] = true; + $this->iPv6Gateway = $iPv6Gateway; + + return $this; + } + + /** + * Global IPv6 address. + */ + public function getGlobalIPv6Address(): ?string + { + return $this->globalIPv6Address; + } + + /** + * Global IPv6 address. + */ + public function setGlobalIPv6Address(?string $globalIPv6Address): self + { + $this->initialized['globalIPv6Address'] = true; + $this->globalIPv6Address = $globalIPv6Address; + + return $this; + } + + /** + * Mask length of the global IPv6 address. + */ + public function getGlobalIPv6PrefixLen(): ?int + { + return $this->globalIPv6PrefixLen; + } + + /** + * Mask length of the global IPv6 address. + */ + public function setGlobalIPv6PrefixLen(?int $globalIPv6PrefixLen): self + { + $this->initialized['globalIPv6PrefixLen'] = true; + $this->globalIPv6PrefixLen = $globalIPv6PrefixLen; + + return $this; + } + + /** + * DriverOpts is a mapping of driver options and values. These options + * are passed directly to the driver and are driver specific. + * + * @return array|null + */ + public function getDriverOpts(): ?iterable + { + return $this->driverOpts; + } + + /** + * DriverOpts is a mapping of driver options and values. These options + * are passed directly to the driver and are driver specific. + * + * @param array|null $driverOpts + */ + public function setDriverOpts(?iterable $driverOpts): self + { + $this->initialized['driverOpts'] = true; + $this->driverOpts = $driverOpts; + + return $this; + } + + /** + * List of all DNS names an endpoint has on a specific network. This + * list is based on the container name, network aliases, container short + * ID, and hostname. + * + * These DNS names are non-fully qualified but can contain several dots. + * You can get fully qualified DNS names by appending `.`. + * For instance, if container name is `my.ctr` and the network is named + * `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + * `my.ctr.testnet`. + * + * @return list|null + */ + public function getDNSNames(): ?array + { + return $this->dNSNames; + } + + /** + * List of all DNS names an endpoint has on a specific network. This + * list is based on the container name, network aliases, container short + * ID, and hostname. + * + * These DNS names are non-fully qualified but can contain several dots. + * You can get fully qualified DNS names by appending `.`. + * For instance, if container name is `my.ctr` and the network is named + * `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + * `my.ctr.testnet`. + * + * @param list|null $dNSNames + */ + public function setDNSNames(?array $dNSNames): self + { + $this->initialized['dNSNames'] = true; + $this->dNSNames = $dNSNames; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EndpointSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointSpec.php new file mode 100644 index 000000000..1acd53a9e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EndpointSpec.php @@ -0,0 +1,75 @@ +initialized); + } + /** + * The mode of resolution to use for internal load balancing between tasks. + * + * @var string|null + */ + protected $mode = 'vip'; + /** + * List of exposed ports that this service is accessible on from the + * outside. Ports can only be provided if `vip` resolution mode is used. + * + * @var list|null + */ + protected $ports; + + /** + * The mode of resolution to use for internal load balancing between tasks. + */ + public function getMode(): ?string + { + return $this->mode; + } + + /** + * The mode of resolution to use for internal load balancing between tasks. + */ + public function setMode(?string $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } + + /** + * List of exposed ports that this service is accessible on from the + * outside. Ports can only be provided if `vip` resolution mode is used. + * + * @return list|null + */ + public function getPorts(): ?array + { + return $this->ports; + } + + /** + * List of exposed ports that this service is accessible on from the + * outside. Ports can only be provided if `vip` resolution mode is used. + * + * @param list|null $ports + */ + public function setPorts(?array $ports): self + { + $this->initialized['ports'] = true; + $this->ports = $ports; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EngineDescription.php b/app/vendor/beluga-php/docker-php-api/src/Model/EngineDescription.php new file mode 100644 index 000000000..c3458ca9b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EngineDescription.php @@ -0,0 +1,81 @@ +initialized); + } + /** + * @var string|null + */ + protected $engineVersion; + /** + * @var array|null + */ + protected $labels; + /** + * @var list|null + */ + protected $plugins; + + public function getEngineVersion(): ?string + { + return $this->engineVersion; + } + + public function setEngineVersion(?string $engineVersion): self + { + $this->initialized['engineVersion'] = true; + $this->engineVersion = $engineVersion; + + return $this; + } + + /** + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * @return list|null + */ + public function getPlugins(): ?array + { + return $this->plugins; + } + + /** + * @param list|null $plugins + */ + public function setPlugins(?array $plugins): self + { + $this->initialized['plugins'] = true; + $this->plugins = $plugins; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EngineDescriptionPluginsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/EngineDescriptionPluginsItem.php new file mode 100644 index 000000000..e0eff2249 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EngineDescriptionPluginsItem.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var string|null + */ + protected $type; + /** + * @var string|null + */ + protected $name; + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ErrorDetail.php b/app/vendor/beluga-php/docker-php-api/src/Model/ErrorDetail.php new file mode 100644 index 000000000..65940b3a3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ErrorDetail.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var int|null + */ + protected $code; + /** + * @var string|null + */ + protected $message; + + public function getCode(): ?int + { + return $this->code; + } + + public function setCode(?int $code): self + { + $this->initialized['code'] = true; + $this->code = $code; + + return $this; + } + + public function getMessage(): ?string + { + return $this->message; + } + + public function setMessage(?string $message): self + { + $this->initialized['message'] = true; + $this->message = $message; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ErrorResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/ErrorResponse.php new file mode 100644 index 000000000..2258140cc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ErrorResponse.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * The error message. + * + * @var string|null + */ + protected $message; + + /** + * The error message. + */ + public function getMessage(): ?string + { + return $this->message; + } + + /** + * The error message. + */ + public function setMessage(?string $message): self + { + $this->initialized['message'] = true; + $this->message = $message; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EventActor.php b/app/vendor/beluga-php/docker-php-api/src/Model/EventActor.php new file mode 100644 index 000000000..a6fd7e38f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EventActor.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * The ID of the object emitting the event. + * + * @var string|null + */ + protected $iD; + /** + * Various key/value attributes of the object, depending on its type. + * + * @var array|null + */ + protected $attributes; + + /** + * The ID of the object emitting the event. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * The ID of the object emitting the event. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * Various key/value attributes of the object, depending on its type. + * + * @return array|null + */ + public function getAttributes(): ?iterable + { + return $this->attributes; + } + + /** + * Various key/value attributes of the object, depending on its type. + * + * @param array|null $attributes + */ + public function setAttributes(?iterable $attributes): self + { + $this->initialized['attributes'] = true; + $this->attributes = $attributes; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/EventMessage.php b/app/vendor/beluga-php/docker-php-api/src/Model/EventMessage.php new file mode 100644 index 000000000..531dd4775 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/EventMessage.php @@ -0,0 +1,174 @@ +initialized); + } + /** + * The type of object emitting the event. + * + * @var string|null + */ + protected $type; + /** + * The type of event. + * + * @var string|null + */ + protected $action; + /** + * Actor describes something that generates events, like a container, network, + * or a volume. + * + * @var EventActor|null + */ + protected $actor; + /** + * Scope of the event. Engine events are `local` scope. Cluster (Swarm) + * events are `swarm` scope. + * + * @var string|null + */ + protected $scope; + /** + * Timestamp of event. + * + * @var int|null + */ + protected $time; + /** + * Timestamp of event, with nanosecond accuracy. + * + * @var int|null + */ + protected $timeNano; + + /** + * The type of object emitting the event. + */ + public function getType(): ?string + { + return $this->type; + } + + /** + * The type of object emitting the event. + */ + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * The type of event. + */ + public function getAction(): ?string + { + return $this->action; + } + + /** + * The type of event. + */ + public function setAction(?string $action): self + { + $this->initialized['action'] = true; + $this->action = $action; + + return $this; + } + + /** + * Actor describes something that generates events, like a container, network, + * or a volume. + */ + public function getActor(): ?EventActor + { + return $this->actor; + } + + /** + * Actor describes something that generates events, like a container, network, + * or a volume. + */ + public function setActor(?EventActor $actor): self + { + $this->initialized['actor'] = true; + $this->actor = $actor; + + return $this; + } + + /** + * Scope of the event. Engine events are `local` scope. Cluster (Swarm) + * events are `swarm` scope. + */ + public function getScope(): ?string + { + return $this->scope; + } + + /** + * Scope of the event. Engine events are `local` scope. Cluster (Swarm) + * events are `swarm` scope. + */ + public function setScope(?string $scope): self + { + $this->initialized['scope'] = true; + $this->scope = $scope; + + return $this; + } + + /** + * Timestamp of event. + */ + public function getTime(): ?int + { + return $this->time; + } + + /** + * Timestamp of event. + */ + public function setTime(?int $time): self + { + $this->initialized['time'] = true; + $this->time = $time; + + return $this; + } + + /** + * Timestamp of event, with nanosecond accuracy. + */ + public function getTimeNano(): ?int + { + return $this->timeNano; + } + + /** + * Timestamp of event, with nanosecond accuracy. + */ + public function setTimeNano(?int $timeNano): self + { + $this->initialized['timeNano'] = true; + $this->timeNano = $timeNano; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ExecIdJsonGetResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ExecIdJsonGetResponse200.php new file mode 100644 index 000000000..e53dd4822 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ExecIdJsonGetResponse200.php @@ -0,0 +1,213 @@ +initialized); + } + /** + * @var bool|null + */ + protected $canRemove; + /** + * @var string|null + */ + protected $detachKeys; + /** + * @var string|null + */ + protected $iD; + /** + * @var bool|null + */ + protected $running; + /** + * @var int|null + */ + protected $exitCode; + /** + * @var ProcessConfig|null + */ + protected $processConfig; + /** + * @var bool|null + */ + protected $openStdin; + /** + * @var bool|null + */ + protected $openStderr; + /** + * @var bool|null + */ + protected $openStdout; + /** + * @var string|null + */ + protected $containerID; + /** + * The system process ID for the exec process. + * + * @var int|null + */ + protected $pid; + + public function getCanRemove(): ?bool + { + return $this->canRemove; + } + + public function setCanRemove(?bool $canRemove): self + { + $this->initialized['canRemove'] = true; + $this->canRemove = $canRemove; + + return $this; + } + + public function getDetachKeys(): ?string + { + return $this->detachKeys; + } + + public function setDetachKeys(?string $detachKeys): self + { + $this->initialized['detachKeys'] = true; + $this->detachKeys = $detachKeys; + + return $this; + } + + public function getID(): ?string + { + return $this->iD; + } + + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + public function getRunning(): ?bool + { + return $this->running; + } + + public function setRunning(?bool $running): self + { + $this->initialized['running'] = true; + $this->running = $running; + + return $this; + } + + public function getExitCode(): ?int + { + return $this->exitCode; + } + + public function setExitCode(?int $exitCode): self + { + $this->initialized['exitCode'] = true; + $this->exitCode = $exitCode; + + return $this; + } + + public function getProcessConfig(): ?ProcessConfig + { + return $this->processConfig; + } + + public function setProcessConfig(?ProcessConfig $processConfig): self + { + $this->initialized['processConfig'] = true; + $this->processConfig = $processConfig; + + return $this; + } + + public function getOpenStdin(): ?bool + { + return $this->openStdin; + } + + public function setOpenStdin(?bool $openStdin): self + { + $this->initialized['openStdin'] = true; + $this->openStdin = $openStdin; + + return $this; + } + + public function getOpenStderr(): ?bool + { + return $this->openStderr; + } + + public function setOpenStderr(?bool $openStderr): self + { + $this->initialized['openStderr'] = true; + $this->openStderr = $openStderr; + + return $this; + } + + public function getOpenStdout(): ?bool + { + return $this->openStdout; + } + + public function setOpenStdout(?bool $openStdout): self + { + $this->initialized['openStdout'] = true; + $this->openStdout = $openStdout; + + return $this; + } + + public function getContainerID(): ?string + { + return $this->containerID; + } + + public function setContainerID(?string $containerID): self + { + $this->initialized['containerID'] = true; + $this->containerID = $containerID; + + return $this; + } + + /** + * The system process ID for the exec process. + */ + public function getPid(): ?int + { + return $this->pid; + } + + /** + * The system process ID for the exec process. + */ + public function setPid(?int $pid): self + { + $this->initialized['pid'] = true; + $this->pid = $pid; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ExecIdStartPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ExecIdStartPostBody.php new file mode 100644 index 000000000..cb70cac80 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ExecIdStartPostBody.php @@ -0,0 +1,97 @@ +initialized); + } + /** + * Detach from the command. + * + * @var bool|null + */ + protected $detach; + /** + * Allocate a pseudo-TTY. + * + * @var bool|null + */ + protected $tty; + /** + * Initial console size, as an `[height, width]` array. + * + * @var list|null + */ + protected $consoleSize; + + /** + * Detach from the command. + */ + public function getDetach(): ?bool + { + return $this->detach; + } + + /** + * Detach from the command. + */ + public function setDetach(?bool $detach): self + { + $this->initialized['detach'] = true; + $this->detach = $detach; + + return $this; + } + + /** + * Allocate a pseudo-TTY. + */ + public function getTty(): ?bool + { + return $this->tty; + } + + /** + * Allocate a pseudo-TTY. + */ + public function setTty(?bool $tty): self + { + $this->initialized['tty'] = true; + $this->tty = $tty; + + return $this; + } + + /** + * Initial console size, as an `[height, width]` array. + * + * @return list|null + */ + public function getConsoleSize(): ?array + { + return $this->consoleSize; + } + + /** + * Initial console size, as an `[height, width]` array. + * + * @param list|null $consoleSize + */ + public function setConsoleSize(?array $consoleSize): self + { + $this->initialized['consoleSize'] = true; + $this->consoleSize = $consoleSize; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/FilesystemChange.php b/app/vendor/beluga-php/docker-php-api/src/Model/FilesystemChange.php new file mode 100644 index 000000000..74a5dbae7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/FilesystemChange.php @@ -0,0 +1,86 @@ +initialized); + } + /** + * Path to file or directory that has changed. + * + * @var string|null + */ + protected $path; + /** + * Kind of change. + * + * Can be one of: + * + * - `0`: Modified ("C") + * - `1`: Added ("A") + * - `2`: Deleted ("D") + * + * @var int|null + */ + protected $kind; + + /** + * Path to file or directory that has changed. + */ + public function getPath(): ?string + { + return $this->path; + } + + /** + * Path to file or directory that has changed. + */ + public function setPath(?string $path): self + { + $this->initialized['path'] = true; + $this->path = $path; + + return $this; + } + + /** + * Kind of change. + * + * Can be one of: + * + * - `0`: Modified ("C") + * - `1`: Added ("A") + * - `2`: Deleted ("D") + */ + public function getKind(): ?int + { + return $this->kind; + } + + /** + * Kind of change. + * + * Can be one of: + * + * - `0`: Modified ("C") + * - `1`: Added ("A") + * - `2`: Deleted ("D") + */ + public function setKind(?int $kind): self + { + $this->initialized['kind'] = true; + $this->kind = $kind; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItem.php new file mode 100644 index 000000000..34ce73c76 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItem.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var GenericResourcesItemNamedResourceSpec|null + */ + protected $namedResourceSpec; + /** + * @var GenericResourcesItemDiscreteResourceSpec|null + */ + protected $discreteResourceSpec; + + public function getNamedResourceSpec(): ?GenericResourcesItemNamedResourceSpec + { + return $this->namedResourceSpec; + } + + public function setNamedResourceSpec(?GenericResourcesItemNamedResourceSpec $namedResourceSpec): self + { + $this->initialized['namedResourceSpec'] = true; + $this->namedResourceSpec = $namedResourceSpec; + + return $this; + } + + public function getDiscreteResourceSpec(): ?GenericResourcesItemDiscreteResourceSpec + { + return $this->discreteResourceSpec; + } + + public function setDiscreteResourceSpec(?GenericResourcesItemDiscreteResourceSpec $discreteResourceSpec): self + { + $this->initialized['discreteResourceSpec'] = true; + $this->discreteResourceSpec = $discreteResourceSpec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItemDiscreteResourceSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItemDiscreteResourceSpec.php new file mode 100644 index 000000000..c61834c20 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItemDiscreteResourceSpec.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var string|null + */ + protected $kind; + /** + * @var int|null + */ + protected $value; + + public function getKind(): ?string + { + return $this->kind; + } + + public function setKind(?string $kind): self + { + $this->initialized['kind'] = true; + $this->kind = $kind; + + return $this; + } + + public function getValue(): ?int + { + return $this->value; + } + + public function setValue(?int $value): self + { + $this->initialized['value'] = true; + $this->value = $value; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItemNamedResourceSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItemNamedResourceSpec.php new file mode 100644 index 000000000..8ab815d18 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/GenericResourcesItemNamedResourceSpec.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var string|null + */ + protected $kind; + /** + * @var string|null + */ + protected $value; + + public function getKind(): ?string + { + return $this->kind; + } + + public function setKind(?string $kind): self + { + $this->initialized['kind'] = true; + $this->kind = $kind; + + return $this; + } + + public function getValue(): ?string + { + return $this->value; + } + + public function setValue(?string $value): self + { + $this->initialized['value'] = true; + $this->value = $value; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/GraphDriverData.php b/app/vendor/beluga-php/docker-php-api/src/Model/GraphDriverData.php new file mode 100644 index 000000000..be960cf66 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/GraphDriverData.php @@ -0,0 +1,81 @@ +initialized); + } + /** + * Name of the storage driver. + * + * @var string|null + */ + protected $name; + /** + * Low-level storage metadata, provided as key/value pairs. + * + * This information is driver-specific, and depends on the storage-driver + * in use, and should be used for informational purposes only. + * + * @var array|null + */ + protected $data; + + /** + * Name of the storage driver. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the storage driver. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Low-level storage metadata, provided as key/value pairs. + * + * This information is driver-specific, and depends on the storage-driver + * in use, and should be used for informational purposes only. + * + * @return array|null + */ + public function getData(): ?iterable + { + return $this->data; + } + + /** + * Low-level storage metadata, provided as key/value pairs. + * + * This information is driver-specific, and depends on the storage-driver + * in use, and should be used for informational purposes only. + * + * @param array|null $data + */ + public function setData(?iterable $data): self + { + $this->initialized['data'] = true; + $this->data = $data; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Health.php b/app/vendor/beluga-php/docker-php-api/src/Model/Health.php new file mode 100644 index 000000000..2cd36b6b0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Health.php @@ -0,0 +1,112 @@ +initialized); + } + /** + * Status is one of `none`, `starting`, `healthy` or `unhealthy`. + * + * - "none" Indicates there is no healthcheck + * - "starting" Starting indicates that the container is not yet ready + * - "healthy" Healthy indicates that the container is running correctly + * - "unhealthy" Unhealthy indicates that the container has a problem + * + * @var string|null + */ + protected $status; + /** + * FailingStreak is the number of consecutive failures. + * + * @var int|null + */ + protected $failingStreak; + /** + * Log contains the last few results (oldest first). + * + * @var list|null + */ + protected $log; + + /** + * Status is one of `none`, `starting`, `healthy` or `unhealthy`. + * + * - "none" Indicates there is no healthcheck + * - "starting" Starting indicates that the container is not yet ready + * - "healthy" Healthy indicates that the container is running correctly + * - "unhealthy" Unhealthy indicates that the container has a problem + */ + public function getStatus(): ?string + { + return $this->status; + } + + /** + * Status is one of `none`, `starting`, `healthy` or `unhealthy`. + * + * - "none" Indicates there is no healthcheck + * - "starting" Starting indicates that the container is not yet ready + * - "healthy" Healthy indicates that the container is running correctly + * - "unhealthy" Unhealthy indicates that the container has a problem + */ + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + /** + * FailingStreak is the number of consecutive failures. + */ + public function getFailingStreak(): ?int + { + return $this->failingStreak; + } + + /** + * FailingStreak is the number of consecutive failures. + */ + public function setFailingStreak(?int $failingStreak): self + { + $this->initialized['failingStreak'] = true; + $this->failingStreak = $failingStreak; + + return $this; + } + + /** + * Log contains the last few results (oldest first). + * + * @return list|null + */ + public function getLog(): ?array + { + return $this->log; + } + + /** + * Log contains the last few results (oldest first). + * + * @param list|null $log + */ + public function setLog(?array $log): self + { + $this->initialized['log'] = true; + $this->log = $log; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/HealthConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/HealthConfig.php new file mode 100644 index 000000000..4b61a21a5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/HealthConfig.php @@ -0,0 +1,205 @@ +initialized); + } + /** + * The test to perform. Possible values are: + * + * - `[]` inherit healthcheck from image or parent image + * - `["NONE"]` disable healthcheck + * - `["CMD", args...]` exec arguments directly + * - `["CMD-SHELL", command]` run command with system's default shell + * + * @var list|null + */ + protected $test; + /** + * The time to wait between checks in nanoseconds. It should be 0 or at + * least 1000000 (1 ms). 0 means inherit. + * + * @var int|null + */ + protected $interval; + /** + * The time to wait before considering the check to have hung. It should + * be 0 or at least 1000000 (1 ms). 0 means inherit. + * + * @var int|null + */ + protected $timeout; + /** + * The number of consecutive failures needed to consider a container as + * unhealthy. 0 means inherit. + * + * @var int|null + */ + protected $retries; + /** + * Start period for the container to initialize before starting + * health-retries countdown in nanoseconds. It should be 0 or at least + * 1000000 (1 ms). 0 means inherit. + * + * @var int|null + */ + protected $startPeriod; + /** + * The time to wait between checks in nanoseconds during the start period. + * It should be 0 or at least 1000000 (1 ms). 0 means inherit. + * + * @var int|null + */ + protected $startInterval; + + /** + * The test to perform. Possible values are: + * + * - `[]` inherit healthcheck from image or parent image + * - `["NONE"]` disable healthcheck + * - `["CMD", args...]` exec arguments directly + * - `["CMD-SHELL", command]` run command with system's default shell + * + * @return list|null + */ + public function getTest(): ?array + { + return $this->test; + } + + /** + * The test to perform. Possible values are: + * + * - `[]` inherit healthcheck from image or parent image + * - `["NONE"]` disable healthcheck + * - `["CMD", args...]` exec arguments directly + * - `["CMD-SHELL", command]` run command with system's default shell + * + * @param list|null $test + */ + public function setTest(?array $test): self + { + $this->initialized['test'] = true; + $this->test = $test; + + return $this; + } + + /** + * The time to wait between checks in nanoseconds. It should be 0 or at + * least 1000000 (1 ms). 0 means inherit. + */ + public function getInterval(): ?int + { + return $this->interval; + } + + /** + * The time to wait between checks in nanoseconds. It should be 0 or at + * least 1000000 (1 ms). 0 means inherit. + */ + public function setInterval(?int $interval): self + { + $this->initialized['interval'] = true; + $this->interval = $interval; + + return $this; + } + + /** + * The time to wait before considering the check to have hung. It should + * be 0 or at least 1000000 (1 ms). 0 means inherit. + */ + public function getTimeout(): ?int + { + return $this->timeout; + } + + /** + * The time to wait before considering the check to have hung. It should + * be 0 or at least 1000000 (1 ms). 0 means inherit. + */ + public function setTimeout(?int $timeout): self + { + $this->initialized['timeout'] = true; + $this->timeout = $timeout; + + return $this; + } + + /** + * The number of consecutive failures needed to consider a container as + * unhealthy. 0 means inherit. + */ + public function getRetries(): ?int + { + return $this->retries; + } + + /** + * The number of consecutive failures needed to consider a container as + * unhealthy. 0 means inherit. + */ + public function setRetries(?int $retries): self + { + $this->initialized['retries'] = true; + $this->retries = $retries; + + return $this; + } + + /** + * Start period for the container to initialize before starting + * health-retries countdown in nanoseconds. It should be 0 or at least + * 1000000 (1 ms). 0 means inherit. + */ + public function getStartPeriod(): ?int + { + return $this->startPeriod; + } + + /** + * Start period for the container to initialize before starting + * health-retries countdown in nanoseconds. It should be 0 or at least + * 1000000 (1 ms). 0 means inherit. + */ + public function setStartPeriod(?int $startPeriod): self + { + $this->initialized['startPeriod'] = true; + $this->startPeriod = $startPeriod; + + return $this; + } + + /** + * The time to wait between checks in nanoseconds during the start period. + * It should be 0 or at least 1000000 (1 ms). 0 means inherit. + */ + public function getStartInterval(): ?int + { + return $this->startInterval; + } + + /** + * The time to wait between checks in nanoseconds during the start period. + * It should be 0 or at least 1000000 (1 ms). 0 means inherit. + */ + public function setStartInterval(?int $startInterval): self + { + $this->initialized['startInterval'] = true; + $this->startInterval = $startInterval; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/HealthcheckResult.php b/app/vendor/beluga-php/docker-php-api/src/Model/HealthcheckResult.php new file mode 100644 index 000000000..f17350b63 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/HealthcheckResult.php @@ -0,0 +1,139 @@ +initialized); + } + /** + * Date and time at which this check started in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var \DateTimeInterface|null + */ + protected $start; + /** + * Date and time at which this check ended in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $end; + /** + * ExitCode meanings: + * + * - `0` healthy + * - `1` unhealthy + * - `2` reserved (considered unhealthy) + * - other values: error running probe + * + * @var int|null + */ + protected $exitCode; + /** + * Output from last check. + * + * @var string|null + */ + protected $output; + + /** + * Date and time at which this check started in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getStart(): ?\DateTimeInterface + { + return $this->start; + } + + /** + * Date and time at which this check started in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setStart(?\DateTimeInterface $start): self + { + $this->initialized['start'] = true; + $this->start = $start; + + return $this; + } + + /** + * Date and time at which this check ended in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getEnd(): ?string + { + return $this->end; + } + + /** + * Date and time at which this check ended in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setEnd(?string $end): self + { + $this->initialized['end'] = true; + $this->end = $end; + + return $this; + } + + /** + * ExitCode meanings: + * + * - `0` healthy + * - `1` unhealthy + * - `2` reserved (considered unhealthy) + * - other values: error running probe + */ + public function getExitCode(): ?int + { + return $this->exitCode; + } + + /** + * ExitCode meanings: + * + * - `0` healthy + * - `1` unhealthy + * - `2` reserved (considered unhealthy) + * - other values: error running probe + */ + public function setExitCode(?int $exitCode): self + { + $this->initialized['exitCode'] = true; + $this->exitCode = $exitCode; + + return $this; + } + + /** + * Output from last check. + */ + public function getOutput(): ?string + { + return $this->output; + } + + /** + * Output from last check. + */ + public function setOutput(?string $output): self + { + $this->initialized['output'] = true; + $this->output = $output; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/HostConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/HostConfig.php new file mode 100644 index 000000000..043e7cfa3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/HostConfig.php @@ -0,0 +1,2325 @@ +initialized); + } + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + * + * @var int|null + */ + protected $cpuShares; + /** + * Memory limit in bytes. + * + * @var int|null + */ + protected $memory = 0; + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + * + * @var string|null + */ + protected $cgroupParent; + /** + * Block IO weight (relative weight). + * + * @var int|null + */ + protected $blkioWeight; + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @var list|null + */ + protected $blkioWeightDevice; + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceReadBps; + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceWriteBps; + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceReadIOps; + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceWriteIOps; + /** + * The length of a CPU period in microseconds. + * + * @var int|null + */ + protected $cpuPeriod; + /** + * Microseconds of CPU time that the container can get in a CPU period. + * + * @var int|null + */ + protected $cpuQuota; + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + * + * @var int|null + */ + protected $cpuRealtimePeriod; + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + * + * @var int|null + */ + protected $cpuRealtimeRuntime; + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + * + * @var string|null + */ + protected $cpusetCpus; + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + * + * @var string|null + */ + protected $cpusetMems; + /** + * A list of devices to add to the container. + * + * @var list|null + */ + protected $devices; + /** + * a list of cgroup rules to apply to the container. + * + * @var list|null + */ + protected $deviceCgroupRules; + /** + * A list of requests for devices to be sent to device drivers. + * + * @var list|null + */ + protected $deviceRequests; + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + * + * @var int|null + */ + protected $kernelMemoryTCP; + /** + * Memory soft limit in bytes. + * + * @var int|null + */ + protected $memoryReservation; + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + * + * @var int|null + */ + protected $memorySwap; + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + * + * @var int|null + */ + protected $memorySwappiness; + /** + * CPU quota in units of 10-9 CPUs. + * + * @var int|null + */ + protected $nanoCpus; + /** + * Disable OOM Killer for the container. + * + * @var bool|null + */ + protected $oomKillDisable; + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + * + * @var bool|null + */ + protected $init; + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + * + * @var int|null + */ + protected $pidsLimit; + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @var list|null + */ + protected $ulimits; + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + * + * @var int|null + */ + protected $cpuCount; + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + * + * @var int|null + */ + protected $cpuPercent; + /** + * Maximum IOps for the container system drive (Windows only). + * + * @var int|null + */ + protected $iOMaximumIOps; + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + * + * @var int|null + */ + protected $iOMaximumBandwidth; + /** + * A list of volume bindings for this container. Each volume binding + * is a string in one of these forms: + * + * - `host-src:container-dest[:options]` to bind-mount a host path + * into the container. Both `host-src`, and `container-dest` must + * be an _absolute_ path. + * - `volume-name:container-dest[:options]` to bind-mount a volume + * managed by a volume driver into the container. `container-dest` + * must be an _absolute_ path. + * + * `options` is an optional, comma-delimited list of: + * + * - `nocopy` disables automatic copying of data from the container + * path to the volume. The `nocopy` flag only applies to named volumes. + * - `[ro|rw]` mounts a volume read-only or read-write, respectively. + * If omitted or set to `rw`, volumes are mounted read-write. + * - `[z|Z]` applies SELinux labels to allow or deny multiple containers + * to read and write to the same volume. + * - `z`: a _shared_ content label is applied to the content. This + * label indicates that multiple containers can share the volume + * content, for both reading and writing. + * - `Z`: a _private unshared_ label is applied to the content. + * This label indicates that only the current container can use + * a private volume. Labeling systems such as SELinux require + * proper labels to be placed on volume content that is mounted + * into a container. Without a label, the security system can + * prevent a container's processes from using the content. By + * default, the labels set by the host operating system are not + * modified. + * - `[[r]shared|[r]slave|[r]private]` specifies mount + * [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + * This only applies to bind-mounted volumes, not internal volumes + * or named volumes. Mount propagation requires the source mount + * point (the location where the source directory is mounted in the + * host operating system) to have the correct propagation properties. + * For shared volumes, the source mount point must be set to `shared`. + * For slave volumes, the mount must be set to either `shared` or + * `slave`. + * + * @var list|null + */ + protected $binds; + /** + * Path to a file where the container ID is written. + * + * @var string|null + */ + protected $containerIDFile; + /** + * The logging configuration for this container. + * + * @var HostConfigLogConfig|null + */ + protected $logConfig; + /** + * Network mode to use for this container. Supported standard values + * are: `bridge`, `host`, `none`, and `container:`. Any + * other value is taken as a custom network's name to which this + * container should connect to. + * + * @var string|null + */ + protected $networkMode; + /** + * PortMap describes the mapping of container ports to host ports, using the + * container's port-number and protocol as key in the format `/`, + * for example, `80/udp`. + * + * If a container's port is mapped for multiple protocols, separate entries + * are added to the mapping table. + * + * @var array>|null + */ + protected $portBindings; + /** + * The behavior to apply when the container exits. The default is not to + * restart. + * + * An ever increasing delay (double the previous delay, starting at 100ms) is + * added before each restart to prevent flooding the server. + * + * @var RestartPolicy|null + */ + protected $restartPolicy; + /** + * Automatically remove the container when the container's process + * exits. This has no effect if `RestartPolicy` is set. + * + * @var bool|null + */ + protected $autoRemove; + /** + * Driver that this container uses to mount volumes. + * + * @var string|null + */ + protected $volumeDriver; + /** + * A list of volumes to inherit from another container, specified in + * the form `[:]`. + * + * @var list|null + */ + protected $volumesFrom; + /** + * Specification for mounts to be added to the container. + * + * @var list|null + */ + protected $mounts; + /** + * Initial console size, as an `[height, width]` array. + * + * @var list|null + */ + protected $consoleSize; + /** + * Arbitrary non-identifying metadata attached to container and + * provided to the runtime when the container is started. + * + * @var array|null + */ + protected $annotations; + /** + * A list of kernel capabilities to add to the container. Conflicts + * with option 'Capabilities'. + * + * @var list|null + */ + protected $capAdd; + /** + * A list of kernel capabilities to drop from the container. Conflicts + * with option 'Capabilities'. + * + * @var list|null + */ + protected $capDrop; + /** + * cgroup namespace mode for the container. Possible values are: + * + * - `"private"`: the container runs in its own private cgroup namespace + * - `"host"`: use the host system's cgroup namespace + * + * If not specified, the daemon default is used, which can either be `"private"` + * or `"host"`, depending on daemon version, kernel support and configuration. + * + * @var string|null + */ + protected $cgroupnsMode; + /** + * A list of DNS servers for the container to use. + * + * @var list|null + */ + protected $dns; + /** + * A list of DNS options. + * + * @var list|null + */ + protected $dnsOptions; + /** + * A list of DNS search domains. + * + * @var list|null + */ + protected $dnsSearch; + /** + * A list of hostnames/IP mappings to add to the container's `/etc/hosts` + * file. Specified in the form `["hostname:IP"]`. + * + * @var list|null + */ + protected $extraHosts; + /** + * A list of additional groups that the container process will run as. + * + * @var list|null + */ + protected $groupAdd; + /** + * IPC sharing mode for the container. Possible values are: + * + * - `"none"`: own private IPC namespace, with /dev/shm not mounted + * - `"private"`: own private IPC namespace + * - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + * - `"container:"`: join another (shareable) container's IPC namespace + * - `"host"`: use the host system's IPC namespace + * + * If not specified, daemon default is used, which can either be `"private"` + * or `"shareable"`, depending on daemon version and configuration. + * + * @var string|null + */ + protected $ipcMode; + /** + * Cgroup to use for the container. + * + * @var string|null + */ + protected $cgroup; + /** + * A list of links for the container in the form `container_name:alias`. + * + * @var list|null + */ + protected $links; + /** + * An integer value containing the score given to the container in + * order to tune OOM killer preferences. + * + * @var int|null + */ + protected $oomScoreAdj; + /** + * Set the PID (Process) Namespace mode for the container. It can be + * either: + * + * - `"container:"`: joins another container's PID namespace + * - `"host"`: use the host's PID namespace inside the container + * + * @var string|null + */ + protected $pidMode; + /** + * Gives the container full access to the host. + * + * @var bool|null + */ + protected $privileged; + /** + * Allocates an ephemeral host port for all of a container's + * exposed ports. + * + * Ports are de-allocated when the container stops and allocated when + * the container starts. The allocated port might be changed when + * restarting the container. + * + * The port is selected from the ephemeral port range that depends on + * the kernel. For example, on Linux the range is defined by + * `/proc/sys/net/ipv4/ip_local_port_range`. + * + * @var bool|null + */ + protected $publishAllPorts; + /** + * Mount the container's root filesystem as read only. + * + * @var bool|null + */ + protected $readonlyRootfs; + /** + * A list of string values to customize labels for MLS systems, such + * as SELinux. + * + * @var list|null + */ + protected $securityOpt; + /** + * Storage driver options for this container, in the form `{"size": "120G"}`. + * + * @var array|null + */ + protected $storageOpt; + /** + * A map of container directories which should be replaced by tmpfs + * mounts, and their corresponding mount options. For example: + * + * ``` + * { "/run": "rw,noexec,nosuid,size=65536k" } + * ``` + * + * @var array|null + */ + protected $tmpfs; + /** + * UTS namespace to use for the container. + * + * @var string|null + */ + protected $uTSMode; + /** + * Sets the usernamespace mode for the container when usernamespace + * remapping option is enabled. + * + * @var string|null + */ + protected $usernsMode; + /** + * Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + * + * @var int|null + */ + protected $shmSize; + /** + * A list of kernel parameters (sysctls) to set in the container. + * For example: + * + * ``` + * {"net.ipv4.ip_forward": "1"} + * ``` + * + * @var array|null + */ + protected $sysctls; + /** + * Runtime to use with this container. + * + * @var string|null + */ + protected $runtime; + /** + * Isolation technology of the container. (Windows only). + * + * @var string|null + */ + protected $isolation; + /** + * The list of paths to be masked inside the container (this overrides + * the default set of paths). + * + * @var list|null + */ + protected $maskedPaths; + /** + * The list of paths to be set as read-only inside the container + * (this overrides the default set of paths). + * + * @var list|null + */ + protected $readonlyPaths; + + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + */ + public function getCpuShares(): ?int + { + return $this->cpuShares; + } + + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + */ + public function setCpuShares(?int $cpuShares): self + { + $this->initialized['cpuShares'] = true; + $this->cpuShares = $cpuShares; + + return $this; + } + + /** + * Memory limit in bytes. + */ + public function getMemory(): ?int + { + return $this->memory; + } + + /** + * Memory limit in bytes. + */ + public function setMemory(?int $memory): self + { + $this->initialized['memory'] = true; + $this->memory = $memory; + + return $this; + } + + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + */ + public function getCgroupParent(): ?string + { + return $this->cgroupParent; + } + + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + */ + public function setCgroupParent(?string $cgroupParent): self + { + $this->initialized['cgroupParent'] = true; + $this->cgroupParent = $cgroupParent; + + return $this; + } + + /** + * Block IO weight (relative weight). + */ + public function getBlkioWeight(): ?int + { + return $this->blkioWeight; + } + + /** + * Block IO weight (relative weight). + */ + public function setBlkioWeight(?int $blkioWeight): self + { + $this->initialized['blkioWeight'] = true; + $this->blkioWeight = $blkioWeight; + + return $this; + } + + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @return list|null + */ + public function getBlkioWeightDevice(): ?array + { + return $this->blkioWeightDevice; + } + + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @param list|null $blkioWeightDevice + */ + public function setBlkioWeightDevice(?array $blkioWeightDevice): self + { + $this->initialized['blkioWeightDevice'] = true; + $this->blkioWeightDevice = $blkioWeightDevice; + + return $this; + } + + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceReadBps(): ?array + { + return $this->blkioDeviceReadBps; + } + + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceReadBps + */ + public function setBlkioDeviceReadBps(?array $blkioDeviceReadBps): self + { + $this->initialized['blkioDeviceReadBps'] = true; + $this->blkioDeviceReadBps = $blkioDeviceReadBps; + + return $this; + } + + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceWriteBps(): ?array + { + return $this->blkioDeviceWriteBps; + } + + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceWriteBps + */ + public function setBlkioDeviceWriteBps(?array $blkioDeviceWriteBps): self + { + $this->initialized['blkioDeviceWriteBps'] = true; + $this->blkioDeviceWriteBps = $blkioDeviceWriteBps; + + return $this; + } + + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceReadIOps(): ?array + { + return $this->blkioDeviceReadIOps; + } + + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceReadIOps + */ + public function setBlkioDeviceReadIOps(?array $blkioDeviceReadIOps): self + { + $this->initialized['blkioDeviceReadIOps'] = true; + $this->blkioDeviceReadIOps = $blkioDeviceReadIOps; + + return $this; + } + + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceWriteIOps(): ?array + { + return $this->blkioDeviceWriteIOps; + } + + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceWriteIOps + */ + public function setBlkioDeviceWriteIOps(?array $blkioDeviceWriteIOps): self + { + $this->initialized['blkioDeviceWriteIOps'] = true; + $this->blkioDeviceWriteIOps = $blkioDeviceWriteIOps; + + return $this; + } + + /** + * The length of a CPU period in microseconds. + */ + public function getCpuPeriod(): ?int + { + return $this->cpuPeriod; + } + + /** + * The length of a CPU period in microseconds. + */ + public function setCpuPeriod(?int $cpuPeriod): self + { + $this->initialized['cpuPeriod'] = true; + $this->cpuPeriod = $cpuPeriod; + + return $this; + } + + /** + * Microseconds of CPU time that the container can get in a CPU period. + */ + public function getCpuQuota(): ?int + { + return $this->cpuQuota; + } + + /** + * Microseconds of CPU time that the container can get in a CPU period. + */ + public function setCpuQuota(?int $cpuQuota): self + { + $this->initialized['cpuQuota'] = true; + $this->cpuQuota = $cpuQuota; + + return $this; + } + + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function getCpuRealtimePeriod(): ?int + { + return $this->cpuRealtimePeriod; + } + + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function setCpuRealtimePeriod(?int $cpuRealtimePeriod): self + { + $this->initialized['cpuRealtimePeriod'] = true; + $this->cpuRealtimePeriod = $cpuRealtimePeriod; + + return $this; + } + + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function getCpuRealtimeRuntime(): ?int + { + return $this->cpuRealtimeRuntime; + } + + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function setCpuRealtimeRuntime(?int $cpuRealtimeRuntime): self + { + $this->initialized['cpuRealtimeRuntime'] = true; + $this->cpuRealtimeRuntime = $cpuRealtimeRuntime; + + return $this; + } + + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + */ + public function getCpusetCpus(): ?string + { + return $this->cpusetCpus; + } + + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + */ + public function setCpusetCpus(?string $cpusetCpus): self + { + $this->initialized['cpusetCpus'] = true; + $this->cpusetCpus = $cpusetCpus; + + return $this; + } + + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + */ + public function getCpusetMems(): ?string + { + return $this->cpusetMems; + } + + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + */ + public function setCpusetMems(?string $cpusetMems): self + { + $this->initialized['cpusetMems'] = true; + $this->cpusetMems = $cpusetMems; + + return $this; + } + + /** + * A list of devices to add to the container. + * + * @return list|null + */ + public function getDevices(): ?array + { + return $this->devices; + } + + /** + * A list of devices to add to the container. + * + * @param list|null $devices + */ + public function setDevices(?array $devices): self + { + $this->initialized['devices'] = true; + $this->devices = $devices; + + return $this; + } + + /** + * a list of cgroup rules to apply to the container. + * + * @return list|null + */ + public function getDeviceCgroupRules(): ?array + { + return $this->deviceCgroupRules; + } + + /** + * a list of cgroup rules to apply to the container. + * + * @param list|null $deviceCgroupRules + */ + public function setDeviceCgroupRules(?array $deviceCgroupRules): self + { + $this->initialized['deviceCgroupRules'] = true; + $this->deviceCgroupRules = $deviceCgroupRules; + + return $this; + } + + /** + * A list of requests for devices to be sent to device drivers. + * + * @return list|null + */ + public function getDeviceRequests(): ?array + { + return $this->deviceRequests; + } + + /** + * A list of requests for devices to be sent to device drivers. + * + * @param list|null $deviceRequests + */ + public function setDeviceRequests(?array $deviceRequests): self + { + $this->initialized['deviceRequests'] = true; + $this->deviceRequests = $deviceRequests; + + return $this; + } + + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + */ + public function getKernelMemoryTCP(): ?int + { + return $this->kernelMemoryTCP; + } + + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + */ + public function setKernelMemoryTCP(?int $kernelMemoryTCP): self + { + $this->initialized['kernelMemoryTCP'] = true; + $this->kernelMemoryTCP = $kernelMemoryTCP; + + return $this; + } + + /** + * Memory soft limit in bytes. + */ + public function getMemoryReservation(): ?int + { + return $this->memoryReservation; + } + + /** + * Memory soft limit in bytes. + */ + public function setMemoryReservation(?int $memoryReservation): self + { + $this->initialized['memoryReservation'] = true; + $this->memoryReservation = $memoryReservation; + + return $this; + } + + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + */ + public function getMemorySwap(): ?int + { + return $this->memorySwap; + } + + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + */ + public function setMemorySwap(?int $memorySwap): self + { + $this->initialized['memorySwap'] = true; + $this->memorySwap = $memorySwap; + + return $this; + } + + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + */ + public function getMemorySwappiness(): ?int + { + return $this->memorySwappiness; + } + + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + */ + public function setMemorySwappiness(?int $memorySwappiness): self + { + $this->initialized['memorySwappiness'] = true; + $this->memorySwappiness = $memorySwappiness; + + return $this; + } + + /** + * CPU quota in units of 10-9 CPUs. + */ + public function getNanoCpus(): ?int + { + return $this->nanoCpus; + } + + /** + * CPU quota in units of 10-9 CPUs. + */ + public function setNanoCpus(?int $nanoCpus): self + { + $this->initialized['nanoCpus'] = true; + $this->nanoCpus = $nanoCpus; + + return $this; + } + + /** + * Disable OOM Killer for the container. + */ + public function getOomKillDisable(): ?bool + { + return $this->oomKillDisable; + } + + /** + * Disable OOM Killer for the container. + */ + public function setOomKillDisable(?bool $oomKillDisable): self + { + $this->initialized['oomKillDisable'] = true; + $this->oomKillDisable = $oomKillDisable; + + return $this; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function getInit(): ?bool + { + return $this->init; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function setInit(?bool $init): self + { + $this->initialized['init'] = true; + $this->init = $init; + + return $this; + } + + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + */ + public function getPidsLimit(): ?int + { + return $this->pidsLimit; + } + + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + */ + public function setPidsLimit(?int $pidsLimit): self + { + $this->initialized['pidsLimit'] = true; + $this->pidsLimit = $pidsLimit; + + return $this; + } + + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @return list|null + */ + public function getUlimits(): ?array + { + return $this->ulimits; + } + + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @param list|null $ulimits + */ + public function setUlimits(?array $ulimits): self + { + $this->initialized['ulimits'] = true; + $this->ulimits = $ulimits; + + return $this; + } + + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function getCpuCount(): ?int + { + return $this->cpuCount; + } + + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function setCpuCount(?int $cpuCount): self + { + $this->initialized['cpuCount'] = true; + $this->cpuCount = $cpuCount; + + return $this; + } + + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function getCpuPercent(): ?int + { + return $this->cpuPercent; + } + + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function setCpuPercent(?int $cpuPercent): self + { + $this->initialized['cpuPercent'] = true; + $this->cpuPercent = $cpuPercent; + + return $this; + } + + /** + * Maximum IOps for the container system drive (Windows only). + */ + public function getIOMaximumIOps(): ?int + { + return $this->iOMaximumIOps; + } + + /** + * Maximum IOps for the container system drive (Windows only). + */ + public function setIOMaximumIOps(?int $iOMaximumIOps): self + { + $this->initialized['iOMaximumIOps'] = true; + $this->iOMaximumIOps = $iOMaximumIOps; + + return $this; + } + + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + */ + public function getIOMaximumBandwidth(): ?int + { + return $this->iOMaximumBandwidth; + } + + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + */ + public function setIOMaximumBandwidth(?int $iOMaximumBandwidth): self + { + $this->initialized['iOMaximumBandwidth'] = true; + $this->iOMaximumBandwidth = $iOMaximumBandwidth; + + return $this; + } + + /** + * A list of volume bindings for this container. Each volume binding + * is a string in one of these forms: + * + * - `host-src:container-dest[:options]` to bind-mount a host path + * into the container. Both `host-src`, and `container-dest` must + * be an _absolute_ path. + * - `volume-name:container-dest[:options]` to bind-mount a volume + * managed by a volume driver into the container. `container-dest` + * must be an _absolute_ path. + * + * `options` is an optional, comma-delimited list of: + * + * - `nocopy` disables automatic copying of data from the container + * path to the volume. The `nocopy` flag only applies to named volumes. + * - `[ro|rw]` mounts a volume read-only or read-write, respectively. + * If omitted or set to `rw`, volumes are mounted read-write. + * - `[z|Z]` applies SELinux labels to allow or deny multiple containers + * to read and write to the same volume. + * - `z`: a _shared_ content label is applied to the content. This + * label indicates that multiple containers can share the volume + * content, for both reading and writing. + * - `Z`: a _private unshared_ label is applied to the content. + * This label indicates that only the current container can use + * a private volume. Labeling systems such as SELinux require + * proper labels to be placed on volume content that is mounted + * into a container. Without a label, the security system can + * prevent a container's processes from using the content. By + * default, the labels set by the host operating system are not + * modified. + * - `[[r]shared|[r]slave|[r]private]` specifies mount + * [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + * This only applies to bind-mounted volumes, not internal volumes + * or named volumes. Mount propagation requires the source mount + * point (the location where the source directory is mounted in the + * host operating system) to have the correct propagation properties. + * For shared volumes, the source mount point must be set to `shared`. + * For slave volumes, the mount must be set to either `shared` or + * `slave`. + * + * @return list|null + */ + public function getBinds(): ?array + { + return $this->binds; + } + + /** + * A list of volume bindings for this container. Each volume binding + * is a string in one of these forms: + * + * - `host-src:container-dest[:options]` to bind-mount a host path + * into the container. Both `host-src`, and `container-dest` must + * be an _absolute_ path. + * - `volume-name:container-dest[:options]` to bind-mount a volume + * managed by a volume driver into the container. `container-dest` + * must be an _absolute_ path. + * + * `options` is an optional, comma-delimited list of: + * + * - `nocopy` disables automatic copying of data from the container + * path to the volume. The `nocopy` flag only applies to named volumes. + * - `[ro|rw]` mounts a volume read-only or read-write, respectively. + * If omitted or set to `rw`, volumes are mounted read-write. + * - `[z|Z]` applies SELinux labels to allow or deny multiple containers + * to read and write to the same volume. + * - `z`: a _shared_ content label is applied to the content. This + * label indicates that multiple containers can share the volume + * content, for both reading and writing. + * - `Z`: a _private unshared_ label is applied to the content. + * This label indicates that only the current container can use + * a private volume. Labeling systems such as SELinux require + * proper labels to be placed on volume content that is mounted + * into a container. Without a label, the security system can + * prevent a container's processes from using the content. By + * default, the labels set by the host operating system are not + * modified. + * - `[[r]shared|[r]slave|[r]private]` specifies mount + * [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + * This only applies to bind-mounted volumes, not internal volumes + * or named volumes. Mount propagation requires the source mount + * point (the location where the source directory is mounted in the + * host operating system) to have the correct propagation properties. + * For shared volumes, the source mount point must be set to `shared`. + * For slave volumes, the mount must be set to either `shared` or + * `slave`. + * + * @param list|null $binds + */ + public function setBinds(?array $binds): self + { + $this->initialized['binds'] = true; + $this->binds = $binds; + + return $this; + } + + /** + * Path to a file where the container ID is written. + */ + public function getContainerIDFile(): ?string + { + return $this->containerIDFile; + } + + /** + * Path to a file where the container ID is written. + */ + public function setContainerIDFile(?string $containerIDFile): self + { + $this->initialized['containerIDFile'] = true; + $this->containerIDFile = $containerIDFile; + + return $this; + } + + /** + * The logging configuration for this container. + */ + public function getLogConfig(): ?HostConfigLogConfig + { + return $this->logConfig; + } + + /** + * The logging configuration for this container. + */ + public function setLogConfig(?HostConfigLogConfig $logConfig): self + { + $this->initialized['logConfig'] = true; + $this->logConfig = $logConfig; + + return $this; + } + + /** + * Network mode to use for this container. Supported standard values + * are: `bridge`, `host`, `none`, and `container:`. Any + * other value is taken as a custom network's name to which this + * container should connect to. + */ + public function getNetworkMode(): ?string + { + return $this->networkMode; + } + + /** + * Network mode to use for this container. Supported standard values + * are: `bridge`, `host`, `none`, and `container:`. Any + * other value is taken as a custom network's name to which this + * container should connect to. + */ + public function setNetworkMode(?string $networkMode): self + { + $this->initialized['networkMode'] = true; + $this->networkMode = $networkMode; + + return $this; + } + + /** + * PortMap describes the mapping of container ports to host ports, using the + * container's port-number and protocol as key in the format `/`, + * for example, `80/udp`. + * + * If a container's port is mapped for multiple protocols, separate entries + * are added to the mapping table. + * + * @return array>|null + */ + public function getPortBindings(): ?iterable + { + return $this->portBindings; + } + + /** + * PortMap describes the mapping of container ports to host ports, using the + * container's port-number and protocol as key in the format `/`, + * for example, `80/udp`. + * + * If a container's port is mapped for multiple protocols, separate entries + * are added to the mapping table. + * + * @param array>|null $portBindings + */ + public function setPortBindings(?iterable $portBindings): self + { + $this->initialized['portBindings'] = true; + $this->portBindings = $portBindings; + + return $this; + } + + /** + * The behavior to apply when the container exits. The default is not to + * restart. + * + * An ever increasing delay (double the previous delay, starting at 100ms) is + * added before each restart to prevent flooding the server. + */ + public function getRestartPolicy(): ?RestartPolicy + { + return $this->restartPolicy; + } + + /** + * The behavior to apply when the container exits. The default is not to + * restart. + * + * An ever increasing delay (double the previous delay, starting at 100ms) is + * added before each restart to prevent flooding the server. + */ + public function setRestartPolicy(?RestartPolicy $restartPolicy): self + { + $this->initialized['restartPolicy'] = true; + $this->restartPolicy = $restartPolicy; + + return $this; + } + + /** + * Automatically remove the container when the container's process + * exits. This has no effect if `RestartPolicy` is set. + */ + public function getAutoRemove(): ?bool + { + return $this->autoRemove; + } + + /** + * Automatically remove the container when the container's process + * exits. This has no effect if `RestartPolicy` is set. + */ + public function setAutoRemove(?bool $autoRemove): self + { + $this->initialized['autoRemove'] = true; + $this->autoRemove = $autoRemove; + + return $this; + } + + /** + * Driver that this container uses to mount volumes. + */ + public function getVolumeDriver(): ?string + { + return $this->volumeDriver; + } + + /** + * Driver that this container uses to mount volumes. + */ + public function setVolumeDriver(?string $volumeDriver): self + { + $this->initialized['volumeDriver'] = true; + $this->volumeDriver = $volumeDriver; + + return $this; + } + + /** + * A list of volumes to inherit from another container, specified in + * the form `[:]`. + * + * @return list|null + */ + public function getVolumesFrom(): ?array + { + return $this->volumesFrom; + } + + /** + * A list of volumes to inherit from another container, specified in + * the form `[:]`. + * + * @param list|null $volumesFrom + */ + public function setVolumesFrom(?array $volumesFrom): self + { + $this->initialized['volumesFrom'] = true; + $this->volumesFrom = $volumesFrom; + + return $this; + } + + /** + * Specification for mounts to be added to the container. + * + * @return list|null + */ + public function getMounts(): ?array + { + return $this->mounts; + } + + /** + * Specification for mounts to be added to the container. + * + * @param list|null $mounts + */ + public function setMounts(?array $mounts): self + { + $this->initialized['mounts'] = true; + $this->mounts = $mounts; + + return $this; + } + + /** + * Initial console size, as an `[height, width]` array. + * + * @return list|null + */ + public function getConsoleSize(): ?array + { + return $this->consoleSize; + } + + /** + * Initial console size, as an `[height, width]` array. + * + * @param list|null $consoleSize + */ + public function setConsoleSize(?array $consoleSize): self + { + $this->initialized['consoleSize'] = true; + $this->consoleSize = $consoleSize; + + return $this; + } + + /** + * Arbitrary non-identifying metadata attached to container and + * provided to the runtime when the container is started. + * + * @return array|null + */ + public function getAnnotations(): ?iterable + { + return $this->annotations; + } + + /** + * Arbitrary non-identifying metadata attached to container and + * provided to the runtime when the container is started. + * + * @param array|null $annotations + */ + public function setAnnotations(?iterable $annotations): self + { + $this->initialized['annotations'] = true; + $this->annotations = $annotations; + + return $this; + } + + /** + * A list of kernel capabilities to add to the container. Conflicts + * with option 'Capabilities'. + * + * @return list|null + */ + public function getCapAdd(): ?array + { + return $this->capAdd; + } + + /** + * A list of kernel capabilities to add to the container. Conflicts + * with option 'Capabilities'. + * + * @param list|null $capAdd + */ + public function setCapAdd(?array $capAdd): self + { + $this->initialized['capAdd'] = true; + $this->capAdd = $capAdd; + + return $this; + } + + /** + * A list of kernel capabilities to drop from the container. Conflicts + * with option 'Capabilities'. + * + * @return list|null + */ + public function getCapDrop(): ?array + { + return $this->capDrop; + } + + /** + * A list of kernel capabilities to drop from the container. Conflicts + * with option 'Capabilities'. + * + * @param list|null $capDrop + */ + public function setCapDrop(?array $capDrop): self + { + $this->initialized['capDrop'] = true; + $this->capDrop = $capDrop; + + return $this; + } + + /** + * cgroup namespace mode for the container. Possible values are: + * + * - `"private"`: the container runs in its own private cgroup namespace + * - `"host"`: use the host system's cgroup namespace + * + * If not specified, the daemon default is used, which can either be `"private"` + * or `"host"`, depending on daemon version, kernel support and configuration. + */ + public function getCgroupnsMode(): ?string + { + return $this->cgroupnsMode; + } + + /** + * cgroup namespace mode for the container. Possible values are: + * + * - `"private"`: the container runs in its own private cgroup namespace + * - `"host"`: use the host system's cgroup namespace + * + * If not specified, the daemon default is used, which can either be `"private"` + * or `"host"`, depending on daemon version, kernel support and configuration. + */ + public function setCgroupnsMode(?string $cgroupnsMode): self + { + $this->initialized['cgroupnsMode'] = true; + $this->cgroupnsMode = $cgroupnsMode; + + return $this; + } + + /** + * A list of DNS servers for the container to use. + * + * @return list|null + */ + public function getDns(): ?array + { + return $this->dns; + } + + /** + * A list of DNS servers for the container to use. + * + * @param list|null $dns + */ + public function setDns(?array $dns): self + { + $this->initialized['dns'] = true; + $this->dns = $dns; + + return $this; + } + + /** + * A list of DNS options. + * + * @return list|null + */ + public function getDnsOptions(): ?array + { + return $this->dnsOptions; + } + + /** + * A list of DNS options. + * + * @param list|null $dnsOptions + */ + public function setDnsOptions(?array $dnsOptions): self + { + $this->initialized['dnsOptions'] = true; + $this->dnsOptions = $dnsOptions; + + return $this; + } + + /** + * A list of DNS search domains. + * + * @return list|null + */ + public function getDnsSearch(): ?array + { + return $this->dnsSearch; + } + + /** + * A list of DNS search domains. + * + * @param list|null $dnsSearch + */ + public function setDnsSearch(?array $dnsSearch): self + { + $this->initialized['dnsSearch'] = true; + $this->dnsSearch = $dnsSearch; + + return $this; + } + + /** + * A list of hostnames/IP mappings to add to the container's `/etc/hosts` + * file. Specified in the form `["hostname:IP"]`. + * + * @return list|null + */ + public function getExtraHosts(): ?array + { + return $this->extraHosts; + } + + /** + * A list of hostnames/IP mappings to add to the container's `/etc/hosts` + * file. Specified in the form `["hostname:IP"]`. + * + * @param list|null $extraHosts + */ + public function setExtraHosts(?array $extraHosts): self + { + $this->initialized['extraHosts'] = true; + $this->extraHosts = $extraHosts; + + return $this; + } + + /** + * A list of additional groups that the container process will run as. + * + * @return list|null + */ + public function getGroupAdd(): ?array + { + return $this->groupAdd; + } + + /** + * A list of additional groups that the container process will run as. + * + * @param list|null $groupAdd + */ + public function setGroupAdd(?array $groupAdd): self + { + $this->initialized['groupAdd'] = true; + $this->groupAdd = $groupAdd; + + return $this; + } + + /** + * IPC sharing mode for the container. Possible values are: + * + * - `"none"`: own private IPC namespace, with /dev/shm not mounted + * - `"private"`: own private IPC namespace + * - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + * - `"container:"`: join another (shareable) container's IPC namespace + * - `"host"`: use the host system's IPC namespace + * + * If not specified, daemon default is used, which can either be `"private"` + * or `"shareable"`, depending on daemon version and configuration. + */ + public function getIpcMode(): ?string + { + return $this->ipcMode; + } + + /** + * IPC sharing mode for the container. Possible values are: + * + * - `"none"`: own private IPC namespace, with /dev/shm not mounted + * - `"private"`: own private IPC namespace + * - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + * - `"container:"`: join another (shareable) container's IPC namespace + * - `"host"`: use the host system's IPC namespace + * + * If not specified, daemon default is used, which can either be `"private"` + * or `"shareable"`, depending on daemon version and configuration. + */ + public function setIpcMode(?string $ipcMode): self + { + $this->initialized['ipcMode'] = true; + $this->ipcMode = $ipcMode; + + return $this; + } + + /** + * Cgroup to use for the container. + */ + public function getCgroup(): ?string + { + return $this->cgroup; + } + + /** + * Cgroup to use for the container. + */ + public function setCgroup(?string $cgroup): self + { + $this->initialized['cgroup'] = true; + $this->cgroup = $cgroup; + + return $this; + } + + /** + * A list of links for the container in the form `container_name:alias`. + * + * @return list|null + */ + public function getLinks(): ?array + { + return $this->links; + } + + /** + * A list of links for the container in the form `container_name:alias`. + * + * @param list|null $links + */ + public function setLinks(?array $links): self + { + $this->initialized['links'] = true; + $this->links = $links; + + return $this; + } + + /** + * An integer value containing the score given to the container in + * order to tune OOM killer preferences. + */ + public function getOomScoreAdj(): ?int + { + return $this->oomScoreAdj; + } + + /** + * An integer value containing the score given to the container in + * order to tune OOM killer preferences. + */ + public function setOomScoreAdj(?int $oomScoreAdj): self + { + $this->initialized['oomScoreAdj'] = true; + $this->oomScoreAdj = $oomScoreAdj; + + return $this; + } + + /** + * Set the PID (Process) Namespace mode for the container. It can be + * either: + * + * - `"container:"`: joins another container's PID namespace + * - `"host"`: use the host's PID namespace inside the container + */ + public function getPidMode(): ?string + { + return $this->pidMode; + } + + /** + * Set the PID (Process) Namespace mode for the container. It can be + * either: + * + * - `"container:"`: joins another container's PID namespace + * - `"host"`: use the host's PID namespace inside the container + */ + public function setPidMode(?string $pidMode): self + { + $this->initialized['pidMode'] = true; + $this->pidMode = $pidMode; + + return $this; + } + + /** + * Gives the container full access to the host. + */ + public function getPrivileged(): ?bool + { + return $this->privileged; + } + + /** + * Gives the container full access to the host. + */ + public function setPrivileged(?bool $privileged): self + { + $this->initialized['privileged'] = true; + $this->privileged = $privileged; + + return $this; + } + + /** + * Allocates an ephemeral host port for all of a container's + * exposed ports. + * + * Ports are de-allocated when the container stops and allocated when + * the container starts. The allocated port might be changed when + * restarting the container. + * + * The port is selected from the ephemeral port range that depends on + * the kernel. For example, on Linux the range is defined by + * `/proc/sys/net/ipv4/ip_local_port_range`. + */ + public function getPublishAllPorts(): ?bool + { + return $this->publishAllPorts; + } + + /** + * Allocates an ephemeral host port for all of a container's + * exposed ports. + * + * Ports are de-allocated when the container stops and allocated when + * the container starts. The allocated port might be changed when + * restarting the container. + * + * The port is selected from the ephemeral port range that depends on + * the kernel. For example, on Linux the range is defined by + * `/proc/sys/net/ipv4/ip_local_port_range`. + */ + public function setPublishAllPorts(?bool $publishAllPorts): self + { + $this->initialized['publishAllPorts'] = true; + $this->publishAllPorts = $publishAllPorts; + + return $this; + } + + /** + * Mount the container's root filesystem as read only. + */ + public function getReadonlyRootfs(): ?bool + { + return $this->readonlyRootfs; + } + + /** + * Mount the container's root filesystem as read only. + */ + public function setReadonlyRootfs(?bool $readonlyRootfs): self + { + $this->initialized['readonlyRootfs'] = true; + $this->readonlyRootfs = $readonlyRootfs; + + return $this; + } + + /** + * A list of string values to customize labels for MLS systems, such + * as SELinux. + * + * @return list|null + */ + public function getSecurityOpt(): ?array + { + return $this->securityOpt; + } + + /** + * A list of string values to customize labels for MLS systems, such + * as SELinux. + * + * @param list|null $securityOpt + */ + public function setSecurityOpt(?array $securityOpt): self + { + $this->initialized['securityOpt'] = true; + $this->securityOpt = $securityOpt; + + return $this; + } + + /** + * Storage driver options for this container, in the form `{"size": "120G"}`. + * + * @return array|null + */ + public function getStorageOpt(): ?iterable + { + return $this->storageOpt; + } + + /** + * Storage driver options for this container, in the form `{"size": "120G"}`. + * + * @param array|null $storageOpt + */ + public function setStorageOpt(?iterable $storageOpt): self + { + $this->initialized['storageOpt'] = true; + $this->storageOpt = $storageOpt; + + return $this; + } + + /** + * A map of container directories which should be replaced by tmpfs + * mounts, and their corresponding mount options. For example: + * + * ``` + * { "/run": "rw,noexec,nosuid,size=65536k" } + * ``` + * + * @return array|null + */ + public function getTmpfs(): ?iterable + { + return $this->tmpfs; + } + + /** + * A map of container directories which should be replaced by tmpfs + * mounts, and their corresponding mount options. For example: + * + * ``` + * { "/run": "rw,noexec,nosuid,size=65536k" } + * ``` + * + * @param array|null $tmpfs + */ + public function setTmpfs(?iterable $tmpfs): self + { + $this->initialized['tmpfs'] = true; + $this->tmpfs = $tmpfs; + + return $this; + } + + /** + * UTS namespace to use for the container. + */ + public function getUTSMode(): ?string + { + return $this->uTSMode; + } + + /** + * UTS namespace to use for the container. + */ + public function setUTSMode(?string $uTSMode): self + { + $this->initialized['uTSMode'] = true; + $this->uTSMode = $uTSMode; + + return $this; + } + + /** + * Sets the usernamespace mode for the container when usernamespace + * remapping option is enabled. + */ + public function getUsernsMode(): ?string + { + return $this->usernsMode; + } + + /** + * Sets the usernamespace mode for the container when usernamespace + * remapping option is enabled. + */ + public function setUsernsMode(?string $usernsMode): self + { + $this->initialized['usernsMode'] = true; + $this->usernsMode = $usernsMode; + + return $this; + } + + /** + * Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + */ + public function getShmSize(): ?int + { + return $this->shmSize; + } + + /** + * Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + */ + public function setShmSize(?int $shmSize): self + { + $this->initialized['shmSize'] = true; + $this->shmSize = $shmSize; + + return $this; + } + + /** + * A list of kernel parameters (sysctls) to set in the container. + * For example: + * + * ``` + * {"net.ipv4.ip_forward": "1"} + * ``` + * + * @return array|null + */ + public function getSysctls(): ?iterable + { + return $this->sysctls; + } + + /** + * A list of kernel parameters (sysctls) to set in the container. + * For example: + * + * ``` + * {"net.ipv4.ip_forward": "1"} + * ``` + * + * @param array|null $sysctls + */ + public function setSysctls(?iterable $sysctls): self + { + $this->initialized['sysctls'] = true; + $this->sysctls = $sysctls; + + return $this; + } + + /** + * Runtime to use with this container. + */ + public function getRuntime(): ?string + { + return $this->runtime; + } + + /** + * Runtime to use with this container. + */ + public function setRuntime(?string $runtime): self + { + $this->initialized['runtime'] = true; + $this->runtime = $runtime; + + return $this; + } + + /** + * Isolation technology of the container. (Windows only). + */ + public function getIsolation(): ?string + { + return $this->isolation; + } + + /** + * Isolation technology of the container. (Windows only). + */ + public function setIsolation(?string $isolation): self + { + $this->initialized['isolation'] = true; + $this->isolation = $isolation; + + return $this; + } + + /** + * The list of paths to be masked inside the container (this overrides + * the default set of paths). + * + * @return list|null + */ + public function getMaskedPaths(): ?array + { + return $this->maskedPaths; + } + + /** + * The list of paths to be masked inside the container (this overrides + * the default set of paths). + * + * @param list|null $maskedPaths + */ + public function setMaskedPaths(?array $maskedPaths): self + { + $this->initialized['maskedPaths'] = true; + $this->maskedPaths = $maskedPaths; + + return $this; + } + + /** + * The list of paths to be set as read-only inside the container + * (this overrides the default set of paths). + * + * @return list|null + */ + public function getReadonlyPaths(): ?array + { + return $this->readonlyPaths; + } + + /** + * The list of paths to be set as read-only inside the container + * (this overrides the default set of paths). + * + * @param list|null $readonlyPaths + */ + public function setReadonlyPaths(?array $readonlyPaths): self + { + $this->initialized['readonlyPaths'] = true; + $this->readonlyPaths = $readonlyPaths; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/HostConfigLogConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/HostConfigLogConfig.php new file mode 100644 index 000000000..c6ac50dfe --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/HostConfigLogConfig.php @@ -0,0 +1,58 @@ +initialized); + } + /** + * @var string|null + */ + protected $type; + /** + * @var array|null + */ + protected $config; + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * @return array|null + */ + public function getConfig(): ?iterable + { + return $this->config; + } + + /** + * @param array|null $config + */ + public function setConfig(?iterable $config): self + { + $this->initialized['config'] = true; + $this->config = $config; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/IPAM.php b/app/vendor/beluga-php/docker-php-api/src/Model/IPAM.php new file mode 100644 index 000000000..668daa2bc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/IPAM.php @@ -0,0 +1,113 @@ +initialized); + } + /** + * Name of the IPAM driver to use. + * + * @var string|null + */ + protected $driver = 'default'; + /** + * List of IPAM configuration options, specified as a map: + * + * ``` + * {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + * ``` + * + * @var list|null + */ + protected $config; + /** + * Driver-specific options, specified as a map. + * + * @var array|null + */ + protected $options; + + /** + * Name of the IPAM driver to use. + */ + public function getDriver(): ?string + { + return $this->driver; + } + + /** + * Name of the IPAM driver to use. + */ + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * List of IPAM configuration options, specified as a map: + * + * ``` + * {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + * ``` + * + * @return list|null + */ + public function getConfig(): ?array + { + return $this->config; + } + + /** + * List of IPAM configuration options, specified as a map: + * + * ``` + * {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + * ``` + * + * @param list|null $config + */ + public function setConfig(?array $config): self + { + $this->initialized['config'] = true; + $this->config = $config; + + return $this; + } + + /** + * Driver-specific options, specified as a map. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * Driver-specific options, specified as a map. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/IPAMConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/IPAMConfig.php new file mode 100644 index 000000000..f231a366f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/IPAMConfig.php @@ -0,0 +1,92 @@ +initialized); + } + /** + * @var string|null + */ + protected $subnet; + /** + * @var string|null + */ + protected $iPRange; + /** + * @var string|null + */ + protected $gateway; + /** + * @var array|null + */ + protected $auxiliaryAddresses; + + public function getSubnet(): ?string + { + return $this->subnet; + } + + public function setSubnet(?string $subnet): self + { + $this->initialized['subnet'] = true; + $this->subnet = $subnet; + + return $this; + } + + public function getIPRange(): ?string + { + return $this->iPRange; + } + + public function setIPRange(?string $iPRange): self + { + $this->initialized['iPRange'] = true; + $this->iPRange = $iPRange; + + return $this; + } + + public function getGateway(): ?string + { + return $this->gateway; + } + + public function setGateway(?string $gateway): self + { + $this->initialized['gateway'] = true; + $this->gateway = $gateway; + + return $this; + } + + /** + * @return array|null + */ + public function getAuxiliaryAddresses(): ?iterable + { + return $this->auxiliaryAddresses; + } + + /** + * @param array|null $auxiliaryAddresses + */ + public function setAuxiliaryAddresses(?iterable $auxiliaryAddresses): self + { + $this->initialized['auxiliaryAddresses'] = true; + $this->auxiliaryAddresses = $auxiliaryAddresses; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/IdResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/IdResponse.php new file mode 100644 index 000000000..6abf667cb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/IdResponse.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * The id of the newly created object. + * + * @var string|null + */ + protected $id; + + /** + * The id of the newly created object. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * The id of the newly created object. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImageDeleteResponseItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImageDeleteResponseItem.php new file mode 100644 index 000000000..145425141 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImageDeleteResponseItem.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The image ID of an image that was untagged. + * + * @var string|null + */ + protected $untagged; + /** + * The image ID of an image that was deleted. + * + * @var string|null + */ + protected $deleted; + + /** + * The image ID of an image that was untagged. + */ + public function getUntagged(): ?string + { + return $this->untagged; + } + + /** + * The image ID of an image that was untagged. + */ + public function setUntagged(?string $untagged): self + { + $this->initialized['untagged'] = true; + $this->untagged = $untagged; + + return $this; + } + + /** + * The image ID of an image that was deleted. + */ + public function getDeleted(): ?string + { + return $this->deleted; + } + + /** + * The image ID of an image that was deleted. + */ + public function setDeleted(?string $deleted): self + { + $this->initialized['deleted'] = true; + $this->deleted = $deleted; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImageID.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImageID.php new file mode 100644 index 000000000..21c4511cf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImageID.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var string|null + */ + protected $iD; + + public function getID(): ?string + { + return $this->iD; + } + + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspect.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspect.php new file mode 100644 index 000000000..ad16df128 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspect.php @@ -0,0 +1,685 @@ +initialized); + } + /** + * ID is the content-addressable ID of an image. + * + * This identifier is a content-addressable digest calculated from the + * image's configuration (which includes the digests of layers used by + * the image). + * + * Note that this digest differs from the `RepoDigests` below, which + * holds digests of image manifests that reference the image. + * + * @var string|null + */ + protected $id; + /** + * List of image names/tags in the local image cache that reference this + * image. + * + * Multiple image tags can refer to the same image, and this list may be + * empty if no tags reference the image, in which case the image is + * "untagged", in which case it can still be referenced by its ID. + * + * @var list|null + */ + protected $repoTags; + /** + * List of content-addressable digests of locally available image manifests + * that the image is referenced from. Multiple manifests can refer to the + * same image. + * + * These digests are usually only available if the image was either pulled + * from a registry, or if the image was pushed to a registry, which is when + * the manifest is generated and its digest calculated. + * + * @var list|null + */ + protected $repoDigests; + /** + * ID of the parent image. + * + * Depending on how the image was created, this field may be empty and + * is only set for images that were built/created locally. This field + * is empty if the image was pulled from an image registry. + * + * @var string|null + */ + protected $parent; + /** + * Optional message that was set when committing or importing the image. + * + * @var string|null + */ + protected $comment; + /** + * Date and time at which the image was created, formatted in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * This information is only available if present in the image, + * and omitted otherwise. + * + * @var string|null + */ + protected $created; + /** + * The ID of the container that was used to create the image. + * + * Depending on how the image was created, this field may be empty. + * + **Deprecated**: this field is kept for backward compatibility, but + * will be removed in API v1.45. + * + * @var string|null + */ + protected $container; + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + * + * @var ContainerConfig|null + */ + protected $containerConfig; + /** + * The version of Docker that was used to build the image. + * + * Depending on how the image was created, this field may be empty. + * + * @var string|null + */ + protected $dockerVersion; + /** + * Name of the author that was specified when committing the image, or as + * specified through MAINTAINER (deprecated) in the Dockerfile. + * + * @var string|null + */ + protected $author; + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + * + * @var ContainerConfig|null + */ + protected $config; + /** + * Hardware CPU architecture that the image runs on. + * + * @var string|null + */ + protected $architecture; + /** + * CPU architecture variant (presently ARM-only). + * + * @var string|null + */ + protected $variant; + /** + * Operating System the image is built to run on. + * + * @var string|null + */ + protected $os; + /** + * Operating System version the image is built to run on (especially + * for Windows). + * + * @var string|null + */ + protected $osVersion; + /** + * Total size of the image including all layers it is composed of. + * + * @var int|null + */ + protected $size; + /** + * Total size of the image including all layers it is composed of. + * + * Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + * + * @var int|null + */ + protected $virtualSize; + /** + * Information about the storage driver used to store the container's and + * image's filesystem. + * + * @var GraphDriverData|null + */ + protected $graphDriver; + /** + * Information about the image's RootFS, including the layer IDs. + * + * @var ImageInspectRootFS|null + */ + protected $rootFS; + /** + * Additional metadata of the image in the local cache. This information + * is local to the daemon, and not part of the image itself. + * + * @var ImageInspectMetadata|null + */ + protected $metadata; + + /** + * ID is the content-addressable ID of an image. + * + * This identifier is a content-addressable digest calculated from the + * image's configuration (which includes the digests of layers used by + * the image). + * + * Note that this digest differs from the `RepoDigests` below, which + * holds digests of image manifests that reference the image. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * ID is the content-addressable ID of an image. + * + * This identifier is a content-addressable digest calculated from the + * image's configuration (which includes the digests of layers used by + * the image). + * + * Note that this digest differs from the `RepoDigests` below, which + * holds digests of image manifests that reference the image. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + /** + * List of image names/tags in the local image cache that reference this + * image. + * + * Multiple image tags can refer to the same image, and this list may be + * empty if no tags reference the image, in which case the image is + * "untagged", in which case it can still be referenced by its ID. + * + * @return list|null + */ + public function getRepoTags(): ?array + { + return $this->repoTags; + } + + /** + * List of image names/tags in the local image cache that reference this + * image. + * + * Multiple image tags can refer to the same image, and this list may be + * empty if no tags reference the image, in which case the image is + * "untagged", in which case it can still be referenced by its ID. + * + * @param list|null $repoTags + */ + public function setRepoTags(?array $repoTags): self + { + $this->initialized['repoTags'] = true; + $this->repoTags = $repoTags; + + return $this; + } + + /** + * List of content-addressable digests of locally available image manifests + * that the image is referenced from. Multiple manifests can refer to the + * same image. + * + * These digests are usually only available if the image was either pulled + * from a registry, or if the image was pushed to a registry, which is when + * the manifest is generated and its digest calculated. + * + * @return list|null + */ + public function getRepoDigests(): ?array + { + return $this->repoDigests; + } + + /** + * List of content-addressable digests of locally available image manifests + * that the image is referenced from. Multiple manifests can refer to the + * same image. + * + * These digests are usually only available if the image was either pulled + * from a registry, or if the image was pushed to a registry, which is when + * the manifest is generated and its digest calculated. + * + * @param list|null $repoDigests + */ + public function setRepoDigests(?array $repoDigests): self + { + $this->initialized['repoDigests'] = true; + $this->repoDigests = $repoDigests; + + return $this; + } + + /** + * ID of the parent image. + * + * Depending on how the image was created, this field may be empty and + * is only set for images that were built/created locally. This field + * is empty if the image was pulled from an image registry. + */ + public function getParent(): ?string + { + return $this->parent; + } + + /** + * ID of the parent image. + * + * Depending on how the image was created, this field may be empty and + * is only set for images that were built/created locally. This field + * is empty if the image was pulled from an image registry. + */ + public function setParent(?string $parent): self + { + $this->initialized['parent'] = true; + $this->parent = $parent; + + return $this; + } + + /** + * Optional message that was set when committing or importing the image. + */ + public function getComment(): ?string + { + return $this->comment; + } + + /** + * Optional message that was set when committing or importing the image. + */ + public function setComment(?string $comment): self + { + $this->initialized['comment'] = true; + $this->comment = $comment; + + return $this; + } + + /** + * Date and time at which the image was created, formatted in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * This information is only available if present in the image, + * and omitted otherwise. + */ + public function getCreated(): ?string + { + return $this->created; + } + + /** + * Date and time at which the image was created, formatted in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * This information is only available if present in the image, + * and omitted otherwise. + */ + public function setCreated(?string $created): self + { + $this->initialized['created'] = true; + $this->created = $created; + + return $this; + } + + /** + * The ID of the container that was used to create the image. + * + * Depending on how the image was created, this field may be empty. + * + **Deprecated**: this field is kept for backward compatibility, but + * will be removed in API v1.45. + */ + public function getContainer(): ?string + { + return $this->container; + } + + /** + * The ID of the container that was used to create the image. + * + * Depending on how the image was created, this field may be empty. + * + **Deprecated**: this field is kept for backward compatibility, but + * will be removed in API v1.45. + */ + public function setContainer(?string $container): self + { + $this->initialized['container'] = true; + $this->container = $container; + + return $this; + } + + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + */ + public function getContainerConfig(): ?ContainerConfig + { + return $this->containerConfig; + } + + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + */ + public function setContainerConfig(?ContainerConfig $containerConfig): self + { + $this->initialized['containerConfig'] = true; + $this->containerConfig = $containerConfig; + + return $this; + } + + /** + * The version of Docker that was used to build the image. + * + * Depending on how the image was created, this field may be empty. + */ + public function getDockerVersion(): ?string + { + return $this->dockerVersion; + } + + /** + * The version of Docker that was used to build the image. + * + * Depending on how the image was created, this field may be empty. + */ + public function setDockerVersion(?string $dockerVersion): self + { + $this->initialized['dockerVersion'] = true; + $this->dockerVersion = $dockerVersion; + + return $this; + } + + /** + * Name of the author that was specified when committing the image, or as + * specified through MAINTAINER (deprecated) in the Dockerfile. + */ + public function getAuthor(): ?string + { + return $this->author; + } + + /** + * Name of the author that was specified when committing the image, or as + * specified through MAINTAINER (deprecated) in the Dockerfile. + */ + public function setAuthor(?string $author): self + { + $this->initialized['author'] = true; + $this->author = $author; + + return $this; + } + + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + */ + public function getConfig(): ?ContainerConfig + { + return $this->config; + } + + /** + * Configuration for a container that is portable between hosts. + * + * When used as `ContainerConfig` field in an image, `ContainerConfig` is an + * optional field containing the configuration of the container that was last + * committed when creating the image. + * + * Previous versions of Docker builder used this field to store build cache, + * and it is not in active use anymore. + */ + public function setConfig(?ContainerConfig $config): self + { + $this->initialized['config'] = true; + $this->config = $config; + + return $this; + } + + /** + * Hardware CPU architecture that the image runs on. + */ + public function getArchitecture(): ?string + { + return $this->architecture; + } + + /** + * Hardware CPU architecture that the image runs on. + */ + public function setArchitecture(?string $architecture): self + { + $this->initialized['architecture'] = true; + $this->architecture = $architecture; + + return $this; + } + + /** + * CPU architecture variant (presently ARM-only). + */ + public function getVariant(): ?string + { + return $this->variant; + } + + /** + * CPU architecture variant (presently ARM-only). + */ + public function setVariant(?string $variant): self + { + $this->initialized['variant'] = true; + $this->variant = $variant; + + return $this; + } + + /** + * Operating System the image is built to run on. + */ + public function getOs(): ?string + { + return $this->os; + } + + /** + * Operating System the image is built to run on. + */ + public function setOs(?string $os): self + { + $this->initialized['os'] = true; + $this->os = $os; + + return $this; + } + + /** + * Operating System version the image is built to run on (especially + * for Windows). + */ + public function getOsVersion(): ?string + { + return $this->osVersion; + } + + /** + * Operating System version the image is built to run on (especially + * for Windows). + */ + public function setOsVersion(?string $osVersion): self + { + $this->initialized['osVersion'] = true; + $this->osVersion = $osVersion; + + return $this; + } + + /** + * Total size of the image including all layers it is composed of. + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * Total size of the image including all layers it is composed of. + */ + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } + + /** + * Total size of the image including all layers it is composed of. + * + * Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + */ + public function getVirtualSize(): ?int + { + return $this->virtualSize; + } + + /** + * Total size of the image including all layers it is composed of. + * + * Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + */ + public function setVirtualSize(?int $virtualSize): self + { + $this->initialized['virtualSize'] = true; + $this->virtualSize = $virtualSize; + + return $this; + } + + /** + * Information about the storage driver used to store the container's and + * image's filesystem. + */ + public function getGraphDriver(): ?GraphDriverData + { + return $this->graphDriver; + } + + /** + * Information about the storage driver used to store the container's and + * image's filesystem. + */ + public function setGraphDriver(?GraphDriverData $graphDriver): self + { + $this->initialized['graphDriver'] = true; + $this->graphDriver = $graphDriver; + + return $this; + } + + /** + * Information about the image's RootFS, including the layer IDs. + */ + public function getRootFS(): ?ImageInspectRootFS + { + return $this->rootFS; + } + + /** + * Information about the image's RootFS, including the layer IDs. + */ + public function setRootFS(?ImageInspectRootFS $rootFS): self + { + $this->initialized['rootFS'] = true; + $this->rootFS = $rootFS; + + return $this; + } + + /** + * Additional metadata of the image in the local cache. This information + * is local to the daemon, and not part of the image itself. + */ + public function getMetadata(): ?ImageInspectMetadata + { + return $this->metadata; + } + + /** + * Additional metadata of the image in the local cache. This information + * is local to the daemon, and not part of the image itself. + */ + public function setMetadata(?ImageInspectMetadata $metadata): self + { + $this->initialized['metadata'] = true; + $this->metadata = $metadata; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspectMetadata.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspectMetadata.php new file mode 100644 index 000000000..a448fa4d4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspectMetadata.php @@ -0,0 +1,55 @@ +initialized); + } + /** + * Date and time at which the image was last tagged in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * This information is only available if the image was tagged locally, + * and omitted otherwise. + * + * @var string|null + */ + protected $lastTagTime; + + /** + * Date and time at which the image was last tagged in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * This information is only available if the image was tagged locally, + * and omitted otherwise. + */ + public function getLastTagTime(): ?string + { + return $this->lastTagTime; + } + + /** + * Date and time at which the image was last tagged in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * This information is only available if the image was tagged locally, + * and omitted otherwise. + */ + public function setLastTagTime(?string $lastTagTime): self + { + $this->initialized['lastTagTime'] = true; + $this->lastTagTime = $lastTagTime; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspectRootFS.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspectRootFS.php new file mode 100644 index 000000000..9ba242a58 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImageInspectRootFS.php @@ -0,0 +1,58 @@ +initialized); + } + /** + * @var string|null + */ + protected $type; + /** + * @var list|null + */ + protected $layers; + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * @return list|null + */ + public function getLayers(): ?array + { + return $this->layers; + } + + /** + * @param list|null $layers + */ + public function setLayers(?array $layers): self + { + $this->initialized['layers'] = true; + $this->layers = $layers; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImageSummary.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImageSummary.php new file mode 100644 index 000000000..210712c18 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImageSummary.php @@ -0,0 +1,379 @@ +initialized); + } + /** + * ID is the content-addressable ID of an image. + * + * This identifier is a content-addressable digest calculated from the + * image's configuration (which includes the digests of layers used by + * the image). + * + * Note that this digest differs from the `RepoDigests` below, which + * holds digests of image manifests that reference the image. + * + * @var string|null + */ + protected $id; + /** + * ID of the parent image. + * + * Depending on how the image was created, this field may be empty and + * is only set for images that were built/created locally. This field + * is empty if the image was pulled from an image registry. + * + * @var string|null + */ + protected $parentId; + /** + * List of image names/tags in the local image cache that reference this + * image. + * + * Multiple image tags can refer to the same image, and this list may be + * empty if no tags reference the image, in which case the image is + * "untagged", in which case it can still be referenced by its ID. + * + * @var list|null + */ + protected $repoTags; + /** + * List of content-addressable digests of locally available image manifests + * that the image is referenced from. Multiple manifests can refer to the + * same image. + * + * These digests are usually only available if the image was either pulled + * from a registry, or if the image was pushed to a registry, which is when + * the manifest is generated and its digest calculated. + * + * @var list|null + */ + protected $repoDigests; + /** + * Date and time at which the image was created as a Unix timestamp + * (number of seconds sinds EPOCH). + * + * @var int|null + */ + protected $created; + /** + * Total size of the image including all layers it is composed of. + * + * @var int|null + */ + protected $size; + /** + * Total size of image layers that are shared between this image and other + * images. + * + * This size is not calculated by default. `-1` indicates that the value + * has not been set / calculated. + * + * @var int|null + */ + protected $sharedSize; + /** + * Total size of the image including all layers it is composed of. + * + * Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + * + * @var int|null + */ + protected $virtualSize; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Number of containers using this image. Includes both stopped and running + * containers. + * + * This size is not calculated by default, and depends on which API endpoint + * is used. `-1` indicates that the value has not been set / calculated. + * + * @var int|null + */ + protected $containers; + + /** + * ID is the content-addressable ID of an image. + * + * This identifier is a content-addressable digest calculated from the + * image's configuration (which includes the digests of layers used by + * the image). + * + * Note that this digest differs from the `RepoDigests` below, which + * holds digests of image manifests that reference the image. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * ID is the content-addressable ID of an image. + * + * This identifier is a content-addressable digest calculated from the + * image's configuration (which includes the digests of layers used by + * the image). + * + * Note that this digest differs from the `RepoDigests` below, which + * holds digests of image manifests that reference the image. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + /** + * ID of the parent image. + * + * Depending on how the image was created, this field may be empty and + * is only set for images that were built/created locally. This field + * is empty if the image was pulled from an image registry. + */ + public function getParentId(): ?string + { + return $this->parentId; + } + + /** + * ID of the parent image. + * + * Depending on how the image was created, this field may be empty and + * is only set for images that were built/created locally. This field + * is empty if the image was pulled from an image registry. + */ + public function setParentId(?string $parentId): self + { + $this->initialized['parentId'] = true; + $this->parentId = $parentId; + + return $this; + } + + /** + * List of image names/tags in the local image cache that reference this + * image. + * + * Multiple image tags can refer to the same image, and this list may be + * empty if no tags reference the image, in which case the image is + * "untagged", in which case it can still be referenced by its ID. + * + * @return list|null + */ + public function getRepoTags(): ?array + { + return $this->repoTags; + } + + /** + * List of image names/tags in the local image cache that reference this + * image. + * + * Multiple image tags can refer to the same image, and this list may be + * empty if no tags reference the image, in which case the image is + * "untagged", in which case it can still be referenced by its ID. + * + * @param list|null $repoTags + */ + public function setRepoTags(?array $repoTags): self + { + $this->initialized['repoTags'] = true; + $this->repoTags = $repoTags; + + return $this; + } + + /** + * List of content-addressable digests of locally available image manifests + * that the image is referenced from. Multiple manifests can refer to the + * same image. + * + * These digests are usually only available if the image was either pulled + * from a registry, or if the image was pushed to a registry, which is when + * the manifest is generated and its digest calculated. + * + * @return list|null + */ + public function getRepoDigests(): ?array + { + return $this->repoDigests; + } + + /** + * List of content-addressable digests of locally available image manifests + * that the image is referenced from. Multiple manifests can refer to the + * same image. + * + * These digests are usually only available if the image was either pulled + * from a registry, or if the image was pushed to a registry, which is when + * the manifest is generated and its digest calculated. + * + * @param list|null $repoDigests + */ + public function setRepoDigests(?array $repoDigests): self + { + $this->initialized['repoDigests'] = true; + $this->repoDigests = $repoDigests; + + return $this; + } + + /** + * Date and time at which the image was created as a Unix timestamp + * (number of seconds sinds EPOCH). + */ + public function getCreated(): ?int + { + return $this->created; + } + + /** + * Date and time at which the image was created as a Unix timestamp + * (number of seconds sinds EPOCH). + */ + public function setCreated(?int $created): self + { + $this->initialized['created'] = true; + $this->created = $created; + + return $this; + } + + /** + * Total size of the image including all layers it is composed of. + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * Total size of the image including all layers it is composed of. + */ + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } + + /** + * Total size of image layers that are shared between this image and other + * images. + * + * This size is not calculated by default. `-1` indicates that the value + * has not been set / calculated. + */ + public function getSharedSize(): ?int + { + return $this->sharedSize; + } + + /** + * Total size of image layers that are shared between this image and other + * images. + * + * This size is not calculated by default. `-1` indicates that the value + * has not been set / calculated. + */ + public function setSharedSize(?int $sharedSize): self + { + $this->initialized['sharedSize'] = true; + $this->sharedSize = $sharedSize; + + return $this; + } + + /** + * Total size of the image including all layers it is composed of. + * + * Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + */ + public function getVirtualSize(): ?int + { + return $this->virtualSize; + } + + /** + * Total size of the image including all layers it is composed of. + * + * Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + */ + public function setVirtualSize(?int $virtualSize): self + { + $this->initialized['virtualSize'] = true; + $this->virtualSize = $virtualSize; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Number of containers using this image. Includes both stopped and running + * containers. + * + * This size is not calculated by default, and depends on which API endpoint + * is used. `-1` indicates that the value has not been set / calculated. + */ + public function getContainers(): ?int + { + return $this->containers; + } + + /** + * Number of containers using this image. Includes both stopped and running + * containers. + * + * This size is not calculated by default, and depends on which API endpoint + * is used. `-1` indicates that the value has not been set / calculated. + */ + public function setContainers(?int $containers): self + { + $this->initialized['containers'] = true; + $this->containers = $containers; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImagesNameHistoryGetResponse200Item.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImagesNameHistoryGetResponse200Item.php new file mode 100644 index 000000000..3f35e45ab --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImagesNameHistoryGetResponse200Item.php @@ -0,0 +1,126 @@ +initialized); + } + /** + * @var string|null + */ + protected $id; + /** + * @var int|null + */ + protected $created; + /** + * @var string|null + */ + protected $createdBy; + /** + * @var list|null + */ + protected $tags; + /** + * @var int|null + */ + protected $size; + /** + * @var string|null + */ + protected $comment; + + public function getId(): ?string + { + return $this->id; + } + + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + public function getCreated(): ?int + { + return $this->created; + } + + public function setCreated(?int $created): self + { + $this->initialized['created'] = true; + $this->created = $created; + + return $this; + } + + public function getCreatedBy(): ?string + { + return $this->createdBy; + } + + public function setCreatedBy(?string $createdBy): self + { + $this->initialized['createdBy'] = true; + $this->createdBy = $createdBy; + + return $this; + } + + /** + * @return list|null + */ + public function getTags(): ?array + { + return $this->tags; + } + + /** + * @param list|null $tags + */ + public function setTags(?array $tags): self + { + $this->initialized['tags'] = true; + $this->tags = $tags; + + return $this; + } + + public function getSize(): ?int + { + return $this->size; + } + + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } + + public function getComment(): ?string + { + return $this->comment; + } + + public function setComment(?string $comment): self + { + $this->initialized['comment'] = true; + $this->comment = $comment; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImagesPrunePostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImagesPrunePostResponse200.php new file mode 100644 index 000000000..f936cc64e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImagesPrunePostResponse200.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * Images that were deleted. + * + * @var list|null + */ + protected $imagesDeleted; + /** + * Disk space reclaimed in bytes. + * + * @var int|null + */ + protected $spaceReclaimed; + + /** + * Images that were deleted. + * + * @return list|null + */ + public function getImagesDeleted(): ?array + { + return $this->imagesDeleted; + } + + /** + * Images that were deleted. + * + * @param list|null $imagesDeleted + */ + public function setImagesDeleted(?array $imagesDeleted): self + { + $this->initialized['imagesDeleted'] = true; + $this->imagesDeleted = $imagesDeleted; + + return $this; + } + + /** + * Disk space reclaimed in bytes. + */ + public function getSpaceReclaimed(): ?int + { + return $this->spaceReclaimed; + } + + /** + * Disk space reclaimed in bytes. + */ + public function setSpaceReclaimed(?int $spaceReclaimed): self + { + $this->initialized['spaceReclaimed'] = true; + $this->spaceReclaimed = $spaceReclaimed; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ImagesSearchGetResponse200Item.php b/app/vendor/beluga-php/docker-php-api/src/Model/ImagesSearchGetResponse200Item.php new file mode 100644 index 000000000..e7cfd2c24 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ImagesSearchGetResponse200Item.php @@ -0,0 +1,123 @@ +initialized); + } + /** + * @var string|null + */ + protected $description; + /** + * @var bool|null + */ + protected $isOfficial; + /** + * Whether this repository has automated builds enabled. + * + *


+ * + * > **Deprecated**: This field is deprecated and will always be "false". + * + * @var bool|null + */ + protected $isAutomated; + /** + * @var string|null + */ + protected $name; + /** + * @var int|null + */ + protected $starCount; + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + public function getIsOfficial(): ?bool + { + return $this->isOfficial; + } + + public function setIsOfficial(?bool $isOfficial): self + { + $this->initialized['isOfficial'] = true; + $this->isOfficial = $isOfficial; + + return $this; + } + + /** + * Whether this repository has automated builds enabled. + * + *


+ * + * > **Deprecated**: This field is deprecated and will always be "false". + */ + public function getIsAutomated(): ?bool + { + return $this->isAutomated; + } + + /** + * Whether this repository has automated builds enabled. + * + *


+ * + * > **Deprecated**: This field is deprecated and will always be "false". + */ + public function setIsAutomated(?bool $isAutomated): self + { + $this->initialized['isAutomated'] = true; + $this->isAutomated = $isAutomated; + + return $this; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getStarCount(): ?int + { + return $this->starCount; + } + + public function setStarCount(?int $starCount): self + { + $this->initialized['starCount'] = true; + $this->starCount = $starCount; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/IndexInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/IndexInfo.php new file mode 100644 index 000000000..aa822f8bd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/IndexInfo.php @@ -0,0 +1,155 @@ +initialized); + } + /** + * Name of the registry, such as "docker.io". + * + * @var string|null + */ + protected $name; + /** + * List of mirrors, expressed as URIs. + * + * @var list|null + */ + protected $mirrors; + /** + * Indicates if the registry is part of the list of insecure + * registries. + * + * If `false`, the registry is insecure. Insecure registries accept + * un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + * unknown CAs) communication. + * + * > **Warning**: Insecure registries can be useful when running a local + * > registry. However, because its use creates security vulnerabilities + * > it should ONLY be enabled for testing purposes. For increased + * > security, users should add their CA to their system's list of + * > trusted CAs instead of enabling this option. + * + * @var bool|null + */ + protected $secure; + /** + * Indicates whether this is an official registry (i.e., Docker Hub / docker.io). + * + * @var bool|null + */ + protected $official; + + /** + * Name of the registry, such as "docker.io". + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the registry, such as "docker.io". + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * List of mirrors, expressed as URIs. + * + * @return list|null + */ + public function getMirrors(): ?array + { + return $this->mirrors; + } + + /** + * List of mirrors, expressed as URIs. + * + * @param list|null $mirrors + */ + public function setMirrors(?array $mirrors): self + { + $this->initialized['mirrors'] = true; + $this->mirrors = $mirrors; + + return $this; + } + + /** + * Indicates if the registry is part of the list of insecure + * registries. + * + * If `false`, the registry is insecure. Insecure registries accept + * un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + * unknown CAs) communication. + * + * > **Warning**: Insecure registries can be useful when running a local + * > registry. However, because its use creates security vulnerabilities + * > it should ONLY be enabled for testing purposes. For increased + * > security, users should add their CA to their system's list of + * > trusted CAs instead of enabling this option. + */ + public function getSecure(): ?bool + { + return $this->secure; + } + + /** + * Indicates if the registry is part of the list of insecure + * registries. + * + * If `false`, the registry is insecure. Insecure registries accept + * un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + * unknown CAs) communication. + * + * > **Warning**: Insecure registries can be useful when running a local + * > registry. However, because its use creates security vulnerabilities + * > it should ONLY be enabled for testing purposes. For increased + * > security, users should add their CA to their system's list of + * > trusted CAs instead of enabling this option. + */ + public function setSecure(?bool $secure): self + { + $this->initialized['secure'] = true; + $this->secure = $secure; + + return $this; + } + + /** + * Indicates whether this is an official registry (i.e., Docker Hub / docker.io). + */ + public function getOfficial(): ?bool + { + return $this->official; + } + + /** + * Indicates whether this is an official registry (i.e., Docker Hub / docker.io). + */ + public function setOfficial(?bool $official): self + { + $this->initialized['official'] = true; + $this->official = $official; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/JoinTokens.php b/app/vendor/beluga-php/docker-php-api/src/Model/JoinTokens.php new file mode 100644 index 000000000..6ee4ba898 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/JoinTokens.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The token workers can use to join the swarm. + * + * @var string|null + */ + protected $worker; + /** + * The token managers can use to join the swarm. + * + * @var string|null + */ + protected $manager; + + /** + * The token workers can use to join the swarm. + */ + public function getWorker(): ?string + { + return $this->worker; + } + + /** + * The token workers can use to join the swarm. + */ + public function setWorker(?string $worker): self + { + $this->initialized['worker'] = true; + $this->worker = $worker; + + return $this; + } + + /** + * The token managers can use to join the swarm. + */ + public function getManager(): ?string + { + return $this->manager; + } + + /** + * The token managers can use to join the swarm. + */ + public function setManager(?string $manager): self + { + $this->initialized['manager'] = true; + $this->manager = $manager; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Limit.php b/app/vendor/beluga-php/docker-php-api/src/Model/Limit.php new file mode 100644 index 000000000..1c8c6e08a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Limit.php @@ -0,0 +1,77 @@ +initialized); + } + /** + * @var int|null + */ + protected $nanoCPUs; + /** + * @var int|null + */ + protected $memoryBytes; + /** + * Limits the maximum number of PIDs in the container. Set `0` for unlimited. + * + * @var int|null + */ + protected $pids = 0; + + public function getNanoCPUs(): ?int + { + return $this->nanoCPUs; + } + + public function setNanoCPUs(?int $nanoCPUs): self + { + $this->initialized['nanoCPUs'] = true; + $this->nanoCPUs = $nanoCPUs; + + return $this; + } + + public function getMemoryBytes(): ?int + { + return $this->memoryBytes; + } + + public function setMemoryBytes(?int $memoryBytes): self + { + $this->initialized['memoryBytes'] = true; + $this->memoryBytes = $memoryBytes; + + return $this; + } + + /** + * Limits the maximum number of PIDs in the container. Set `0` for unlimited. + */ + public function getPids(): ?int + { + return $this->pids; + } + + /** + * Limits the maximum number of PIDs in the container. Set `0` for unlimited. + */ + public function setPids(?int $pids): self + { + $this->initialized['pids'] = true; + $this->pids = $pids; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ManagerStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/ManagerStatus.php new file mode 100644 index 000000000..9616948b5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ManagerStatus.php @@ -0,0 +1,85 @@ +initialized); + } + /** + * @var bool|null + */ + protected $leader = false; + /** + * Reachability represents the reachability of a node. + * + * @var string|null + */ + protected $reachability; + /** + * The IP address and port at which the manager is reachable. + * + * @var string|null + */ + protected $addr; + + public function getLeader(): ?bool + { + return $this->leader; + } + + public function setLeader(?bool $leader): self + { + $this->initialized['leader'] = true; + $this->leader = $leader; + + return $this; + } + + /** + * Reachability represents the reachability of a node. + */ + public function getReachability(): ?string + { + return $this->reachability; + } + + /** + * Reachability represents the reachability of a node. + */ + public function setReachability(?string $reachability): self + { + $this->initialized['reachability'] = true; + $this->reachability = $reachability; + + return $this; + } + + /** + * The IP address and port at which the manager is reachable. + */ + public function getAddr(): ?string + { + return $this->addr; + } + + /** + * The IP address and port at which the manager is reachable. + */ + public function setAddr(?string $addr): self + { + $this->initialized['addr'] = true; + $this->addr = $addr; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Mount.php b/app/vendor/beluga-php/docker-php-api/src/Model/Mount.php new file mode 100644 index 000000000..6cdc30381 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Mount.php @@ -0,0 +1,236 @@ +initialized); + } + /** + * Container path. + * + * @var string|null + */ + protected $target; + /** + * Mount source (e.g. a volume name, a host path). + * + * @var string|null + */ + protected $source; + /** + * The mount type. Available types: + * + * - `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container. + * - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + * - `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs. + * - `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container. + * - `cluster` a Swarm cluster volume + * + * @var string|null + */ + protected $type; + /** + * Whether the mount should be read-only. + * + * @var bool|null + */ + protected $readOnly; + /** + * The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`. + * + * @var string|null + */ + protected $consistency; + /** + * Optional configuration for the `bind` type. + * + * @var MountBindOptions|null + */ + protected $bindOptions; + /** + * Optional configuration for the `volume` type. + * + * @var MountVolumeOptions|null + */ + protected $volumeOptions; + /** + * Optional configuration for the `tmpfs` type. + * + * @var MountTmpfsOptions|null + */ + protected $tmpfsOptions; + + /** + * Container path. + */ + public function getTarget(): ?string + { + return $this->target; + } + + /** + * Container path. + */ + public function setTarget(?string $target): self + { + $this->initialized['target'] = true; + $this->target = $target; + + return $this; + } + + /** + * Mount source (e.g. a volume name, a host path). + */ + public function getSource(): ?string + { + return $this->source; + } + + /** + * Mount source (e.g. a volume name, a host path). + */ + public function setSource(?string $source): self + { + $this->initialized['source'] = true; + $this->source = $source; + + return $this; + } + + /** + * The mount type. Available types: + * + * - `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container. + * - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + * - `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs. + * - `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container. + * - `cluster` a Swarm cluster volume + */ + public function getType(): ?string + { + return $this->type; + } + + /** + * The mount type. Available types: + * + * - `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container. + * - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + * - `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs. + * - `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container. + * - `cluster` a Swarm cluster volume + */ + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * Whether the mount should be read-only. + */ + public function getReadOnly(): ?bool + { + return $this->readOnly; + } + + /** + * Whether the mount should be read-only. + */ + public function setReadOnly(?bool $readOnly): self + { + $this->initialized['readOnly'] = true; + $this->readOnly = $readOnly; + + return $this; + } + + /** + * The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`. + */ + public function getConsistency(): ?string + { + return $this->consistency; + } + + /** + * The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`. + */ + public function setConsistency(?string $consistency): self + { + $this->initialized['consistency'] = true; + $this->consistency = $consistency; + + return $this; + } + + /** + * Optional configuration for the `bind` type. + */ + public function getBindOptions(): ?MountBindOptions + { + return $this->bindOptions; + } + + /** + * Optional configuration for the `bind` type. + */ + public function setBindOptions(?MountBindOptions $bindOptions): self + { + $this->initialized['bindOptions'] = true; + $this->bindOptions = $bindOptions; + + return $this; + } + + /** + * Optional configuration for the `volume` type. + */ + public function getVolumeOptions(): ?MountVolumeOptions + { + return $this->volumeOptions; + } + + /** + * Optional configuration for the `volume` type. + */ + public function setVolumeOptions(?MountVolumeOptions $volumeOptions): self + { + $this->initialized['volumeOptions'] = true; + $this->volumeOptions = $volumeOptions; + + return $this; + } + + /** + * Optional configuration for the `tmpfs` type. + */ + public function getTmpfsOptions(): ?MountTmpfsOptions + { + return $this->tmpfsOptions; + } + + /** + * Optional configuration for the `tmpfs` type. + */ + public function setTmpfsOptions(?MountTmpfsOptions $tmpfsOptions): self + { + $this->initialized['tmpfsOptions'] = true; + $this->tmpfsOptions = $tmpfsOptions; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/MountBindOptions.php b/app/vendor/beluga-php/docker-php-api/src/Model/MountBindOptions.php new file mode 100644 index 000000000..9af63fe6d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/MountBindOptions.php @@ -0,0 +1,158 @@ +initialized); + } + /** + * A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. + * + * @var string|null + */ + protected $propagation; + /** + * Disable recursive bind mount. + * + * @var bool|null + */ + protected $nonRecursive = false; + /** + * Create mount point on host if missing. + * + * @var bool|null + */ + protected $createMountpoint = false; + /** + * Make the mount non-recursively read-only, but still leave the mount recursive + * (unless NonRecursive is set to `true` in conjunction). + * + * Addded in v1.44, before that version all read-only mounts were + * non-recursive by default. To match the previous behaviour this + * will default to `true` for clients on versions prior to v1.44. + * + * @var bool|null + */ + protected $readOnlyNonRecursive = false; + /** + * Raise an error if the mount cannot be made recursively read-only. + * + * @var bool|null + */ + protected $readOnlyForceRecursive = false; + + /** + * A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. + */ + public function getPropagation(): ?string + { + return $this->propagation; + } + + /** + * A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. + */ + public function setPropagation(?string $propagation): self + { + $this->initialized['propagation'] = true; + $this->propagation = $propagation; + + return $this; + } + + /** + * Disable recursive bind mount. + */ + public function getNonRecursive(): ?bool + { + return $this->nonRecursive; + } + + /** + * Disable recursive bind mount. + */ + public function setNonRecursive(?bool $nonRecursive): self + { + $this->initialized['nonRecursive'] = true; + $this->nonRecursive = $nonRecursive; + + return $this; + } + + /** + * Create mount point on host if missing. + */ + public function getCreateMountpoint(): ?bool + { + return $this->createMountpoint; + } + + /** + * Create mount point on host if missing. + */ + public function setCreateMountpoint(?bool $createMountpoint): self + { + $this->initialized['createMountpoint'] = true; + $this->createMountpoint = $createMountpoint; + + return $this; + } + + /** + * Make the mount non-recursively read-only, but still leave the mount recursive + * (unless NonRecursive is set to `true` in conjunction). + * + * Addded in v1.44, before that version all read-only mounts were + * non-recursive by default. To match the previous behaviour this + * will default to `true` for clients on versions prior to v1.44. + */ + public function getReadOnlyNonRecursive(): ?bool + { + return $this->readOnlyNonRecursive; + } + + /** + * Make the mount non-recursively read-only, but still leave the mount recursive + * (unless NonRecursive is set to `true` in conjunction). + * + * Addded in v1.44, before that version all read-only mounts were + * non-recursive by default. To match the previous behaviour this + * will default to `true` for clients on versions prior to v1.44. + */ + public function setReadOnlyNonRecursive(?bool $readOnlyNonRecursive): self + { + $this->initialized['readOnlyNonRecursive'] = true; + $this->readOnlyNonRecursive = $readOnlyNonRecursive; + + return $this; + } + + /** + * Raise an error if the mount cannot be made recursively read-only. + */ + public function getReadOnlyForceRecursive(): ?bool + { + return $this->readOnlyForceRecursive; + } + + /** + * Raise an error if the mount cannot be made recursively read-only. + */ + public function setReadOnlyForceRecursive(?bool $readOnlyForceRecursive): self + { + $this->initialized['readOnlyForceRecursive'] = true; + $this->readOnlyForceRecursive = $readOnlyForceRecursive; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/MountPoint.php b/app/vendor/beluga-php/docker-php-api/src/Model/MountPoint.php new file mode 100644 index 000000000..51b8ce2f7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/MountPoint.php @@ -0,0 +1,272 @@ +initialized); + } + /** + * The mount type: + * + * - `bind` a mount of a file or directory from the host into the container. + * - `volume` a docker volume with the given `Name`. + * - `tmpfs` a `tmpfs`. + * - `npipe` a named pipe from the host into the container. + * - `cluster` a Swarm cluster volume + * + * @var string|null + */ + protected $type; + /** + * Name is the name reference to the underlying data defined by `Source` + * e.g., the volume name. + * + * @var string|null + */ + protected $name; + /** + * Source location of the mount. + * + * For volumes, this contains the storage location of the volume (within + * `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + * the source (host) part of the bind-mount. For `tmpfs` mount points, this + * field is empty. + * + * @var string|null + */ + protected $source; + /** + * Destination is the path relative to the container root (`/`) where + * the `Source` is mounted inside the container. + * + * @var string|null + */ + protected $destination; + /** + * Driver is the volume driver used to create the volume (if it is a volume). + * + * @var string|null + */ + protected $driver; + /** + * Mode is a comma separated list of options supplied by the user when + * creating the bind/volume mount. + * + * The default is platform-specific (`"z"` on Linux, empty on Windows). + * + * @var string|null + */ + protected $mode; + /** + * Whether the mount is mounted writable (read-write). + * + * @var bool|null + */ + protected $rW; + /** + * Propagation describes how mounts are propagated from the host into the + * mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + * for details. This field is not used on Windows. + * + * @var string|null + */ + protected $propagation; + + /** + * The mount type: + * + * - `bind` a mount of a file or directory from the host into the container. + * - `volume` a docker volume with the given `Name`. + * - `tmpfs` a `tmpfs`. + * - `npipe` a named pipe from the host into the container. + * - `cluster` a Swarm cluster volume + */ + public function getType(): ?string + { + return $this->type; + } + + /** + * The mount type: + * + * - `bind` a mount of a file or directory from the host into the container. + * - `volume` a docker volume with the given `Name`. + * - `tmpfs` a `tmpfs`. + * - `npipe` a named pipe from the host into the container. + * - `cluster` a Swarm cluster volume + */ + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * Name is the name reference to the underlying data defined by `Source` + * e.g., the volume name. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name is the name reference to the underlying data defined by `Source` + * e.g., the volume name. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Source location of the mount. + * + * For volumes, this contains the storage location of the volume (within + * `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + * the source (host) part of the bind-mount. For `tmpfs` mount points, this + * field is empty. + */ + public function getSource(): ?string + { + return $this->source; + } + + /** + * Source location of the mount. + * + * For volumes, this contains the storage location of the volume (within + * `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + * the source (host) part of the bind-mount. For `tmpfs` mount points, this + * field is empty. + */ + public function setSource(?string $source): self + { + $this->initialized['source'] = true; + $this->source = $source; + + return $this; + } + + /** + * Destination is the path relative to the container root (`/`) where + * the `Source` is mounted inside the container. + */ + public function getDestination(): ?string + { + return $this->destination; + } + + /** + * Destination is the path relative to the container root (`/`) where + * the `Source` is mounted inside the container. + */ + public function setDestination(?string $destination): self + { + $this->initialized['destination'] = true; + $this->destination = $destination; + + return $this; + } + + /** + * Driver is the volume driver used to create the volume (if it is a volume). + */ + public function getDriver(): ?string + { + return $this->driver; + } + + /** + * Driver is the volume driver used to create the volume (if it is a volume). + */ + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * Mode is a comma separated list of options supplied by the user when + * creating the bind/volume mount. + * + * The default is platform-specific (`"z"` on Linux, empty on Windows). + */ + public function getMode(): ?string + { + return $this->mode; + } + + /** + * Mode is a comma separated list of options supplied by the user when + * creating the bind/volume mount. + * + * The default is platform-specific (`"z"` on Linux, empty on Windows). + */ + public function setMode(?string $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } + + /** + * Whether the mount is mounted writable (read-write). + */ + public function getRW(): ?bool + { + return $this->rW; + } + + /** + * Whether the mount is mounted writable (read-write). + */ + public function setRW(?bool $rW): self + { + $this->initialized['rW'] = true; + $this->rW = $rW; + + return $this; + } + + /** + * Propagation describes how mounts are propagated from the host into the + * mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + * for details. This field is not used on Windows. + */ + public function getPropagation(): ?string + { + return $this->propagation; + } + + /** + * Propagation describes how mounts are propagated from the host into the + * mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + * for details. This field is not used on Windows. + */ + public function setPropagation(?string $propagation): self + { + $this->initialized['propagation'] = true; + $this->propagation = $propagation; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/MountTmpfsOptions.php b/app/vendor/beluga-php/docker-php-api/src/Model/MountTmpfsOptions.php new file mode 100644 index 000000000..f10c5421d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/MountTmpfsOptions.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The size for the tmpfs mount in bytes. + * + * @var int|null + */ + protected $sizeBytes; + /** + * The permission mode for the tmpfs mount in an integer. + * + * @var int|null + */ + protected $mode; + + /** + * The size for the tmpfs mount in bytes. + */ + public function getSizeBytes(): ?int + { + return $this->sizeBytes; + } + + /** + * The size for the tmpfs mount in bytes. + */ + public function setSizeBytes(?int $sizeBytes): self + { + $this->initialized['sizeBytes'] = true; + $this->sizeBytes = $sizeBytes; + + return $this; + } + + /** + * The permission mode for the tmpfs mount in an integer. + */ + public function getMode(): ?int + { + return $this->mode; + } + + /** + * The permission mode for the tmpfs mount in an integer. + */ + public function setMode(?int $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/MountVolumeOptions.php b/app/vendor/beluga-php/docker-php-api/src/Model/MountVolumeOptions.php new file mode 100644 index 000000000..e0dc199f1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/MountVolumeOptions.php @@ -0,0 +1,122 @@ +initialized); + } + /** + * Populate volume with data from the target. + * + * @var bool|null + */ + protected $noCopy = false; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Map of driver specific options. + * + * @var MountVolumeOptionsDriverConfig|null + */ + protected $driverConfig; + /** + * Source path inside the volume. Must be relative without any back traversals. + * + * @var string|null + */ + protected $subpath; + + /** + * Populate volume with data from the target. + */ + public function getNoCopy(): ?bool + { + return $this->noCopy; + } + + /** + * Populate volume with data from the target. + */ + public function setNoCopy(?bool $noCopy): self + { + $this->initialized['noCopy'] = true; + $this->noCopy = $noCopy; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Map of driver specific options. + */ + public function getDriverConfig(): ?MountVolumeOptionsDriverConfig + { + return $this->driverConfig; + } + + /** + * Map of driver specific options. + */ + public function setDriverConfig(?MountVolumeOptionsDriverConfig $driverConfig): self + { + $this->initialized['driverConfig'] = true; + $this->driverConfig = $driverConfig; + + return $this; + } + + /** + * Source path inside the volume. Must be relative without any back traversals. + */ + public function getSubpath(): ?string + { + return $this->subpath; + } + + /** + * Source path inside the volume. Must be relative without any back traversals. + */ + public function setSubpath(?string $subpath): self + { + $this->initialized['subpath'] = true; + $this->subpath = $subpath; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/MountVolumeOptionsDriverConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/MountVolumeOptionsDriverConfig.php new file mode 100644 index 000000000..bbf481495 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/MountVolumeOptionsDriverConfig.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * Name of the driver to use to create the volume. + * + * @var string|null + */ + protected $name; + /** + * key/value map of driver specific options. + * + * @var array|null + */ + protected $options; + + /** + * Name of the driver to use to create the volume. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the driver to use to create the volume. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * key/value map of driver specific options. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * key/value map of driver specific options. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Network.php b/app/vendor/beluga-php/docker-php-api/src/Model/Network.php new file mode 100644 index 000000000..0e03e5f0c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Network.php @@ -0,0 +1,257 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $id; + /** + * @var string|null + */ + protected $created; + /** + * @var string|null + */ + protected $scope; + /** + * @var string|null + */ + protected $driver; + /** + * @var bool|null + */ + protected $enableIPv6; + /** + * @var IPAM|null + */ + protected $iPAM; + /** + * @var bool|null + */ + protected $internal; + /** + * @var bool|null + */ + protected $attachable; + /** + * @var bool|null + */ + protected $ingress; + /** + * @var array|null + */ + protected $containers; + /** + * @var array|null + */ + protected $options; + /** + * @var array|null + */ + protected $labels; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getId(): ?string + { + return $this->id; + } + + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + public function getCreated(): ?string + { + return $this->created; + } + + public function setCreated(?string $created): self + { + $this->initialized['created'] = true; + $this->created = $created; + + return $this; + } + + public function getScope(): ?string + { + return $this->scope; + } + + public function setScope(?string $scope): self + { + $this->initialized['scope'] = true; + $this->scope = $scope; + + return $this; + } + + public function getDriver(): ?string + { + return $this->driver; + } + + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + public function getEnableIPv6(): ?bool + { + return $this->enableIPv6; + } + + public function setEnableIPv6(?bool $enableIPv6): self + { + $this->initialized['enableIPv6'] = true; + $this->enableIPv6 = $enableIPv6; + + return $this; + } + + public function getIPAM(): ?IPAM + { + return $this->iPAM; + } + + public function setIPAM(?IPAM $iPAM): self + { + $this->initialized['iPAM'] = true; + $this->iPAM = $iPAM; + + return $this; + } + + public function getInternal(): ?bool + { + return $this->internal; + } + + public function setInternal(?bool $internal): self + { + $this->initialized['internal'] = true; + $this->internal = $internal; + + return $this; + } + + public function getAttachable(): ?bool + { + return $this->attachable; + } + + public function setAttachable(?bool $attachable): self + { + $this->initialized['attachable'] = true; + $this->attachable = $attachable; + + return $this; + } + + public function getIngress(): ?bool + { + return $this->ingress; + } + + public function setIngress(?bool $ingress): self + { + $this->initialized['ingress'] = true; + $this->ingress = $ingress; + + return $this; + } + + /** + * @return array|null + */ + public function getContainers(): ?iterable + { + return $this->containers; + } + + /** + * @param array|null $containers + */ + public function setContainers(?iterable $containers): self + { + $this->initialized['containers'] = true; + $this->containers = $containers; + + return $this; + } + + /** + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } + + /** + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworkAttachmentConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkAttachmentConfig.php new file mode 100644 index 000000000..d5a2ed0bf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkAttachmentConfig.php @@ -0,0 +1,101 @@ +initialized); + } + /** + * The target network for attachment. Must be a network name or ID. + * + * @var string|null + */ + protected $target; + /** + * Discoverable alternate names for the service on this network. + * + * @var list|null + */ + protected $aliases; + /** + * Driver attachment options for the network target. + * + * @var array|null + */ + protected $driverOpts; + + /** + * The target network for attachment. Must be a network name or ID. + */ + public function getTarget(): ?string + { + return $this->target; + } + + /** + * The target network for attachment. Must be a network name or ID. + */ + public function setTarget(?string $target): self + { + $this->initialized['target'] = true; + $this->target = $target; + + return $this; + } + + /** + * Discoverable alternate names for the service on this network. + * + * @return list|null + */ + public function getAliases(): ?array + { + return $this->aliases; + } + + /** + * Discoverable alternate names for the service on this network. + * + * @param list|null $aliases + */ + public function setAliases(?array $aliases): self + { + $this->initialized['aliases'] = true; + $this->aliases = $aliases; + + return $this; + } + + /** + * Driver attachment options for the network target. + * + * @return array|null + */ + public function getDriverOpts(): ?iterable + { + return $this->driverOpts; + } + + /** + * Driver attachment options for the network target. + * + * @param array|null $driverOpts + */ + public function setDriverOpts(?iterable $driverOpts): self + { + $this->initialized['driverOpts'] = true; + $this->driverOpts = $driverOpts; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworkContainer.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkContainer.php new file mode 100644 index 000000000..28fe5442f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkContainer.php @@ -0,0 +1,103 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $endpointID; + /** + * @var string|null + */ + protected $macAddress; + /** + * @var string|null + */ + protected $iPv4Address; + /** + * @var string|null + */ + protected $iPv6Address; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getEndpointID(): ?string + { + return $this->endpointID; + } + + public function setEndpointID(?string $endpointID): self + { + $this->initialized['endpointID'] = true; + $this->endpointID = $endpointID; + + return $this; + } + + public function getMacAddress(): ?string + { + return $this->macAddress; + } + + public function setMacAddress(?string $macAddress): self + { + $this->initialized['macAddress'] = true; + $this->macAddress = $macAddress; + + return $this; + } + + public function getIPv4Address(): ?string + { + return $this->iPv4Address; + } + + public function setIPv4Address(?string $iPv4Address): self + { + $this->initialized['iPv4Address'] = true; + $this->iPv4Address = $iPv4Address; + + return $this; + } + + public function getIPv6Address(): ?string + { + return $this->iPv6Address; + } + + public function setIPv6Address(?string $iPv6Address): self + { + $this->initialized['iPv6Address'] = true; + $this->iPv6Address = $iPv6Address; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworkSettings.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkSettings.php new file mode 100644 index 000000000..6e15371d0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkSettings.php @@ -0,0 +1,709 @@ +initialized); + } + /** + * Name of the default bridge interface when dockerd's --bridge flag is set. + * + * @var string|null + */ + protected $bridge; + /** + * SandboxID uniquely represents a container's network stack. + * + * @var string|null + */ + protected $sandboxID; + /** + * Indicates if hairpin NAT should be enabled on the virtual interface. + * + * Deprecated: This field is never set and will be removed in a future release. + * + * @var bool|null + */ + protected $hairpinMode; + /** + * IPv6 unicast address using the link-local prefix. + * + * Deprecated: This field is never set and will be removed in a future release. + * + * @var string|null + */ + protected $linkLocalIPv6Address; + /** + * Prefix length of the IPv6 unicast address. + * + * Deprecated: This field is never set and will be removed in a future release. + * + * @var int|null + */ + protected $linkLocalIPv6PrefixLen; + /** + * PortMap describes the mapping of container ports to host ports, using the + * container's port-number and protocol as key in the format `/`, + * for example, `80/udp`. + * + * If a container's port is mapped for multiple protocols, separate entries + * are added to the mapping table. + * + * @var array>|null + */ + protected $ports; + /** + * SandboxKey is the full path of the netns handle. + * + * @var string|null + */ + protected $sandboxKey; + /** + * Deprecated: This field is never set and will be removed in a future release. + * + * @var list
|null + */ + protected $secondaryIPAddresses; + /** + * Deprecated: This field is never set and will be removed in a future release. + * + * @var list
|null + */ + protected $secondaryIPv6Addresses; + /** + * EndpointID uniquely represents a service endpoint in a Sandbox. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var string|null + */ + protected $endpointID; + /** + * Gateway address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var string|null + */ + protected $gateway; + /** + * Global IPv6 address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var string|null + */ + protected $globalIPv6Address; + /** + * Mask length of the global IPv6 address. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var int|null + */ + protected $globalIPv6PrefixLen; + /** + * IPv4 address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var string|null + */ + protected $iPAddress; + /** + * Mask length of the IPv4 address. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var int|null + */ + protected $iPPrefixLen; + /** + * IPv6 gateway address for this network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var string|null + */ + protected $iPv6Gateway; + /** + * MAC address for the container on the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + * + * @var string|null + */ + protected $macAddress; + /** + * Information about all networks that the container is connected to. + * + * @var array|null + */ + protected $networks; + + /** + * Name of the default bridge interface when dockerd's --bridge flag is set. + */ + public function getBridge(): ?string + { + return $this->bridge; + } + + /** + * Name of the default bridge interface when dockerd's --bridge flag is set. + */ + public function setBridge(?string $bridge): self + { + $this->initialized['bridge'] = true; + $this->bridge = $bridge; + + return $this; + } + + /** + * SandboxID uniquely represents a container's network stack. + */ + public function getSandboxID(): ?string + { + return $this->sandboxID; + } + + /** + * SandboxID uniquely represents a container's network stack. + */ + public function setSandboxID(?string $sandboxID): self + { + $this->initialized['sandboxID'] = true; + $this->sandboxID = $sandboxID; + + return $this; + } + + /** + * Indicates if hairpin NAT should be enabled on the virtual interface. + * + * Deprecated: This field is never set and will be removed in a future release. + */ + public function getHairpinMode(): ?bool + { + return $this->hairpinMode; + } + + /** + * Indicates if hairpin NAT should be enabled on the virtual interface. + * + * Deprecated: This field is never set and will be removed in a future release. + */ + public function setHairpinMode(?bool $hairpinMode): self + { + $this->initialized['hairpinMode'] = true; + $this->hairpinMode = $hairpinMode; + + return $this; + } + + /** + * IPv6 unicast address using the link-local prefix. + * + * Deprecated: This field is never set and will be removed in a future release. + */ + public function getLinkLocalIPv6Address(): ?string + { + return $this->linkLocalIPv6Address; + } + + /** + * IPv6 unicast address using the link-local prefix. + * + * Deprecated: This field is never set and will be removed in a future release. + */ + public function setLinkLocalIPv6Address(?string $linkLocalIPv6Address): self + { + $this->initialized['linkLocalIPv6Address'] = true; + $this->linkLocalIPv6Address = $linkLocalIPv6Address; + + return $this; + } + + /** + * Prefix length of the IPv6 unicast address. + * + * Deprecated: This field is never set and will be removed in a future release. + */ + public function getLinkLocalIPv6PrefixLen(): ?int + { + return $this->linkLocalIPv6PrefixLen; + } + + /** + * Prefix length of the IPv6 unicast address. + * + * Deprecated: This field is never set and will be removed in a future release. + */ + public function setLinkLocalIPv6PrefixLen(?int $linkLocalIPv6PrefixLen): self + { + $this->initialized['linkLocalIPv6PrefixLen'] = true; + $this->linkLocalIPv6PrefixLen = $linkLocalIPv6PrefixLen; + + return $this; + } + + /** + * PortMap describes the mapping of container ports to host ports, using the + * container's port-number and protocol as key in the format `/`, + * for example, `80/udp`. + * + * If a container's port is mapped for multiple protocols, separate entries + * are added to the mapping table. + * + * @return array>|null + */ + public function getPorts(): ?iterable + { + return $this->ports; + } + + /** + * PortMap describes the mapping of container ports to host ports, using the + * container's port-number and protocol as key in the format `/`, + * for example, `80/udp`. + * + * If a container's port is mapped for multiple protocols, separate entries + * are added to the mapping table. + * + * @param array>|null $ports + */ + public function setPorts(?iterable $ports): self + { + $this->initialized['ports'] = true; + $this->ports = $ports; + + return $this; + } + + /** + * SandboxKey is the full path of the netns handle. + */ + public function getSandboxKey(): ?string + { + return $this->sandboxKey; + } + + /** + * SandboxKey is the full path of the netns handle. + */ + public function setSandboxKey(?string $sandboxKey): self + { + $this->initialized['sandboxKey'] = true; + $this->sandboxKey = $sandboxKey; + + return $this; + } + + /** + * Deprecated: This field is never set and will be removed in a future release. + * + * @return list
|null + */ + public function getSecondaryIPAddresses(): ?array + { + return $this->secondaryIPAddresses; + } + + /** + * Deprecated: This field is never set and will be removed in a future release. + * + * @param list
|null $secondaryIPAddresses + */ + public function setSecondaryIPAddresses(?array $secondaryIPAddresses): self + { + $this->initialized['secondaryIPAddresses'] = true; + $this->secondaryIPAddresses = $secondaryIPAddresses; + + return $this; + } + + /** + * Deprecated: This field is never set and will be removed in a future release. + * + * @return list
|null + */ + public function getSecondaryIPv6Addresses(): ?array + { + return $this->secondaryIPv6Addresses; + } + + /** + * Deprecated: This field is never set and will be removed in a future release. + * + * @param list
|null $secondaryIPv6Addresses + */ + public function setSecondaryIPv6Addresses(?array $secondaryIPv6Addresses): self + { + $this->initialized['secondaryIPv6Addresses'] = true; + $this->secondaryIPv6Addresses = $secondaryIPv6Addresses; + + return $this; + } + + /** + * EndpointID uniquely represents a service endpoint in a Sandbox. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getEndpointID(): ?string + { + return $this->endpointID; + } + + /** + * EndpointID uniquely represents a service endpoint in a Sandbox. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setEndpointID(?string $endpointID): self + { + $this->initialized['endpointID'] = true; + $this->endpointID = $endpointID; + + return $this; + } + + /** + * Gateway address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getGateway(): ?string + { + return $this->gateway; + } + + /** + * Gateway address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setGateway(?string $gateway): self + { + $this->initialized['gateway'] = true; + $this->gateway = $gateway; + + return $this; + } + + /** + * Global IPv6 address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getGlobalIPv6Address(): ?string + { + return $this->globalIPv6Address; + } + + /** + * Global IPv6 address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setGlobalIPv6Address(?string $globalIPv6Address): self + { + $this->initialized['globalIPv6Address'] = true; + $this->globalIPv6Address = $globalIPv6Address; + + return $this; + } + + /** + * Mask length of the global IPv6 address. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getGlobalIPv6PrefixLen(): ?int + { + return $this->globalIPv6PrefixLen; + } + + /** + * Mask length of the global IPv6 address. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setGlobalIPv6PrefixLen(?int $globalIPv6PrefixLen): self + { + $this->initialized['globalIPv6PrefixLen'] = true; + $this->globalIPv6PrefixLen = $globalIPv6PrefixLen; + + return $this; + } + + /** + * IPv4 address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getIPAddress(): ?string + { + return $this->iPAddress; + } + + /** + * IPv4 address for the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setIPAddress(?string $iPAddress): self + { + $this->initialized['iPAddress'] = true; + $this->iPAddress = $iPAddress; + + return $this; + } + + /** + * Mask length of the IPv4 address. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getIPPrefixLen(): ?int + { + return $this->iPPrefixLen; + } + + /** + * Mask length of the IPv4 address. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setIPPrefixLen(?int $iPPrefixLen): self + { + $this->initialized['iPPrefixLen'] = true; + $this->iPPrefixLen = $iPPrefixLen; + + return $this; + } + + /** + * IPv6 gateway address for this network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getIPv6Gateway(): ?string + { + return $this->iPv6Gateway; + } + + /** + * IPv6 gateway address for this network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setIPv6Gateway(?string $iPv6Gateway): self + { + $this->initialized['iPv6Gateway'] = true; + $this->iPv6Gateway = $iPv6Gateway; + + return $this; + } + + /** + * MAC address for the container on the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function getMacAddress(): ?string + { + return $this->macAddress; + } + + /** + * MAC address for the container on the default "bridge" network. + * + *


+ * + * > **Deprecated**: This field is only propagated when attached to the + * > default "bridge" network. Use the information from the "bridge" + * > network inside the `Networks` map instead, which contains the same + * > information. This field was deprecated in Docker 1.9 and is scheduled + * > to be removed in Docker 17.12.0 + */ + public function setMacAddress(?string $macAddress): self + { + $this->initialized['macAddress'] = true; + $this->macAddress = $macAddress; + + return $this; + } + + /** + * Information about all networks that the container is connected to. + * + * @return array|null + */ + public function getNetworks(): ?iterable + { + return $this->networks; + } + + /** + * Information about all networks that the container is connected to. + * + * @param array|null $networks + */ + public function setNetworks(?iterable $networks): self + { + $this->initialized['networks'] = true; + $this->networks = $networks; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworkingConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkingConfig.php new file mode 100644 index 000000000..86fb767f2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworkingConfig.php @@ -0,0 +1,53 @@ +initialized); + } + /** + * A mapping of network name to endpoint configuration for that network. + * The endpoint configuration can be left empty to connect to that + * network with no particular endpoint configuration. + * + * @var array|null + */ + protected $endpointsConfig; + + /** + * A mapping of network name to endpoint configuration for that network. + * The endpoint configuration can be left empty to connect to that + * network with no particular endpoint configuration. + * + * @return array|null + */ + public function getEndpointsConfig(): ?iterable + { + return $this->endpointsConfig; + } + + /** + * A mapping of network name to endpoint configuration for that network. + * The endpoint configuration can be left empty to connect to that + * network with no particular endpoint configuration. + * + * @param array|null $endpointsConfig + */ + public function setEndpointsConfig(?iterable $endpointsConfig): self + { + $this->initialized['endpointsConfig'] = true; + $this->endpointsConfig = $endpointsConfig; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworksCreatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksCreatePostBody.php new file mode 100644 index 000000000..be4f27ae3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksCreatePostBody.php @@ -0,0 +1,274 @@ +initialized); + } + /** + * The network's name. + * + * @var string|null + */ + protected $name; + /** + * Deprecated: CheckDuplicate is now always enabled. + * + * @var bool|null + */ + protected $checkDuplicate; + /** + * Name of the network driver plugin to use. + * + * @var string|null + */ + protected $driver = 'bridge'; + /** + * Restrict external access to the network. + * + * @var bool|null + */ + protected $internal; + /** + * Globally scoped network is manually attachable by regular + * containers from workers in swarm mode. + * + * @var bool|null + */ + protected $attachable; + /** + * Ingress network is the network which provides the routing-mesh + * in swarm mode. + * + * @var bool|null + */ + protected $ingress; + /** + * @var IPAM|null + */ + protected $iPAM; + /** + * Enable IPv6 on the network. + * + * @var bool|null + */ + protected $enableIPv6; + /** + * Network specific options to be used by the drivers. + * + * @var array|null + */ + protected $options; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + + /** + * The network's name. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * The network's name. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Deprecated: CheckDuplicate is now always enabled. + */ + public function getCheckDuplicate(): ?bool + { + return $this->checkDuplicate; + } + + /** + * Deprecated: CheckDuplicate is now always enabled. + */ + public function setCheckDuplicate(?bool $checkDuplicate): self + { + $this->initialized['checkDuplicate'] = true; + $this->checkDuplicate = $checkDuplicate; + + return $this; + } + + /** + * Name of the network driver plugin to use. + */ + public function getDriver(): ?string + { + return $this->driver; + } + + /** + * Name of the network driver plugin to use. + */ + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * Restrict external access to the network. + */ + public function getInternal(): ?bool + { + return $this->internal; + } + + /** + * Restrict external access to the network. + */ + public function setInternal(?bool $internal): self + { + $this->initialized['internal'] = true; + $this->internal = $internal; + + return $this; + } + + /** + * Globally scoped network is manually attachable by regular + * containers from workers in swarm mode. + */ + public function getAttachable(): ?bool + { + return $this->attachable; + } + + /** + * Globally scoped network is manually attachable by regular + * containers from workers in swarm mode. + */ + public function setAttachable(?bool $attachable): self + { + $this->initialized['attachable'] = true; + $this->attachable = $attachable; + + return $this; + } + + /** + * Ingress network is the network which provides the routing-mesh + * in swarm mode. + */ + public function getIngress(): ?bool + { + return $this->ingress; + } + + /** + * Ingress network is the network which provides the routing-mesh + * in swarm mode. + */ + public function setIngress(?bool $ingress): self + { + $this->initialized['ingress'] = true; + $this->ingress = $ingress; + + return $this; + } + + public function getIPAM(): ?IPAM + { + return $this->iPAM; + } + + public function setIPAM(?IPAM $iPAM): self + { + $this->initialized['iPAM'] = true; + $this->iPAM = $iPAM; + + return $this; + } + + /** + * Enable IPv6 on the network. + */ + public function getEnableIPv6(): ?bool + { + return $this->enableIPv6; + } + + /** + * Enable IPv6 on the network. + */ + public function setEnableIPv6(?bool $enableIPv6): self + { + $this->initialized['enableIPv6'] = true; + $this->enableIPv6 = $enableIPv6; + + return $this; + } + + /** + * Network specific options to be used by the drivers. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * Network specific options to be used by the drivers. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworksCreatePostResponse201.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksCreatePostResponse201.php new file mode 100644 index 000000000..13377303d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksCreatePostResponse201.php @@ -0,0 +1,60 @@ +initialized); + } + /** + * The ID of the created network. + * + * @var string|null + */ + protected $id; + /** + * @var string|null + */ + protected $warning; + + /** + * The ID of the created network. + */ + public function getId(): ?string + { + return $this->id; + } + + /** + * The ID of the created network. + */ + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + public function getWarning(): ?string + { + return $this->warning; + } + + public function setWarning(?string $warning): self + { + $this->initialized['warning'] = true; + $this->warning = $warning; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworksIdConnectPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksIdConnectPostBody.php new file mode 100644 index 000000000..115c38592 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksIdConnectPostBody.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The ID or name of the container to connect to the network. + * + * @var string|null + */ + protected $container; + /** + * Configuration for a network endpoint. + * + * @var EndpointSettings|null + */ + protected $endpointConfig; + + /** + * The ID or name of the container to connect to the network. + */ + public function getContainer(): ?string + { + return $this->container; + } + + /** + * The ID or name of the container to connect to the network. + */ + public function setContainer(?string $container): self + { + $this->initialized['container'] = true; + $this->container = $container; + + return $this; + } + + /** + * Configuration for a network endpoint. + */ + public function getEndpointConfig(): ?EndpointSettings + { + return $this->endpointConfig; + } + + /** + * Configuration for a network endpoint. + */ + public function setEndpointConfig(?EndpointSettings $endpointConfig): self + { + $this->initialized['endpointConfig'] = true; + $this->endpointConfig = $endpointConfig; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworksIdDisconnectPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksIdDisconnectPostBody.php new file mode 100644 index 000000000..76345a30d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksIdDisconnectPostBody.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The ID or name of the container to disconnect from the network. + * + * @var string|null + */ + protected $container; + /** + * Force the container to disconnect from the network. + * + * @var bool|null + */ + protected $force; + + /** + * The ID or name of the container to disconnect from the network. + */ + public function getContainer(): ?string + { + return $this->container; + } + + /** + * The ID or name of the container to disconnect from the network. + */ + public function setContainer(?string $container): self + { + $this->initialized['container'] = true; + $this->container = $container; + + return $this; + } + + /** + * Force the container to disconnect from the network. + */ + public function getForce(): ?bool + { + return $this->force; + } + + /** + * Force the container to disconnect from the network. + */ + public function setForce(?bool $force): self + { + $this->initialized['force'] = true; + $this->force = $force; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NetworksPrunePostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksPrunePostResponse200.php new file mode 100644 index 000000000..225cf157f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NetworksPrunePostResponse200.php @@ -0,0 +1,47 @@ +initialized); + } + /** + * Networks that were deleted. + * + * @var list|null + */ + protected $networksDeleted; + + /** + * Networks that were deleted. + * + * @return list|null + */ + public function getNetworksDeleted(): ?array + { + return $this->networksDeleted; + } + + /** + * Networks that were deleted. + * + * @param list|null $networksDeleted + */ + public function setNetworksDeleted(?array $networksDeleted): self + { + $this->initialized['networksDeleted'] = true; + $this->networksDeleted = $networksDeleted; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Node.php b/app/vendor/beluga-php/docker-php-api/src/Model/Node.php new file mode 100644 index 000000000..7120bebe0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Node.php @@ -0,0 +1,253 @@ +initialized); + } + /** + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * Date and time at which the node was added to the swarm in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $createdAt; + /** + * Date and time at which the node was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $updatedAt; + /** + * @var NodeSpec|null + */ + protected $spec; + /** + * NodeDescription encapsulates the properties of the Node as reported by the + * agent. + * + * @var NodeDescription|null + */ + protected $description; + /** + * NodeStatus represents the status of a node. + * + * It provides the current status of the node, as seen by the manager. + * + * @var NodeStatus|null + */ + protected $status; + /** + * ManagerStatus represents the status of a manager. + * + * It provides the current status of a node's manager component, if the node + * is a manager. + * + * @var ManagerStatus|null + */ + protected $managerStatus; + + public function getID(): ?string + { + return $this->iD; + } + + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + /** + * Date and time at which the node was added to the swarm in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + /** + * Date and time at which the node was added to the swarm in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + /** + * Date and time at which the node was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + /** + * Date and time at which the node was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + public function getSpec(): ?NodeSpec + { + return $this->spec; + } + + public function setSpec(?NodeSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + /** + * NodeDescription encapsulates the properties of the Node as reported by the + * agent. + */ + public function getDescription(): ?NodeDescription + { + return $this->description; + } + + /** + * NodeDescription encapsulates the properties of the Node as reported by the + * agent. + */ + public function setDescription(?NodeDescription $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * NodeStatus represents the status of a node. + * + * It provides the current status of the node, as seen by the manager. + */ + public function getStatus(): ?NodeStatus + { + return $this->status; + } + + /** + * NodeStatus represents the status of a node. + * + * It provides the current status of the node, as seen by the manager. + */ + public function setStatus(?NodeStatus $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + /** + * ManagerStatus represents the status of a manager. + * + * It provides the current status of a node's manager component, if the node + * is a manager. + */ + public function getManagerStatus(): ?ManagerStatus + { + return $this->managerStatus; + } + + /** + * ManagerStatus represents the status of a manager. + * + * It provides the current status of a node's manager component, if the node + * is a manager. + */ + public function setManagerStatus(?ManagerStatus $managerStatus): self + { + $this->initialized['managerStatus'] = true; + $this->managerStatus = $managerStatus; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NodeDescription.php b/app/vendor/beluga-php/docker-php-api/src/Model/NodeDescription.php new file mode 100644 index 000000000..8229020eb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NodeDescription.php @@ -0,0 +1,141 @@ +initialized); + } + /** + * @var string|null + */ + protected $hostname; + /** + * Platform represents the platform (Arch/OS). + * + * @var Platform|null + */ + protected $platform; + /** + * An object describing the resources which can be advertised by a node and + * requested by a task. + * + * @var ResourceObject|null + */ + protected $resources; + /** + * EngineDescription provides information about an engine. + * + * @var EngineDescription|null + */ + protected $engine; + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + * + * @var TLSInfo|null + */ + protected $tLSInfo; + + public function getHostname(): ?string + { + return $this->hostname; + } + + public function setHostname(?string $hostname): self + { + $this->initialized['hostname'] = true; + $this->hostname = $hostname; + + return $this; + } + + /** + * Platform represents the platform (Arch/OS). + */ + public function getPlatform(): ?Platform + { + return $this->platform; + } + + /** + * Platform represents the platform (Arch/OS). + */ + public function setPlatform(?Platform $platform): self + { + $this->initialized['platform'] = true; + $this->platform = $platform; + + return $this; + } + + /** + * An object describing the resources which can be advertised by a node and + * requested by a task. + */ + public function getResources(): ?ResourceObject + { + return $this->resources; + } + + /** + * An object describing the resources which can be advertised by a node and + * requested by a task. + */ + public function setResources(?ResourceObject $resources): self + { + $this->initialized['resources'] = true; + $this->resources = $resources; + + return $this; + } + + /** + * EngineDescription provides information about an engine. + */ + public function getEngine(): ?EngineDescription + { + return $this->engine; + } + + /** + * EngineDescription provides information about an engine. + */ + public function setEngine(?EngineDescription $engine): self + { + $this->initialized['engine'] = true; + $this->engine = $engine; + + return $this; + } + + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + */ + public function getTLSInfo(): ?TLSInfo + { + return $this->tLSInfo; + } + + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + */ + public function setTLSInfo(?TLSInfo $tLSInfo): self + { + $this->initialized['tLSInfo'] = true; + $this->tLSInfo = $tLSInfo; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NodeSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/NodeSpec.php new file mode 100644 index 000000000..784eb2e31 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NodeSpec.php @@ -0,0 +1,122 @@ +initialized); + } + /** + * Name for the node. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Role of the node. + * + * @var string|null + */ + protected $role; + /** + * Availability of the node. + * + * @var string|null + */ + protected $availability; + + /** + * Name for the node. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name for the node. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Role of the node. + */ + public function getRole(): ?string + { + return $this->role; + } + + /** + * Role of the node. + */ + public function setRole(?string $role): self + { + $this->initialized['role'] = true; + $this->role = $role; + + return $this; + } + + /** + * Availability of the node. + */ + public function getAvailability(): ?string + { + return $this->availability; + } + + /** + * Availability of the node. + */ + public function setAvailability(?string $availability): self + { + $this->initialized['availability'] = true; + $this->availability = $availability; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/NodeStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/NodeStatus.php new file mode 100644 index 000000000..b811d0fd4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/NodeStatus.php @@ -0,0 +1,85 @@ +initialized); + } + /** + * NodeState represents the state of a node. + * + * @var string|null + */ + protected $state; + /** + * @var string|null + */ + protected $message; + /** + * IP address of the node. + * + * @var string|null + */ + protected $addr; + + /** + * NodeState represents the state of a node. + */ + public function getState(): ?string + { + return $this->state; + } + + /** + * NodeState represents the state of a node. + */ + public function setState(?string $state): self + { + $this->initialized['state'] = true; + $this->state = $state; + + return $this; + } + + public function getMessage(): ?string + { + return $this->message; + } + + public function setMessage(?string $message): self + { + $this->initialized['message'] = true; + $this->message = $message; + + return $this; + } + + /** + * IP address of the node. + */ + public function getAddr(): ?string + { + return $this->addr; + } + + /** + * IP address of the node. + */ + public function setAddr(?string $addr): self + { + $this->initialized['addr'] = true; + $this->addr = $addr; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/OCIDescriptor.php b/app/vendor/beluga-php/docker-php-api/src/Model/OCIDescriptor.php new file mode 100644 index 000000000..5ead5f3cc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/OCIDescriptor.php @@ -0,0 +1,93 @@ +initialized); + } + /** + * The media type of the object this schema refers to. + * + * @var string|null + */ + protected $mediaType; + /** + * The digest of the targeted content. + * + * @var string|null + */ + protected $digest; + /** + * The size in bytes of the blob. + * + * @var int|null + */ + protected $size; + + /** + * The media type of the object this schema refers to. + */ + public function getMediaType(): ?string + { + return $this->mediaType; + } + + /** + * The media type of the object this schema refers to. + */ + public function setMediaType(?string $mediaType): self + { + $this->initialized['mediaType'] = true; + $this->mediaType = $mediaType; + + return $this; + } + + /** + * The digest of the targeted content. + */ + public function getDigest(): ?string + { + return $this->digest; + } + + /** + * The digest of the targeted content. + */ + public function setDigest(?string $digest): self + { + $this->initialized['digest'] = true; + $this->digest = $digest; + + return $this; + } + + /** + * The size in bytes of the blob. + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * The size in bytes of the blob. + */ + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/OCIPlatform.php b/app/vendor/beluga-php/docker-php-api/src/Model/OCIPlatform.php new file mode 100644 index 000000000..49d5198d2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/OCIPlatform.php @@ -0,0 +1,156 @@ +initialized); + } + /** + * The CPU architecture, for example `amd64` or `ppc64`. + * + * @var string|null + */ + protected $architecture; + /** + * The operating system, for example `linux` or `windows`. + * + * @var string|null + */ + protected $os; + /** + * Optional field specifying the operating system version, for example on + * Windows `10.0.19041.1165`. + * + * @var string|null + */ + protected $osVersion; + /** + * Optional field specifying an array of strings, each listing a required + * OS feature (for example on Windows `win32k`). + * + * @var list|null + */ + protected $osFeatures; + /** + * Optional field specifying a variant of the CPU, for example `v7` to + * specify ARMv7 when architecture is `arm`. + * + * @var string|null + */ + protected $variant; + + /** + * The CPU architecture, for example `amd64` or `ppc64`. + */ + public function getArchitecture(): ?string + { + return $this->architecture; + } + + /** + * The CPU architecture, for example `amd64` or `ppc64`. + */ + public function setArchitecture(?string $architecture): self + { + $this->initialized['architecture'] = true; + $this->architecture = $architecture; + + return $this; + } + + /** + * The operating system, for example `linux` or `windows`. + */ + public function getOs(): ?string + { + return $this->os; + } + + /** + * The operating system, for example `linux` or `windows`. + */ + public function setOs(?string $os): self + { + $this->initialized['os'] = true; + $this->os = $os; + + return $this; + } + + /** + * Optional field specifying the operating system version, for example on + * Windows `10.0.19041.1165`. + */ + public function getOsVersion(): ?string + { + return $this->osVersion; + } + + /** + * Optional field specifying the operating system version, for example on + * Windows `10.0.19041.1165`. + */ + public function setOsVersion(?string $osVersion): self + { + $this->initialized['osVersion'] = true; + $this->osVersion = $osVersion; + + return $this; + } + + /** + * Optional field specifying an array of strings, each listing a required + * OS feature (for example on Windows `win32k`). + * + * @return list|null + */ + public function getOsFeatures(): ?array + { + return $this->osFeatures; + } + + /** + * Optional field specifying an array of strings, each listing a required + * OS feature (for example on Windows `win32k`). + * + * @param list|null $osFeatures + */ + public function setOsFeatures(?array $osFeatures): self + { + $this->initialized['osFeatures'] = true; + $this->osFeatures = $osFeatures; + + return $this; + } + + /** + * Optional field specifying a variant of the CPU, for example `v7` to + * specify ARMv7 when architecture is `arm`. + */ + public function getVariant(): ?string + { + return $this->variant; + } + + /** + * Optional field specifying a variant of the CPU, for example `v7` to + * specify ARMv7 when architecture is `arm`. + */ + public function setVariant(?string $variant): self + { + $this->initialized['variant'] = true; + $this->variant = $variant; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ObjectVersion.php b/app/vendor/beluga-php/docker-php-api/src/Model/ObjectVersion.php new file mode 100644 index 000000000..bc75b1b69 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ObjectVersion.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var int|null + */ + protected $index; + + public function getIndex(): ?int + { + return $this->index; + } + + public function setIndex(?int $index): self + { + $this->initialized['index'] = true; + $this->index = $index; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PeerNode.php b/app/vendor/beluga-php/docker-php-api/src/Model/PeerNode.php new file mode 100644 index 000000000..8355cd593 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PeerNode.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * Unique identifier of for this node in the swarm. + * + * @var string|null + */ + protected $nodeID; + /** + * IP address and ports at which this node can be reached. + * + * @var string|null + */ + protected $addr; + + /** + * Unique identifier of for this node in the swarm. + */ + public function getNodeID(): ?string + { + return $this->nodeID; + } + + /** + * Unique identifier of for this node in the swarm. + */ + public function setNodeID(?string $nodeID): self + { + $this->initialized['nodeID'] = true; + $this->nodeID = $nodeID; + + return $this; + } + + /** + * IP address and ports at which this node can be reached. + */ + public function getAddr(): ?string + { + return $this->addr; + } + + /** + * IP address and ports at which this node can be reached. + */ + public function setAddr(?string $addr): self + { + $this->initialized['addr'] = true; + $this->addr = $addr; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Platform.php b/app/vendor/beluga-php/docker-php-api/src/Model/Platform.php new file mode 100644 index 000000000..4c9899f70 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Platform.php @@ -0,0 +1,71 @@ +initialized); + } + /** + * Architecture represents the hardware architecture (for example, + * `x86_64`). + * + * @var string|null + */ + protected $architecture; + /** + * OS represents the Operating System (for example, `linux` or `windows`). + * + * @var string|null + */ + protected $oS; + + /** + * Architecture represents the hardware architecture (for example, + * `x86_64`). + */ + public function getArchitecture(): ?string + { + return $this->architecture; + } + + /** + * Architecture represents the hardware architecture (for example, + * `x86_64`). + */ + public function setArchitecture(?string $architecture): self + { + $this->initialized['architecture'] = true; + $this->architecture = $architecture; + + return $this; + } + + /** + * OS represents the Operating System (for example, `linux` or `windows`). + */ + public function getOS(): ?string + { + return $this->oS; + } + + /** + * OS represents the Operating System (for example, `linux` or `windows`). + */ + public function setOS(?string $oS): self + { + $this->initialized['oS'] = true; + $this->oS = $oS; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Plugin.php b/app/vendor/beluga-php/docker-php-api/src/Model/Plugin.php new file mode 100644 index 000000000..23f350588 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Plugin.php @@ -0,0 +1,152 @@ +initialized); + } + /** + * @var string|null + */ + protected $id; + /** + * @var string|null + */ + protected $name; + /** + * True if the plugin is running. False if the plugin is not running, only installed. + * + * @var bool|null + */ + protected $enabled; + /** + * Settings that can be modified by users. + * + * @var PluginSettings|null + */ + protected $settings; + /** + * plugin remote reference used to push/pull the plugin. + * + * @var string|null + */ + protected $pluginReference; + /** + * The config of a plugin. + * + * @var PluginConfig|null + */ + protected $config; + + public function getId(): ?string + { + return $this->id; + } + + public function setId(?string $id): self + { + $this->initialized['id'] = true; + $this->id = $id; + + return $this; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * True if the plugin is running. False if the plugin is not running, only installed. + */ + public function getEnabled(): ?bool + { + return $this->enabled; + } + + /** + * True if the plugin is running. False if the plugin is not running, only installed. + */ + public function setEnabled(?bool $enabled): self + { + $this->initialized['enabled'] = true; + $this->enabled = $enabled; + + return $this; + } + + /** + * Settings that can be modified by users. + */ + public function getSettings(): ?PluginSettings + { + return $this->settings; + } + + /** + * Settings that can be modified by users. + */ + public function setSettings(?PluginSettings $settings): self + { + $this->initialized['settings'] = true; + $this->settings = $settings; + + return $this; + } + + /** + * plugin remote reference used to push/pull the plugin. + */ + public function getPluginReference(): ?string + { + return $this->pluginReference; + } + + /** + * plugin remote reference used to push/pull the plugin. + */ + public function setPluginReference(?string $pluginReference): self + { + $this->initialized['pluginReference'] = true; + $this->pluginReference = $pluginReference; + + return $this; + } + + /** + * The config of a plugin. + */ + public function getConfig(): ?PluginConfig + { + return $this->config; + } + + /** + * The config of a plugin. + */ + public function setConfig(?PluginConfig $config): self + { + $this->initialized['config'] = true; + $this->config = $config; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfig.php new file mode 100644 index 000000000..a2af9f0da --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfig.php @@ -0,0 +1,324 @@ +initialized); + } + /** + * Docker Version used to create the plugin. + * + * @var string|null + */ + protected $dockerVersion; + /** + * @var string|null + */ + protected $description; + /** + * @var string|null + */ + protected $documentation; + /** + * The interface between Docker and the plugin. + * + * @var PluginConfigInterface|null + */ + protected $interface; + /** + * @var list|null + */ + protected $entrypoint; + /** + * @var string|null + */ + protected $workDir; + /** + * @var PluginConfigUser|null + */ + protected $user; + /** + * @var PluginConfigNetwork|null + */ + protected $network; + /** + * @var PluginConfigLinux|null + */ + protected $linux; + /** + * @var string|null + */ + protected $propagatedMount; + /** + * @var bool|null + */ + protected $ipcHost; + /** + * @var bool|null + */ + protected $pidHost; + /** + * @var list|null + */ + protected $mounts; + /** + * @var list|null + */ + protected $env; + /** + * @var PluginConfigArgs|null + */ + protected $args; + /** + * @var PluginConfigRootfs|null + */ + protected $rootfs; + + /** + * Docker Version used to create the plugin. + */ + public function getDockerVersion(): ?string + { + return $this->dockerVersion; + } + + /** + * Docker Version used to create the plugin. + */ + public function setDockerVersion(?string $dockerVersion): self + { + $this->initialized['dockerVersion'] = true; + $this->dockerVersion = $dockerVersion; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + public function getDocumentation(): ?string + { + return $this->documentation; + } + + public function setDocumentation(?string $documentation): self + { + $this->initialized['documentation'] = true; + $this->documentation = $documentation; + + return $this; + } + + /** + * The interface between Docker and the plugin. + */ + public function getInterface(): ?PluginConfigInterface + { + return $this->interface; + } + + /** + * The interface between Docker and the plugin. + */ + public function setInterface(?PluginConfigInterface $interface): self + { + $this->initialized['interface'] = true; + $this->interface = $interface; + + return $this; + } + + /** + * @return list|null + */ + public function getEntrypoint(): ?array + { + return $this->entrypoint; + } + + /** + * @param list|null $entrypoint + */ + public function setEntrypoint(?array $entrypoint): self + { + $this->initialized['entrypoint'] = true; + $this->entrypoint = $entrypoint; + + return $this; + } + + public function getWorkDir(): ?string + { + return $this->workDir; + } + + public function setWorkDir(?string $workDir): self + { + $this->initialized['workDir'] = true; + $this->workDir = $workDir; + + return $this; + } + + public function getUser(): ?PluginConfigUser + { + return $this->user; + } + + public function setUser(?PluginConfigUser $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + public function getNetwork(): ?PluginConfigNetwork + { + return $this->network; + } + + public function setNetwork(?PluginConfigNetwork $network): self + { + $this->initialized['network'] = true; + $this->network = $network; + + return $this; + } + + public function getLinux(): ?PluginConfigLinux + { + return $this->linux; + } + + public function setLinux(?PluginConfigLinux $linux): self + { + $this->initialized['linux'] = true; + $this->linux = $linux; + + return $this; + } + + public function getPropagatedMount(): ?string + { + return $this->propagatedMount; + } + + public function setPropagatedMount(?string $propagatedMount): self + { + $this->initialized['propagatedMount'] = true; + $this->propagatedMount = $propagatedMount; + + return $this; + } + + public function getIpcHost(): ?bool + { + return $this->ipcHost; + } + + public function setIpcHost(?bool $ipcHost): self + { + $this->initialized['ipcHost'] = true; + $this->ipcHost = $ipcHost; + + return $this; + } + + public function getPidHost(): ?bool + { + return $this->pidHost; + } + + public function setPidHost(?bool $pidHost): self + { + $this->initialized['pidHost'] = true; + $this->pidHost = $pidHost; + + return $this; + } + + /** + * @return list|null + */ + public function getMounts(): ?array + { + return $this->mounts; + } + + /** + * @param list|null $mounts + */ + public function setMounts(?array $mounts): self + { + $this->initialized['mounts'] = true; + $this->mounts = $mounts; + + return $this; + } + + /** + * @return list|null + */ + public function getEnv(): ?array + { + return $this->env; + } + + /** + * @param list|null $env + */ + public function setEnv(?array $env): self + { + $this->initialized['env'] = true; + $this->env = $env; + + return $this; + } + + public function getArgs(): ?PluginConfigArgs + { + return $this->args; + } + + public function setArgs(?PluginConfigArgs $args): self + { + $this->initialized['args'] = true; + $this->args = $args; + + return $this; + } + + public function getRootfs(): ?PluginConfigRootfs + { + return $this->rootfs; + } + + public function setRootfs(?PluginConfigRootfs $rootfs): self + { + $this->initialized['rootfs'] = true; + $this->rootfs = $rootfs; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigArgs.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigArgs.php new file mode 100644 index 000000000..32e482c03 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigArgs.php @@ -0,0 +1,98 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $description; + /** + * @var list|null + */ + protected $settable; + /** + * @var list|null + */ + protected $value; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * @return list|null + */ + public function getSettable(): ?array + { + return $this->settable; + } + + /** + * @param list|null $settable + */ + public function setSettable(?array $settable): self + { + $this->initialized['settable'] = true; + $this->settable = $settable; + + return $this; + } + + /** + * @return list|null + */ + public function getValue(): ?array + { + return $this->value; + } + + /** + * @param list|null $value + */ + public function setValue(?array $value): self + { + $this->initialized['value'] = true; + $this->value = $value; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigInterface.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigInterface.php new file mode 100644 index 000000000..e2443eda4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigInterface.php @@ -0,0 +1,83 @@ +initialized); + } + /** + * @var list|null + */ + protected $types; + /** + * @var string|null + */ + protected $socket; + /** + * Protocol to use for clients connecting to the plugin. + * + * @var string|null + */ + protected $protocolScheme; + + /** + * @return list|null + */ + public function getTypes(): ?array + { + return $this->types; + } + + /** + * @param list|null $types + */ + public function setTypes(?array $types): self + { + $this->initialized['types'] = true; + $this->types = $types; + + return $this; + } + + public function getSocket(): ?string + { + return $this->socket; + } + + public function setSocket(?string $socket): self + { + $this->initialized['socket'] = true; + $this->socket = $socket; + + return $this; + } + + /** + * Protocol to use for clients connecting to the plugin. + */ + public function getProtocolScheme(): ?string + { + return $this->protocolScheme; + } + + /** + * Protocol to use for clients connecting to the plugin. + */ + public function setProtocolScheme(?string $protocolScheme): self + { + $this->initialized['protocolScheme'] = true; + $this->protocolScheme = $protocolScheme; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigLinux.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigLinux.php new file mode 100644 index 000000000..201d8c37e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigLinux.php @@ -0,0 +1,81 @@ +initialized); + } + /** + * @var list|null + */ + protected $capabilities; + /** + * @var bool|null + */ + protected $allowAllDevices; + /** + * @var list|null + */ + protected $devices; + + /** + * @return list|null + */ + public function getCapabilities(): ?array + { + return $this->capabilities; + } + + /** + * @param list|null $capabilities + */ + public function setCapabilities(?array $capabilities): self + { + $this->initialized['capabilities'] = true; + $this->capabilities = $capabilities; + + return $this; + } + + public function getAllowAllDevices(): ?bool + { + return $this->allowAllDevices; + } + + public function setAllowAllDevices(?bool $allowAllDevices): self + { + $this->initialized['allowAllDevices'] = true; + $this->allowAllDevices = $allowAllDevices; + + return $this; + } + + /** + * @return list|null + */ + public function getDevices(): ?array + { + return $this->devices; + } + + /** + * @param list|null $devices + */ + public function setDevices(?array $devices): self + { + $this->initialized['devices'] = true; + $this->devices = $devices; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigNetwork.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigNetwork.php new file mode 100644 index 000000000..a2cb9dc83 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigNetwork.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var string|null + */ + protected $type; + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigRootfs.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigRootfs.php new file mode 100644 index 000000000..28caa4b31 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigRootfs.php @@ -0,0 +1,58 @@ +initialized); + } + /** + * @var string|null + */ + protected $type; + /** + * @var list|null + */ + protected $diffIds; + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * @return list|null + */ + public function getDiffIds(): ?array + { + return $this->diffIds; + } + + /** + * @param list|null $diffIds + */ + public function setDiffIds(?array $diffIds): self + { + $this->initialized['diffIds'] = true; + $this->diffIds = $diffIds; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigUser.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigUser.php new file mode 100644 index 000000000..788ccbad7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginConfigUser.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var int|null + */ + protected $uID; + /** + * @var int|null + */ + protected $gID; + + public function getUID(): ?int + { + return $this->uID; + } + + public function setUID(?int $uID): self + { + $this->initialized['uID'] = true; + $this->uID = $uID; + + return $this; + } + + public function getGID(): ?int + { + return $this->gID; + } + + public function setGID(?int $gID): self + { + $this->initialized['gID'] = true; + $this->gID = $gID; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginDevice.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginDevice.php new file mode 100644 index 000000000..a2dfe1349 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginDevice.php @@ -0,0 +1,92 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $description; + /** + * @var list|null + */ + protected $settable; + /** + * @var string|null + */ + protected $path; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * @return list|null + */ + public function getSettable(): ?array + { + return $this->settable; + } + + /** + * @param list|null $settable + */ + public function setSettable(?array $settable): self + { + $this->initialized['settable'] = true; + $this->settable = $settable; + + return $this; + } + + public function getPath(): ?string + { + return $this->path; + } + + public function setPath(?string $path): self + { + $this->initialized['path'] = true; + $this->path = $path; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginEnv.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginEnv.php new file mode 100644 index 000000000..f9f4bd0ab --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginEnv.php @@ -0,0 +1,92 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $description; + /** + * @var list|null + */ + protected $settable; + /** + * @var string|null + */ + protected $value; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * @return list|null + */ + public function getSettable(): ?array + { + return $this->settable; + } + + /** + * @param list|null $settable + */ + public function setSettable(?array $settable): self + { + $this->initialized['settable'] = true; + $this->settable = $settable; + + return $this; + } + + public function getValue(): ?string + { + return $this->value; + } + + public function setValue(?string $value): self + { + $this->initialized['value'] = true; + $this->value = $value; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginInterfaceType.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginInterfaceType.php new file mode 100644 index 000000000..a5e5ac432 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginInterfaceType.php @@ -0,0 +1,69 @@ +initialized); + } + /** + * @var string|null + */ + protected $prefix; + /** + * @var string|null + */ + protected $capability; + /** + * @var string|null + */ + protected $version; + + public function getPrefix(): ?string + { + return $this->prefix; + } + + public function setPrefix(?string $prefix): self + { + $this->initialized['prefix'] = true; + $this->prefix = $prefix; + + return $this; + } + + public function getCapability(): ?string + { + return $this->capability; + } + + public function setCapability(?string $capability): self + { + $this->initialized['capability'] = true; + $this->capability = $capability; + + return $this; + } + + public function getVersion(): ?string + { + return $this->version; + } + + public function setVersion(?string $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginMount.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginMount.php new file mode 100644 index 000000000..541cb0408 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginMount.php @@ -0,0 +1,149 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $description; + /** + * @var list|null + */ + protected $settable; + /** + * @var string|null + */ + protected $source; + /** + * @var string|null + */ + protected $destination; + /** + * @var string|null + */ + protected $type; + /** + * @var list|null + */ + protected $options; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * @return list|null + */ + public function getSettable(): ?array + { + return $this->settable; + } + + /** + * @param list|null $settable + */ + public function setSettable(?array $settable): self + { + $this->initialized['settable'] = true; + $this->settable = $settable; + + return $this; + } + + public function getSource(): ?string + { + return $this->source; + } + + public function setSource(?string $source): self + { + $this->initialized['source'] = true; + $this->source = $source; + + return $this; + } + + public function getDestination(): ?string + { + return $this->destination; + } + + public function setDestination(?string $destination): self + { + $this->initialized['destination'] = true; + $this->destination = $destination; + + return $this; + } + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * @return list|null + */ + public function getOptions(): ?array + { + return $this->options; + } + + /** + * @param list|null $options + */ + public function setOptions(?array $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginPrivilege.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginPrivilege.php new file mode 100644 index 000000000..557af43b0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginPrivilege.php @@ -0,0 +1,75 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var string|null + */ + protected $description; + /** + * @var list|null + */ + protected $value; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->initialized['description'] = true; + $this->description = $description; + + return $this; + } + + /** + * @return list|null + */ + public function getValue(): ?array + { + return $this->value; + } + + /** + * @param list|null $value + */ + public function setValue(?array $value): self + { + $this->initialized['value'] = true; + $this->value = $value; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginSettings.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginSettings.php new file mode 100644 index 000000000..543ecf609 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginSettings.php @@ -0,0 +1,110 @@ +initialized); + } + /** + * @var list|null + */ + protected $mounts; + /** + * @var list|null + */ + protected $env; + /** + * @var list|null + */ + protected $args; + /** + * @var list|null + */ + protected $devices; + + /** + * @return list|null + */ + public function getMounts(): ?array + { + return $this->mounts; + } + + /** + * @param list|null $mounts + */ + public function setMounts(?array $mounts): self + { + $this->initialized['mounts'] = true; + $this->mounts = $mounts; + + return $this; + } + + /** + * @return list|null + */ + public function getEnv(): ?array + { + return $this->env; + } + + /** + * @param list|null $env + */ + public function setEnv(?array $env): self + { + $this->initialized['env'] = true; + $this->env = $env; + + return $this; + } + + /** + * @return list|null + */ + public function getArgs(): ?array + { + return $this->args; + } + + /** + * @param list|null $args + */ + public function setArgs(?array $args): self + { + $this->initialized['args'] = true; + $this->args = $args; + + return $this; + } + + /** + * @return list|null + */ + public function getDevices(): ?array + { + return $this->devices; + } + + /** + * @param list|null $devices + */ + public function setDevices(?array $devices): self + { + $this->initialized['devices'] = true; + $this->devices = $devices; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PluginsInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/PluginsInfo.php new file mode 100644 index 000000000..41c73db20 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PluginsInfo.php @@ -0,0 +1,134 @@ +initialized); + } + /** + * Names of available volume-drivers, and network-driver plugins. + * + * @var list|null + */ + protected $volume; + /** + * Names of available network-drivers, and network-driver plugins. + * + * @var list|null + */ + protected $network; + /** + * Names of available authorization plugins. + * + * @var list|null + */ + protected $authorization; + /** + * Names of available logging-drivers, and logging-driver plugins. + * + * @var list|null + */ + protected $log; + + /** + * Names of available volume-drivers, and network-driver plugins. + * + * @return list|null + */ + public function getVolume(): ?array + { + return $this->volume; + } + + /** + * Names of available volume-drivers, and network-driver plugins. + * + * @param list|null $volume + */ + public function setVolume(?array $volume): self + { + $this->initialized['volume'] = true; + $this->volume = $volume; + + return $this; + } + + /** + * Names of available network-drivers, and network-driver plugins. + * + * @return list|null + */ + public function getNetwork(): ?array + { + return $this->network; + } + + /** + * Names of available network-drivers, and network-driver plugins. + * + * @param list|null $network + */ + public function setNetwork(?array $network): self + { + $this->initialized['network'] = true; + $this->network = $network; + + return $this; + } + + /** + * Names of available authorization plugins. + * + * @return list|null + */ + public function getAuthorization(): ?array + { + return $this->authorization; + } + + /** + * Names of available authorization plugins. + * + * @param list|null $authorization + */ + public function setAuthorization(?array $authorization): self + { + $this->initialized['authorization'] = true; + $this->authorization = $authorization; + + return $this; + } + + /** + * Names of available logging-drivers, and logging-driver plugins. + * + * @return list|null + */ + public function getLog(): ?array + { + return $this->log; + } + + /** + * Names of available logging-drivers, and logging-driver plugins. + * + * @param list|null $log + */ + public function setLog(?array $log): self + { + $this->initialized['log'] = true; + $this->log = $log; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Port.php b/app/vendor/beluga-php/docker-php-api/src/Model/Port.php new file mode 100644 index 000000000..cde2781c3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Port.php @@ -0,0 +1,110 @@ +initialized); + } + /** + * Host IP address that the container's port is mapped to. + * + * @var string|null + */ + protected $iP; + /** + * Port on the container. + * + * @var int|null + */ + protected $privatePort; + /** + * Port exposed on the host. + * + * @var int|null + */ + protected $publicPort; + /** + * @var string|null + */ + protected $type; + + /** + * Host IP address that the container's port is mapped to. + */ + public function getIP(): ?string + { + return $this->iP; + } + + /** + * Host IP address that the container's port is mapped to. + */ + public function setIP(?string $iP): self + { + $this->initialized['iP'] = true; + $this->iP = $iP; + + return $this; + } + + /** + * Port on the container. + */ + public function getPrivatePort(): ?int + { + return $this->privatePort; + } + + /** + * Port on the container. + */ + public function setPrivatePort(?int $privatePort): self + { + $this->initialized['privatePort'] = true; + $this->privatePort = $privatePort; + + return $this; + } + + /** + * Port exposed on the host. + */ + public function getPublicPort(): ?int + { + return $this->publicPort; + } + + /** + * Port exposed on the host. + */ + public function setPublicPort(?int $publicPort): self + { + $this->initialized['publicPort'] = true; + $this->publicPort = $publicPort; + + return $this; + } + + public function getType(): ?string + { + return $this->type; + } + + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PortBinding.php b/app/vendor/beluga-php/docker-php-api/src/Model/PortBinding.php new file mode 100644 index 000000000..038cfbfb9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PortBinding.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * Host IP address that the container's port is mapped to. + * + * @var string|null + */ + protected $hostIp; + /** + * Host port number that the container's port is mapped to. + * + * @var string|null + */ + protected $hostPort; + + /** + * Host IP address that the container's port is mapped to. + */ + public function getHostIp(): ?string + { + return $this->hostIp; + } + + /** + * Host IP address that the container's port is mapped to. + */ + public function setHostIp(?string $hostIp): self + { + $this->initialized['hostIp'] = true; + $this->hostIp = $hostIp; + + return $this; + } + + /** + * Host port number that the container's port is mapped to. + */ + public function getHostPort(): ?string + { + return $this->hostPort; + } + + /** + * Host port number that the container's port is mapped to. + */ + public function setHostPort(?string $hostPort): self + { + $this->initialized['hostPort'] = true; + $this->hostPort = $hostPort; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PortStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/PortStatus.php new file mode 100644 index 000000000..af7d52379 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PortStatus.php @@ -0,0 +1,41 @@ +initialized); + } + /** + * @var list|null + */ + protected $ports; + + /** + * @return list|null + */ + public function getPorts(): ?array + { + return $this->ports; + } + + /** + * @param list|null $ports + */ + public function setPorts(?array $ports): self + { + $this->initialized['ports'] = true; + $this->ports = $ports; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ProcessConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/ProcessConfig.php new file mode 100644 index 000000000..65ba9c3b9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ProcessConfig.php @@ -0,0 +1,109 @@ +initialized); + } + /** + * @var bool|null + */ + protected $privileged; + /** + * @var string|null + */ + protected $user; + /** + * @var bool|null + */ + protected $tty; + /** + * @var string|null + */ + protected $entrypoint; + /** + * @var list|null + */ + protected $arguments; + + public function getPrivileged(): ?bool + { + return $this->privileged; + } + + public function setPrivileged(?bool $privileged): self + { + $this->initialized['privileged'] = true; + $this->privileged = $privileged; + + return $this; + } + + public function getUser(): ?string + { + return $this->user; + } + + public function setUser(?string $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + public function getTty(): ?bool + { + return $this->tty; + } + + public function setTty(?bool $tty): self + { + $this->initialized['tty'] = true; + $this->tty = $tty; + + return $this; + } + + public function getEntrypoint(): ?string + { + return $this->entrypoint; + } + + public function setEntrypoint(?string $entrypoint): self + { + $this->initialized['entrypoint'] = true; + $this->entrypoint = $entrypoint; + + return $this; + } + + /** + * @return list|null + */ + public function getArguments(): ?array + { + return $this->arguments; + } + + /** + * @param list|null $arguments + */ + public function setArguments(?array $arguments): self + { + $this->initialized['arguments'] = true; + $this->arguments = $arguments; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ProgressDetail.php b/app/vendor/beluga-php/docker-php-api/src/Model/ProgressDetail.php new file mode 100644 index 000000000..615843446 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ProgressDetail.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var int|null + */ + protected $current; + /** + * @var int|null + */ + protected $total; + + public function getCurrent(): ?int + { + return $this->current; + } + + public function setCurrent(?int $current): self + { + $this->initialized['current'] = true; + $this->current = $current; + + return $this; + } + + public function getTotal(): ?int + { + return $this->total; + } + + public function setTotal(?int $total): self + { + $this->initialized['total'] = true; + $this->total = $total; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/PushImageInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/PushImageInfo.php new file mode 100644 index 000000000..662938a20 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/PushImageInfo.php @@ -0,0 +1,86 @@ +initialized); + } + /** + * @var string|null + */ + protected $error; + /** + * @var string|null + */ + protected $status; + /** + * @var string|null + */ + protected $progress; + /** + * @var ProgressDetail|null + */ + protected $progressDetail; + + public function getError(): ?string + { + return $this->error; + } + + public function setError(?string $error): self + { + $this->initialized['error'] = true; + $this->error = $error; + + return $this; + } + + public function getStatus(): ?string + { + return $this->status; + } + + public function setStatus(?string $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + public function getProgress(): ?string + { + return $this->progress; + } + + public function setProgress(?string $progress): self + { + $this->initialized['progress'] = true; + $this->progress = $progress; + + return $this; + } + + public function getProgressDetail(): ?ProgressDetail + { + return $this->progressDetail; + } + + public function setProgressDetail(?ProgressDetail $progressDetail): self + { + $this->initialized['progressDetail'] = true; + $this->progressDetail = $progressDetail; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/RegistryServiceConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/RegistryServiceConfig.php new file mode 100644 index 000000000..bda10c0a1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/RegistryServiceConfig.php @@ -0,0 +1,343 @@ +initialized); + } + /** + * List of IP ranges to which nondistributable artifacts can be pushed, + * using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632). + * + * Some images (for example, Windows base images) contain artifacts + * whose distribution is restricted by license. When these images are + * pushed to a registry, restricted artifacts are not included. + * + * This configuration override this behavior, and enables the daemon to + * push nondistributable artifacts to all registries whose resolved IP + * address is within the subnet described by the CIDR syntax. + * + * This option is useful when pushing images containing + * nondistributable artifacts to a registry on an air-gapped network so + * hosts on that network can pull the images without connecting to + * another server. + * + * > **Warning**: Nondistributable artifacts typically have restrictions + * > on how and where they can be distributed and shared. Only use this + * > feature to push artifacts to private registries and ensure that you + * > are in compliance with any terms that cover redistributing + * > nondistributable artifacts. + * + * @var list|null + */ + protected $allowNondistributableArtifactsCIDRs; + /** + * List of registry hostnames to which nondistributable artifacts can be + * pushed, using the format `[:]` or `[:]`. + * + * Some images (for example, Windows base images) contain artifacts + * whose distribution is restricted by license. When these images are + * pushed to a registry, restricted artifacts are not included. + * + * This configuration override this behavior for the specified + * registries. + * + * This option is useful when pushing images containing + * nondistributable artifacts to a registry on an air-gapped network so + * hosts on that network can pull the images without connecting to + * another server. + * + * > **Warning**: Nondistributable artifacts typically have restrictions + * > on how and where they can be distributed and shared. Only use this + * > feature to push artifacts to private registries and ensure that you + * > are in compliance with any terms that cover redistributing + * > nondistributable artifacts. + * + * @var list|null + */ + protected $allowNondistributableArtifactsHostnames; + /** + * List of IP ranges of insecure registries, using the CIDR syntax + * ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + * accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + * from unknown CAs) communication. + * + * By default, local registries (`127.0.0.0/8`) are configured as + * insecure. All other registries are secure. Communicating with an + * insecure registry is not possible if the daemon assumes that registry + * is secure. + * + * This configuration override this behavior, insecure communication with + * registries whose resolved IP address is within the subnet described by + * the CIDR syntax. + * + * Registries can also be marked insecure by hostname. Those registries + * are listed under `IndexConfigs` and have their `Secure` field set to + * `false`. + * + * > **Warning**: Using this option can be useful when running a local + * > registry, but introduces security vulnerabilities. This option + * > should therefore ONLY be used for testing purposes. For increased + * > security, users should add their CA to their system's list of trusted + * > CAs instead of enabling this option. + * + * @var list|null + */ + protected $insecureRegistryCIDRs; + /** + * @var array|null + */ + protected $indexConfigs; + /** + * List of registry URLs that act as a mirror for the official + * (`docker.io`) registry. + * + * @var list|null + */ + protected $mirrors; + + /** + * List of IP ranges to which nondistributable artifacts can be pushed, + * using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632). + * + * Some images (for example, Windows base images) contain artifacts + * whose distribution is restricted by license. When these images are + * pushed to a registry, restricted artifacts are not included. + * + * This configuration override this behavior, and enables the daemon to + * push nondistributable artifacts to all registries whose resolved IP + * address is within the subnet described by the CIDR syntax. + * + * This option is useful when pushing images containing + * nondistributable artifacts to a registry on an air-gapped network so + * hosts on that network can pull the images without connecting to + * another server. + * + * > **Warning**: Nondistributable artifacts typically have restrictions + * > on how and where they can be distributed and shared. Only use this + * > feature to push artifacts to private registries and ensure that you + * > are in compliance with any terms that cover redistributing + * > nondistributable artifacts. + * + * @return list|null + */ + public function getAllowNondistributableArtifactsCIDRs(): ?array + { + return $this->allowNondistributableArtifactsCIDRs; + } + + /** + * List of IP ranges to which nondistributable artifacts can be pushed, + * using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632). + * + * Some images (for example, Windows base images) contain artifacts + * whose distribution is restricted by license. When these images are + * pushed to a registry, restricted artifacts are not included. + * + * This configuration override this behavior, and enables the daemon to + * push nondistributable artifacts to all registries whose resolved IP + * address is within the subnet described by the CIDR syntax. + * + * This option is useful when pushing images containing + * nondistributable artifacts to a registry on an air-gapped network so + * hosts on that network can pull the images without connecting to + * another server. + * + * > **Warning**: Nondistributable artifacts typically have restrictions + * > on how and where they can be distributed and shared. Only use this + * > feature to push artifacts to private registries and ensure that you + * > are in compliance with any terms that cover redistributing + * > nondistributable artifacts. + * + * @param list|null $allowNondistributableArtifactsCIDRs + */ + public function setAllowNondistributableArtifactsCIDRs(?array $allowNondistributableArtifactsCIDRs): self + { + $this->initialized['allowNondistributableArtifactsCIDRs'] = true; + $this->allowNondistributableArtifactsCIDRs = $allowNondistributableArtifactsCIDRs; + + return $this; + } + + /** + * List of registry hostnames to which nondistributable artifacts can be + * pushed, using the format `[:]` or `[:]`. + * + * Some images (for example, Windows base images) contain artifacts + * whose distribution is restricted by license. When these images are + * pushed to a registry, restricted artifacts are not included. + * + * This configuration override this behavior for the specified + * registries. + * + * This option is useful when pushing images containing + * nondistributable artifacts to a registry on an air-gapped network so + * hosts on that network can pull the images without connecting to + * another server. + * + * > **Warning**: Nondistributable artifacts typically have restrictions + * > on how and where they can be distributed and shared. Only use this + * > feature to push artifacts to private registries and ensure that you + * > are in compliance with any terms that cover redistributing + * > nondistributable artifacts. + * + * @return list|null + */ + public function getAllowNondistributableArtifactsHostnames(): ?array + { + return $this->allowNondistributableArtifactsHostnames; + } + + /** + * List of registry hostnames to which nondistributable artifacts can be + * pushed, using the format `[:]` or `[:]`. + * + * Some images (for example, Windows base images) contain artifacts + * whose distribution is restricted by license. When these images are + * pushed to a registry, restricted artifacts are not included. + * + * This configuration override this behavior for the specified + * registries. + * + * This option is useful when pushing images containing + * nondistributable artifacts to a registry on an air-gapped network so + * hosts on that network can pull the images without connecting to + * another server. + * + * > **Warning**: Nondistributable artifacts typically have restrictions + * > on how and where they can be distributed and shared. Only use this + * > feature to push artifacts to private registries and ensure that you + * > are in compliance with any terms that cover redistributing + * > nondistributable artifacts. + * + * @param list|null $allowNondistributableArtifactsHostnames + */ + public function setAllowNondistributableArtifactsHostnames(?array $allowNondistributableArtifactsHostnames): self + { + $this->initialized['allowNondistributableArtifactsHostnames'] = true; + $this->allowNondistributableArtifactsHostnames = $allowNondistributableArtifactsHostnames; + + return $this; + } + + /** + * List of IP ranges of insecure registries, using the CIDR syntax + * ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + * accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + * from unknown CAs) communication. + * + * By default, local registries (`127.0.0.0/8`) are configured as + * insecure. All other registries are secure. Communicating with an + * insecure registry is not possible if the daemon assumes that registry + * is secure. + * + * This configuration override this behavior, insecure communication with + * registries whose resolved IP address is within the subnet described by + * the CIDR syntax. + * + * Registries can also be marked insecure by hostname. Those registries + * are listed under `IndexConfigs` and have their `Secure` field set to + * `false`. + * + * > **Warning**: Using this option can be useful when running a local + * > registry, but introduces security vulnerabilities. This option + * > should therefore ONLY be used for testing purposes. For increased + * > security, users should add their CA to their system's list of trusted + * > CAs instead of enabling this option. + * + * @return list|null + */ + public function getInsecureRegistryCIDRs(): ?array + { + return $this->insecureRegistryCIDRs; + } + + /** + * List of IP ranges of insecure registries, using the CIDR syntax + * ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + * accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + * from unknown CAs) communication. + * + * By default, local registries (`127.0.0.0/8`) are configured as + * insecure. All other registries are secure. Communicating with an + * insecure registry is not possible if the daemon assumes that registry + * is secure. + * + * This configuration override this behavior, insecure communication with + * registries whose resolved IP address is within the subnet described by + * the CIDR syntax. + * + * Registries can also be marked insecure by hostname. Those registries + * are listed under `IndexConfigs` and have their `Secure` field set to + * `false`. + * + * > **Warning**: Using this option can be useful when running a local + * > registry, but introduces security vulnerabilities. This option + * > should therefore ONLY be used for testing purposes. For increased + * > security, users should add their CA to their system's list of trusted + * > CAs instead of enabling this option. + * + * @param list|null $insecureRegistryCIDRs + */ + public function setInsecureRegistryCIDRs(?array $insecureRegistryCIDRs): self + { + $this->initialized['insecureRegistryCIDRs'] = true; + $this->insecureRegistryCIDRs = $insecureRegistryCIDRs; + + return $this; + } + + /** + * @return array|null + */ + public function getIndexConfigs(): ?iterable + { + return $this->indexConfigs; + } + + /** + * @param array|null $indexConfigs + */ + public function setIndexConfigs(?iterable $indexConfigs): self + { + $this->initialized['indexConfigs'] = true; + $this->indexConfigs = $indexConfigs; + + return $this; + } + + /** + * List of registry URLs that act as a mirror for the official + * (`docker.io`) registry. + * + * @return list|null + */ + public function getMirrors(): ?array + { + return $this->mirrors; + } + + /** + * List of registry URLs that act as a mirror for the official + * (`docker.io`) registry. + * + * @param list|null $mirrors + */ + public function setMirrors(?array $mirrors): self + { + $this->initialized['mirrors'] = true; + $this->mirrors = $mirrors; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ResourceObject.php b/app/vendor/beluga-php/docker-php-api/src/Model/ResourceObject.php new file mode 100644 index 000000000..b8b1ec65f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ResourceObject.php @@ -0,0 +1,84 @@ +initialized); + } + /** + * @var int|null + */ + protected $nanoCPUs; + /** + * @var int|null + */ + protected $memoryBytes; + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @var list|null + */ + protected $genericResources; + + public function getNanoCPUs(): ?int + { + return $this->nanoCPUs; + } + + public function setNanoCPUs(?int $nanoCPUs): self + { + $this->initialized['nanoCPUs'] = true; + $this->nanoCPUs = $nanoCPUs; + + return $this; + } + + public function getMemoryBytes(): ?int + { + return $this->memoryBytes; + } + + public function setMemoryBytes(?int $memoryBytes): self + { + $this->initialized['memoryBytes'] = true; + $this->memoryBytes = $memoryBytes; + + return $this; + } + + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @return list|null + */ + public function getGenericResources(): ?array + { + return $this->genericResources; + } + + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @param list|null $genericResources + */ + public function setGenericResources(?array $genericResources): self + { + $this->initialized['genericResources'] = true; + $this->genericResources = $genericResources; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Resources.php b/app/vendor/beluga-php/docker-php-api/src/Model/Resources.php new file mode 100644 index 000000000..ac83f6c45 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Resources.php @@ -0,0 +1,976 @@ +initialized); + } + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + * + * @var int|null + */ + protected $cpuShares; + /** + * Memory limit in bytes. + * + * @var int|null + */ + protected $memory = 0; + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + * + * @var string|null + */ + protected $cgroupParent; + /** + * Block IO weight (relative weight). + * + * @var int|null + */ + protected $blkioWeight; + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @var list|null + */ + protected $blkioWeightDevice; + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceReadBps; + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceWriteBps; + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceReadIOps; + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @var list|null + */ + protected $blkioDeviceWriteIOps; + /** + * The length of a CPU period in microseconds. + * + * @var int|null + */ + protected $cpuPeriod; + /** + * Microseconds of CPU time that the container can get in a CPU period. + * + * @var int|null + */ + protected $cpuQuota; + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + * + * @var int|null + */ + protected $cpuRealtimePeriod; + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + * + * @var int|null + */ + protected $cpuRealtimeRuntime; + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + * + * @var string|null + */ + protected $cpusetCpus; + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + * + * @var string|null + */ + protected $cpusetMems; + /** + * A list of devices to add to the container. + * + * @var list|null + */ + protected $devices; + /** + * a list of cgroup rules to apply to the container. + * + * @var list|null + */ + protected $deviceCgroupRules; + /** + * A list of requests for devices to be sent to device drivers. + * + * @var list|null + */ + protected $deviceRequests; + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + * + * @var int|null + */ + protected $kernelMemoryTCP; + /** + * Memory soft limit in bytes. + * + * @var int|null + */ + protected $memoryReservation; + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + * + * @var int|null + */ + protected $memorySwap; + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + * + * @var int|null + */ + protected $memorySwappiness; + /** + * CPU quota in units of 10-9 CPUs. + * + * @var int|null + */ + protected $nanoCpus; + /** + * Disable OOM Killer for the container. + * + * @var bool|null + */ + protected $oomKillDisable; + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + * + * @var bool|null + */ + protected $init; + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + * + * @var int|null + */ + protected $pidsLimit; + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @var list|null + */ + protected $ulimits; + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + * + * @var int|null + */ + protected $cpuCount; + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + * + * @var int|null + */ + protected $cpuPercent; + /** + * Maximum IOps for the container system drive (Windows only). + * + * @var int|null + */ + protected $iOMaximumIOps; + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + * + * @var int|null + */ + protected $iOMaximumBandwidth; + + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + */ + public function getCpuShares(): ?int + { + return $this->cpuShares; + } + + /** + * An integer value representing this container's relative CPU weight + * versus other containers. + */ + public function setCpuShares(?int $cpuShares): self + { + $this->initialized['cpuShares'] = true; + $this->cpuShares = $cpuShares; + + return $this; + } + + /** + * Memory limit in bytes. + */ + public function getMemory(): ?int + { + return $this->memory; + } + + /** + * Memory limit in bytes. + */ + public function setMemory(?int $memory): self + { + $this->initialized['memory'] = true; + $this->memory = $memory; + + return $this; + } + + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + */ + public function getCgroupParent(): ?string + { + return $this->cgroupParent; + } + + /** + * Path to `cgroups` under which the container's `cgroup` is created. If + * the path is not absolute, the path is considered to be relative to the + * `cgroups` path of the init process. Cgroups are created if they do not + * already exist. + */ + public function setCgroupParent(?string $cgroupParent): self + { + $this->initialized['cgroupParent'] = true; + $this->cgroupParent = $cgroupParent; + + return $this; + } + + /** + * Block IO weight (relative weight). + */ + public function getBlkioWeight(): ?int + { + return $this->blkioWeight; + } + + /** + * Block IO weight (relative weight). + */ + public function setBlkioWeight(?int $blkioWeight): self + { + $this->initialized['blkioWeight'] = true; + $this->blkioWeight = $blkioWeight; + + return $this; + } + + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @return list|null + */ + public function getBlkioWeightDevice(): ?array + { + return $this->blkioWeightDevice; + } + + /** + * Block IO weight (relative device weight) in the form: + * + * ``` + * [{"Path": "device_path", "Weight": weight}] + * ``` + * + * @param list|null $blkioWeightDevice + */ + public function setBlkioWeightDevice(?array $blkioWeightDevice): self + { + $this->initialized['blkioWeightDevice'] = true; + $this->blkioWeightDevice = $blkioWeightDevice; + + return $this; + } + + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceReadBps(): ?array + { + return $this->blkioDeviceReadBps; + } + + /** + * Limit read rate (bytes per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceReadBps + */ + public function setBlkioDeviceReadBps(?array $blkioDeviceReadBps): self + { + $this->initialized['blkioDeviceReadBps'] = true; + $this->blkioDeviceReadBps = $blkioDeviceReadBps; + + return $this; + } + + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceWriteBps(): ?array + { + return $this->blkioDeviceWriteBps; + } + + /** + * Limit write rate (bytes per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceWriteBps + */ + public function setBlkioDeviceWriteBps(?array $blkioDeviceWriteBps): self + { + $this->initialized['blkioDeviceWriteBps'] = true; + $this->blkioDeviceWriteBps = $blkioDeviceWriteBps; + + return $this; + } + + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceReadIOps(): ?array + { + return $this->blkioDeviceReadIOps; + } + + /** + * Limit read rate (IO per second) from a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceReadIOps + */ + public function setBlkioDeviceReadIOps(?array $blkioDeviceReadIOps): self + { + $this->initialized['blkioDeviceReadIOps'] = true; + $this->blkioDeviceReadIOps = $blkioDeviceReadIOps; + + return $this; + } + + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @return list|null + */ + public function getBlkioDeviceWriteIOps(): ?array + { + return $this->blkioDeviceWriteIOps; + } + + /** + * Limit write rate (IO per second) to a device, in the form: + * + * ``` + * [{"Path": "device_path", "Rate": rate}] + * ``` + * + * @param list|null $blkioDeviceWriteIOps + */ + public function setBlkioDeviceWriteIOps(?array $blkioDeviceWriteIOps): self + { + $this->initialized['blkioDeviceWriteIOps'] = true; + $this->blkioDeviceWriteIOps = $blkioDeviceWriteIOps; + + return $this; + } + + /** + * The length of a CPU period in microseconds. + */ + public function getCpuPeriod(): ?int + { + return $this->cpuPeriod; + } + + /** + * The length of a CPU period in microseconds. + */ + public function setCpuPeriod(?int $cpuPeriod): self + { + $this->initialized['cpuPeriod'] = true; + $this->cpuPeriod = $cpuPeriod; + + return $this; + } + + /** + * Microseconds of CPU time that the container can get in a CPU period. + */ + public function getCpuQuota(): ?int + { + return $this->cpuQuota; + } + + /** + * Microseconds of CPU time that the container can get in a CPU period. + */ + public function setCpuQuota(?int $cpuQuota): self + { + $this->initialized['cpuQuota'] = true; + $this->cpuQuota = $cpuQuota; + + return $this; + } + + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function getCpuRealtimePeriod(): ?int + { + return $this->cpuRealtimePeriod; + } + + /** + * The length of a CPU real-time period in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function setCpuRealtimePeriod(?int $cpuRealtimePeriod): self + { + $this->initialized['cpuRealtimePeriod'] = true; + $this->cpuRealtimePeriod = $cpuRealtimePeriod; + + return $this; + } + + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function getCpuRealtimeRuntime(): ?int + { + return $this->cpuRealtimeRuntime; + } + + /** + * The length of a CPU real-time runtime in microseconds. Set to 0 to + * allocate no time allocated to real-time tasks. + */ + public function setCpuRealtimeRuntime(?int $cpuRealtimeRuntime): self + { + $this->initialized['cpuRealtimeRuntime'] = true; + $this->cpuRealtimeRuntime = $cpuRealtimeRuntime; + + return $this; + } + + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + */ + public function getCpusetCpus(): ?string + { + return $this->cpusetCpus; + } + + /** + * CPUs in which to allow execution (e.g., `0-3`, `0,1`). + */ + public function setCpusetCpus(?string $cpusetCpus): self + { + $this->initialized['cpusetCpus'] = true; + $this->cpusetCpus = $cpusetCpus; + + return $this; + } + + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + */ + public function getCpusetMems(): ?string + { + return $this->cpusetMems; + } + + /** + * Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + * effective on NUMA systems. + */ + public function setCpusetMems(?string $cpusetMems): self + { + $this->initialized['cpusetMems'] = true; + $this->cpusetMems = $cpusetMems; + + return $this; + } + + /** + * A list of devices to add to the container. + * + * @return list|null + */ + public function getDevices(): ?array + { + return $this->devices; + } + + /** + * A list of devices to add to the container. + * + * @param list|null $devices + */ + public function setDevices(?array $devices): self + { + $this->initialized['devices'] = true; + $this->devices = $devices; + + return $this; + } + + /** + * a list of cgroup rules to apply to the container. + * + * @return list|null + */ + public function getDeviceCgroupRules(): ?array + { + return $this->deviceCgroupRules; + } + + /** + * a list of cgroup rules to apply to the container. + * + * @param list|null $deviceCgroupRules + */ + public function setDeviceCgroupRules(?array $deviceCgroupRules): self + { + $this->initialized['deviceCgroupRules'] = true; + $this->deviceCgroupRules = $deviceCgroupRules; + + return $this; + } + + /** + * A list of requests for devices to be sent to device drivers. + * + * @return list|null + */ + public function getDeviceRequests(): ?array + { + return $this->deviceRequests; + } + + /** + * A list of requests for devices to be sent to device drivers. + * + * @param list|null $deviceRequests + */ + public function setDeviceRequests(?array $deviceRequests): self + { + $this->initialized['deviceRequests'] = true; + $this->deviceRequests = $deviceRequests; + + return $this; + } + + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + */ + public function getKernelMemoryTCP(): ?int + { + return $this->kernelMemoryTCP; + } + + /** + * Hard limit for kernel TCP buffer memory (in bytes). Depending on the + * OCI runtime in use, this option may be ignored. It is no longer supported + * by the default (runc) runtime. + * + * This field is omitted when empty. + */ + public function setKernelMemoryTCP(?int $kernelMemoryTCP): self + { + $this->initialized['kernelMemoryTCP'] = true; + $this->kernelMemoryTCP = $kernelMemoryTCP; + + return $this; + } + + /** + * Memory soft limit in bytes. + */ + public function getMemoryReservation(): ?int + { + return $this->memoryReservation; + } + + /** + * Memory soft limit in bytes. + */ + public function setMemoryReservation(?int $memoryReservation): self + { + $this->initialized['memoryReservation'] = true; + $this->memoryReservation = $memoryReservation; + + return $this; + } + + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + */ + public function getMemorySwap(): ?int + { + return $this->memorySwap; + } + + /** + * Total memory limit (memory + swap). Set as `-1` to enable unlimited + * swap. + */ + public function setMemorySwap(?int $memorySwap): self + { + $this->initialized['memorySwap'] = true; + $this->memorySwap = $memorySwap; + + return $this; + } + + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + */ + public function getMemorySwappiness(): ?int + { + return $this->memorySwappiness; + } + + /** + * Tune a container's memory swappiness behavior. Accepts an integer + * between 0 and 100. + */ + public function setMemorySwappiness(?int $memorySwappiness): self + { + $this->initialized['memorySwappiness'] = true; + $this->memorySwappiness = $memorySwappiness; + + return $this; + } + + /** + * CPU quota in units of 10-9 CPUs. + */ + public function getNanoCpus(): ?int + { + return $this->nanoCpus; + } + + /** + * CPU quota in units of 10-9 CPUs. + */ + public function setNanoCpus(?int $nanoCpus): self + { + $this->initialized['nanoCpus'] = true; + $this->nanoCpus = $nanoCpus; + + return $this; + } + + /** + * Disable OOM Killer for the container. + */ + public function getOomKillDisable(): ?bool + { + return $this->oomKillDisable; + } + + /** + * Disable OOM Killer for the container. + */ + public function setOomKillDisable(?bool $oomKillDisable): self + { + $this->initialized['oomKillDisable'] = true; + $this->oomKillDisable = $oomKillDisable; + + return $this; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function getInit(): ?bool + { + return $this->init; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function setInit(?bool $init): self + { + $this->initialized['init'] = true; + $this->init = $init; + + return $this; + } + + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + */ + public function getPidsLimit(): ?int + { + return $this->pidsLimit; + } + + /** + * Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + * to not change. + */ + public function setPidsLimit(?int $pidsLimit): self + { + $this->initialized['pidsLimit'] = true; + $this->pidsLimit = $pidsLimit; + + return $this; + } + + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @return list|null + */ + public function getUlimits(): ?array + { + return $this->ulimits; + } + + /** + * A list of resource limits to set in the container. For example: + * + * ``` + * {"Name": "nofile", "Soft": 1024, "Hard": 2048} + * ``` + * + * @param list|null $ulimits + */ + public function setUlimits(?array $ulimits): self + { + $this->initialized['ulimits'] = true; + $this->ulimits = $ulimits; + + return $this; + } + + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function getCpuCount(): ?int + { + return $this->cpuCount; + } + + /** + * The number of usable CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function setCpuCount(?int $cpuCount): self + { + $this->initialized['cpuCount'] = true; + $this->cpuCount = $cpuCount; + + return $this; + } + + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function getCpuPercent(): ?int + { + return $this->cpuPercent; + } + + /** + * The usable percentage of the available CPUs (Windows only). + * + * On Windows Server containers, the processor resource controls are + * mutually exclusive. The order of precedence is `CPUCount` first, then + * `CPUShares`, and `CPUPercent` last. + */ + public function setCpuPercent(?int $cpuPercent): self + { + $this->initialized['cpuPercent'] = true; + $this->cpuPercent = $cpuPercent; + + return $this; + } + + /** + * Maximum IOps for the container system drive (Windows only). + */ + public function getIOMaximumIOps(): ?int + { + return $this->iOMaximumIOps; + } + + /** + * Maximum IOps for the container system drive (Windows only). + */ + public function setIOMaximumIOps(?int $iOMaximumIOps): self + { + $this->initialized['iOMaximumIOps'] = true; + $this->iOMaximumIOps = $iOMaximumIOps; + + return $this; + } + + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + */ + public function getIOMaximumBandwidth(): ?int + { + return $this->iOMaximumBandwidth; + } + + /** + * Maximum IO in bytes per second for the container system drive + * (Windows only). + */ + public function setIOMaximumBandwidth(?int $iOMaximumBandwidth): self + { + $this->initialized['iOMaximumBandwidth'] = true; + $this->iOMaximumBandwidth = $iOMaximumBandwidth; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ResourcesBlkioWeightDeviceItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ResourcesBlkioWeightDeviceItem.php new file mode 100644 index 000000000..9cfccfe3b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ResourcesBlkioWeightDeviceItem.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var string|null + */ + protected $path; + /** + * @var int|null + */ + protected $weight; + + public function getPath(): ?string + { + return $this->path; + } + + public function setPath(?string $path): self + { + $this->initialized['path'] = true; + $this->path = $path; + + return $this; + } + + public function getWeight(): ?int + { + return $this->weight; + } + + public function setWeight(?int $weight): self + { + $this->initialized['weight'] = true; + $this->weight = $weight; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ResourcesUlimitsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ResourcesUlimitsItem.php new file mode 100644 index 000000000..c457dc253 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ResourcesUlimitsItem.php @@ -0,0 +1,93 @@ +initialized); + } + /** + * Name of ulimit. + * + * @var string|null + */ + protected $name; + /** + * Soft limit. + * + * @var int|null + */ + protected $soft; + /** + * Hard limit. + * + * @var int|null + */ + protected $hard; + + /** + * Name of ulimit. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of ulimit. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Soft limit. + */ + public function getSoft(): ?int + { + return $this->soft; + } + + /** + * Soft limit. + */ + public function setSoft(?int $soft): self + { + $this->initialized['soft'] = true; + $this->soft = $soft; + + return $this; + } + + /** + * Hard limit. + */ + public function getHard(): ?int + { + return $this->hard; + } + + /** + * Hard limit. + */ + public function setHard(?int $hard): self + { + $this->initialized['hard'] = true; + $this->hard = $hard; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/RestartPolicy.php b/app/vendor/beluga-php/docker-php-api/src/Model/RestartPolicy.php new file mode 100644 index 000000000..f77a821dc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/RestartPolicy.php @@ -0,0 +1,80 @@ +initialized); + } + /** + * - Empty string means not to restart + * - `no` Do not automatically restart + * - `always` Always restart + * - `unless-stopped` Restart always except when the user has manually stopped the container + * - `on-failure` Restart only when the container exit code is non-zero. + * + * @var string|null + */ + protected $name; + /** + * If `on-failure` is used, the number of times to retry before giving up. + * + * @var int|null + */ + protected $maximumRetryCount; + + /** + * - Empty string means not to restart + * - `no` Do not automatically restart + * - `always` Always restart + * - `unless-stopped` Restart always except when the user has manually stopped the container + * - `on-failure` Restart only when the container exit code is non-zero. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * - Empty string means not to restart + * - `no` Do not automatically restart + * - `always` Always restart + * - `unless-stopped` Restart always except when the user has manually stopped the container + * - `on-failure` Restart only when the container exit code is non-zero. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * If `on-failure` is used, the number of times to retry before giving up. + */ + public function getMaximumRetryCount(): ?int + { + return $this->maximumRetryCount; + } + + /** + * If `on-failure` is used, the number of times to retry before giving up. + */ + public function setMaximumRetryCount(?int $maximumRetryCount): self + { + $this->initialized['maximumRetryCount'] = true; + $this->maximumRetryCount = $maximumRetryCount; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Runtime.php b/app/vendor/beluga-php/docker-php-api/src/Model/Runtime.php new file mode 100644 index 000000000..3def6b74b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Runtime.php @@ -0,0 +1,149 @@ +initialized); + } + /** + * Name and, optional, path, of the OCI executable binary. + * + * If the path is omitted, the daemon searches the host's `$PATH` for the + * binary and uses the first result. + * + * @var string|null + */ + protected $path; + /** + * List of command-line arguments to pass to the runtime when invoked. + * + * @var list|null + */ + protected $runtimeArgs; + /** + * Information specific to the runtime. + * + * While this API specification does not define data provided by runtimes, + * the following well-known properties may be provided by runtimes: + * + * `org.opencontainers.runtime-spec.features`: features structure as defined + * in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + * in a JSON string representation. + * + *


+ * + * > **Note**: The information returned in this field, including the + * > formatting of values and labels, should not be considered stable, + * > and may change without notice. + * + * @var array|null + */ + protected $status; + + /** + * Name and, optional, path, of the OCI executable binary. + * + * If the path is omitted, the daemon searches the host's `$PATH` for the + * binary and uses the first result. + */ + public function getPath(): ?string + { + return $this->path; + } + + /** + * Name and, optional, path, of the OCI executable binary. + * + * If the path is omitted, the daemon searches the host's `$PATH` for the + * binary and uses the first result. + */ + public function setPath(?string $path): self + { + $this->initialized['path'] = true; + $this->path = $path; + + return $this; + } + + /** + * List of command-line arguments to pass to the runtime when invoked. + * + * @return list|null + */ + public function getRuntimeArgs(): ?array + { + return $this->runtimeArgs; + } + + /** + * List of command-line arguments to pass to the runtime when invoked. + * + * @param list|null $runtimeArgs + */ + public function setRuntimeArgs(?array $runtimeArgs): self + { + $this->initialized['runtimeArgs'] = true; + $this->runtimeArgs = $runtimeArgs; + + return $this; + } + + /** + * Information specific to the runtime. + * + * While this API specification does not define data provided by runtimes, + * the following well-known properties may be provided by runtimes: + * + * `org.opencontainers.runtime-spec.features`: features structure as defined + * in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + * in a JSON string representation. + * + *


+ * + * > **Note**: The information returned in this field, including the + * > formatting of values and labels, should not be considered stable, + * > and may change without notice. + * + * @return array|null + */ + public function getStatus(): ?iterable + { + return $this->status; + } + + /** + * Information specific to the runtime. + * + * While this API specification does not define data provided by runtimes, + * the following well-known properties may be provided by runtimes: + * + * `org.opencontainers.runtime-spec.features`: features structure as defined + * in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + * in a JSON string representation. + * + *


+ * + * > **Note**: The information returned in this field, including the + * > formatting of values and labels, should not be considered stable, + * > and may change without notice. + * + * @param array|null $status + */ + public function setStatus(?iterable $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Secret.php b/app/vendor/beluga-php/docker-php-api/src/Model/Secret.php new file mode 100644 index 000000000..6cb7d8b23 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Secret.php @@ -0,0 +1,138 @@ +initialized); + } + /** + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * @var string|null + */ + protected $createdAt; + /** + * @var string|null + */ + protected $updatedAt; + /** + * @var SecretSpec|null + */ + protected $spec; + + public function getID(): ?string + { + return $this->iD; + } + + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + public function getSpec(): ?SecretSpec + { + return $this->spec; + } + + public function setSpec(?SecretSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SecretSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/SecretSpec.php new file mode 100644 index 000000000..324ef660b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SecretSpec.php @@ -0,0 +1,159 @@ +initialized); + } + /** + * User-defined name of the secret. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * data to store as secret. + * + * This field is only used to _create_ a secret, and is not returned by + * other endpoints. + * + * @var string|null + */ + protected $data; + /** + * Driver represents a driver (network, logging, secrets). + * + * @var Driver|null + */ + protected $driver; + /** + * Driver represents a driver (network, logging, secrets). + * + * @var Driver|null + */ + protected $templating; + + /** + * User-defined name of the secret. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * User-defined name of the secret. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * data to store as secret. + * + * This field is only used to _create_ a secret, and is not returned by + * other endpoints. + */ + public function getData(): ?string + { + return $this->data; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * data to store as secret. + * + * This field is only used to _create_ a secret, and is not returned by + * other endpoints. + */ + public function setData(?string $data): self + { + $this->initialized['data'] = true; + $this->data = $data; + + return $this; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function getDriver(): ?Driver + { + return $this->driver; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function setDriver(?Driver $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function getTemplating(): ?Driver + { + return $this->templating; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function setTemplating(?Driver $templating): self + { + $this->initialized['templating'] = true; + $this->templating = $templating; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SecretsCreatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/SecretsCreatePostBody.php new file mode 100644 index 000000000..2545eecd1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SecretsCreatePostBody.php @@ -0,0 +1,159 @@ +initialized); + } + /** + * User-defined name of the secret. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * data to store as secret. + * + * This field is only used to _create_ a secret, and is not returned by + * other endpoints. + * + * @var string|null + */ + protected $data; + /** + * Driver represents a driver (network, logging, secrets). + * + * @var Driver|null + */ + protected $driver; + /** + * Driver represents a driver (network, logging, secrets). + * + * @var Driver|null + */ + protected $templating; + + /** + * User-defined name of the secret. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * User-defined name of the secret. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * data to store as secret. + * + * This field is only used to _create_ a secret, and is not returned by + * other endpoints. + */ + public function getData(): ?string + { + return $this->data; + } + + /** + * Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) + * data to store as secret. + * + * This field is only used to _create_ a secret, and is not returned by + * other endpoints. + */ + public function setData(?string $data): self + { + $this->initialized['data'] = true; + $this->data = $data; + + return $this; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function getDriver(): ?Driver + { + return $this->driver; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function setDriver(?Driver $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function getTemplating(): ?Driver + { + return $this->templating; + } + + /** + * Driver represents a driver (network, logging, secrets). + */ + public function setTemplating(?Driver $templating): self + { + $this->initialized['templating'] = true; + $this->templating = $templating; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Service.php b/app/vendor/beluga-php/docker-php-api/src/Model/Service.php new file mode 100644 index 000000000..334cb307d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Service.php @@ -0,0 +1,250 @@ +initialized); + } + /** + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * @var string|null + */ + protected $createdAt; + /** + * @var string|null + */ + protected $updatedAt; + /** + * User modifiable configuration for a service. + * + * @var ServiceSpec|null + */ + protected $spec; + /** + * @var ServiceEndpoint|null + */ + protected $endpoint; + /** + * The status of a service update. + * + * @var ServiceUpdateStatus|null + */ + protected $updateStatus; + /** + * The status of the service's tasks. Provided only when requested as + * part of a ServiceList operation. + * + * @var ServiceServiceStatus|null + */ + protected $serviceStatus; + /** + * The status of the service when it is in one of ReplicatedJob or + * GlobalJob modes. Absent on Replicated and Global mode services. The + * JobIteration is an ObjectVersion, but unlike the Service's version, + * does not need to be sent with an update request. + * + * @var ServiceJobStatus|null + */ + protected $jobStatus; + + public function getID(): ?string + { + return $this->iD; + } + + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + /** + * User modifiable configuration for a service. + */ + public function getSpec(): ?ServiceSpec + { + return $this->spec; + } + + /** + * User modifiable configuration for a service. + */ + public function setSpec(?ServiceSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + public function getEndpoint(): ?ServiceEndpoint + { + return $this->endpoint; + } + + public function setEndpoint(?ServiceEndpoint $endpoint): self + { + $this->initialized['endpoint'] = true; + $this->endpoint = $endpoint; + + return $this; + } + + /** + * The status of a service update. + */ + public function getUpdateStatus(): ?ServiceUpdateStatus + { + return $this->updateStatus; + } + + /** + * The status of a service update. + */ + public function setUpdateStatus(?ServiceUpdateStatus $updateStatus): self + { + $this->initialized['updateStatus'] = true; + $this->updateStatus = $updateStatus; + + return $this; + } + + /** + * The status of the service's tasks. Provided only when requested as + * part of a ServiceList operation. + */ + public function getServiceStatus(): ?ServiceServiceStatus + { + return $this->serviceStatus; + } + + /** + * The status of the service's tasks. Provided only when requested as + * part of a ServiceList operation. + */ + public function setServiceStatus(?ServiceServiceStatus $serviceStatus): self + { + $this->initialized['serviceStatus'] = true; + $this->serviceStatus = $serviceStatus; + + return $this; + } + + /** + * The status of the service when it is in one of ReplicatedJob or + * GlobalJob modes. Absent on Replicated and Global mode services. The + * JobIteration is an ObjectVersion, but unlike the Service's version, + * does not need to be sent with an update request. + */ + public function getJobStatus(): ?ServiceJobStatus + { + return $this->jobStatus; + } + + /** + * The status of the service when it is in one of ReplicatedJob or + * GlobalJob modes. Absent on Replicated and Global mode services. The + * JobIteration is an ObjectVersion, but unlike the Service's version, + * does not need to be sent with an update request. + */ + public function setJobStatus(?ServiceJobStatus $jobStatus): self + { + $this->initialized['jobStatus'] = true; + $this->jobStatus = $jobStatus; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceCreateResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceCreateResponse.php new file mode 100644 index 000000000..ed60b267f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceCreateResponse.php @@ -0,0 +1,78 @@ +initialized); + } + /** + * The ID of the created service. + * + * @var string|null + */ + protected $iD; + /** + * Optional warning message. + * + * FIXME(thaJeztah): this should have "omitempty" in the generated type. + * + * @var list|null + */ + protected $warnings; + + /** + * The ID of the created service. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * The ID of the created service. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * Optional warning message. + * + * FIXME(thaJeztah): this should have "omitempty" in the generated type. + * + * @return list|null + */ + public function getWarnings(): ?array + { + return $this->warnings; + } + + /** + * Optional warning message. + * + * FIXME(thaJeztah): this should have "omitempty" in the generated type. + * + * @param list|null $warnings + */ + public function setWarnings(?array $warnings): self + { + $this->initialized['warnings'] = true; + $this->warnings = $warnings; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceEndpoint.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceEndpoint.php new file mode 100644 index 000000000..0c070487a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceEndpoint.php @@ -0,0 +1,89 @@ +initialized); + } + /** + * Properties that can be configured to access and load balance a service. + * + * @var EndpointSpec|null + */ + protected $spec; + /** + * @var list|null + */ + protected $ports; + /** + * @var list|null + */ + protected $virtualIPs; + + /** + * Properties that can be configured to access and load balance a service. + */ + public function getSpec(): ?EndpointSpec + { + return $this->spec; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function setSpec(?EndpointSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + /** + * @return list|null + */ + public function getPorts(): ?array + { + return $this->ports; + } + + /** + * @param list|null $ports + */ + public function setPorts(?array $ports): self + { + $this->initialized['ports'] = true; + $this->ports = $ports; + + return $this; + } + + /** + * @return list|null + */ + public function getVirtualIPs(): ?array + { + return $this->virtualIPs; + } + + /** + * @param list|null $virtualIPs + */ + public function setVirtualIPs(?array $virtualIPs): self + { + $this->initialized['virtualIPs'] = true; + $this->virtualIPs = $virtualIPs; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceEndpointVirtualIPsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceEndpointVirtualIPsItem.php new file mode 100644 index 000000000..6b8c510b7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceEndpointVirtualIPsItem.php @@ -0,0 +1,52 @@ +initialized); + } + /** + * @var string|null + */ + protected $networkID; + /** + * @var string|null + */ + protected $addr; + + public function getNetworkID(): ?string + { + return $this->networkID; + } + + public function setNetworkID(?string $networkID): self + { + $this->initialized['networkID'] = true; + $this->networkID = $networkID; + + return $this; + } + + public function getAddr(): ?string + { + return $this->addr; + } + + public function setAddr(?string $addr): self + { + $this->initialized['addr'] = true; + $this->addr = $addr; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceJobStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceJobStatus.php new file mode 100644 index 000000000..f77d6e55e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceJobStatus.php @@ -0,0 +1,98 @@ +initialized); + } + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $jobIteration; + /** + * The last time, as observed by the server, that this job was + * started. + * + * @var string|null + */ + protected $lastExecution; + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getJobIteration(): ?ObjectVersion + { + return $this->jobIteration; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setJobIteration(?ObjectVersion $jobIteration): self + { + $this->initialized['jobIteration'] = true; + $this->jobIteration = $jobIteration; + + return $this; + } + + /** + * The last time, as observed by the server, that this job was + * started. + */ + public function getLastExecution(): ?string + { + return $this->lastExecution; + } + + /** + * The last time, as observed by the server, that this job was + * started. + */ + public function setLastExecution(?string $lastExecution): self + { + $this->initialized['lastExecution'] = true; + $this->lastExecution = $lastExecution; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceServiceStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceServiceStatus.php new file mode 100644 index 000000000..dd4641062 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceServiceStatus.php @@ -0,0 +1,114 @@ +initialized); + } + /** + * The number of tasks for the service currently in the Running state. + * + * @var int|null + */ + protected $runningTasks; + /** + * The number of tasks for the service desired to be running. + * For replicated services, this is the replica count from the + * service spec. For global services, this is computed by taking + * count of all tasks for the service with a Desired State other + * than Shutdown. + * + * @var int|null + */ + protected $desiredTasks; + /** + * The number of tasks for a job that are in the Completed state. + * This field must be cross-referenced with the service type, as the + * value of 0 may mean the service is not in a job mode, or it may + * mean the job-mode service has no tasks yet Completed. + * + * @var int|null + */ + protected $completedTasks; + + /** + * The number of tasks for the service currently in the Running state. + */ + public function getRunningTasks(): ?int + { + return $this->runningTasks; + } + + /** + * The number of tasks for the service currently in the Running state. + */ + public function setRunningTasks(?int $runningTasks): self + { + $this->initialized['runningTasks'] = true; + $this->runningTasks = $runningTasks; + + return $this; + } + + /** + * The number of tasks for the service desired to be running. + * For replicated services, this is the replica count from the + * service spec. For global services, this is computed by taking + * count of all tasks for the service with a Desired State other + * than Shutdown. + */ + public function getDesiredTasks(): ?int + { + return $this->desiredTasks; + } + + /** + * The number of tasks for the service desired to be running. + * For replicated services, this is the replica count from the + * service spec. For global services, this is computed by taking + * count of all tasks for the service with a Desired State other + * than Shutdown. + */ + public function setDesiredTasks(?int $desiredTasks): self + { + $this->initialized['desiredTasks'] = true; + $this->desiredTasks = $desiredTasks; + + return $this; + } + + /** + * The number of tasks for a job that are in the Completed state. + * This field must be cross-referenced with the service type, as the + * value of 0 may mean the service is not in a job mode, or it may + * mean the job-mode service has no tasks yet Completed. + */ + public function getCompletedTasks(): ?int + { + return $this->completedTasks; + } + + /** + * The number of tasks for a job that are in the Completed state. + * This field must be cross-referenced with the service type, as the + * value of 0 may mean the service is not in a job mode, or it may + * mean the job-mode service has no tasks yet Completed. + */ + public function setCompletedTasks(?int $completedTasks): self + { + $this->initialized['completedTasks'] = true; + $this->completedTasks = $completedTasks; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpec.php new file mode 100644 index 000000000..0c09c857c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpec.php @@ -0,0 +1,232 @@ +initialized); + } + /** + * Name of the service. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * User modifiable task configuration. + * + * @var TaskSpec|null + */ + protected $taskTemplate; + /** + * Scheduling mode for the service. + * + * @var ServiceSpecMode|null + */ + protected $mode; + /** + * Specification for the update strategy of the service. + * + * @var ServiceSpecUpdateConfig|null + */ + protected $updateConfig; + /** + * Specification for the rollback strategy of the service. + * + * @var ServiceSpecRollbackConfig|null + */ + protected $rollbackConfig; + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @var list|null + */ + protected $networks; + /** + * Properties that can be configured to access and load balance a service. + * + * @var EndpointSpec|null + */ + protected $endpointSpec; + + /** + * Name of the service. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the service. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * User modifiable task configuration. + */ + public function getTaskTemplate(): ?TaskSpec + { + return $this->taskTemplate; + } + + /** + * User modifiable task configuration. + */ + public function setTaskTemplate(?TaskSpec $taskTemplate): self + { + $this->initialized['taskTemplate'] = true; + $this->taskTemplate = $taskTemplate; + + return $this; + } + + /** + * Scheduling mode for the service. + */ + public function getMode(): ?ServiceSpecMode + { + return $this->mode; + } + + /** + * Scheduling mode for the service. + */ + public function setMode(?ServiceSpecMode $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } + + /** + * Specification for the update strategy of the service. + */ + public function getUpdateConfig(): ?ServiceSpecUpdateConfig + { + return $this->updateConfig; + } + + /** + * Specification for the update strategy of the service. + */ + public function setUpdateConfig(?ServiceSpecUpdateConfig $updateConfig): self + { + $this->initialized['updateConfig'] = true; + $this->updateConfig = $updateConfig; + + return $this; + } + + /** + * Specification for the rollback strategy of the service. + */ + public function getRollbackConfig(): ?ServiceSpecRollbackConfig + { + return $this->rollbackConfig; + } + + /** + * Specification for the rollback strategy of the service. + */ + public function setRollbackConfig(?ServiceSpecRollbackConfig $rollbackConfig): self + { + $this->initialized['rollbackConfig'] = true; + $this->rollbackConfig = $rollbackConfig; + + return $this; + } + + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @return list|null + */ + public function getNetworks(): ?array + { + return $this->networks; + } + + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @param list|null $networks + */ + public function setNetworks(?array $networks): self + { + $this->initialized['networks'] = true; + $this->networks = $networks; + + return $this; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function getEndpointSpec(): ?EndpointSpec + { + return $this->endpointSpec; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function setEndpointSpec(?EndpointSpec $endpointSpec): self + { + $this->initialized['endpointSpec'] = true; + $this->endpointSpec = $endpointSpec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecMode.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecMode.php new file mode 100644 index 000000000..72a8185b9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecMode.php @@ -0,0 +1,108 @@ +initialized); + } + /** + * @var ServiceSpecModeReplicated|null + */ + protected $replicated; + /** + * @var ServiceSpecModeGlobal|null + */ + protected $global; + /** + * The mode used for services with a finite number of tasks that run + * to a completed state. + * + * @var ServiceSpecModeReplicatedJob|null + */ + protected $replicatedJob; + /** + * The mode used for services which run a task to the completed state + * on each valid node. + * + * @var ServiceSpecModeGlobalJob|null + */ + protected $globalJob; + + public function getReplicated(): ?ServiceSpecModeReplicated + { + return $this->replicated; + } + + public function setReplicated(?ServiceSpecModeReplicated $replicated): self + { + $this->initialized['replicated'] = true; + $this->replicated = $replicated; + + return $this; + } + + public function getGlobal(): ?ServiceSpecModeGlobal + { + return $this->global; + } + + public function setGlobal(?ServiceSpecModeGlobal $global): self + { + $this->initialized['global'] = true; + $this->global = $global; + + return $this; + } + + /** + * The mode used for services with a finite number of tasks that run + * to a completed state. + */ + public function getReplicatedJob(): ?ServiceSpecModeReplicatedJob + { + return $this->replicatedJob; + } + + /** + * The mode used for services with a finite number of tasks that run + * to a completed state. + */ + public function setReplicatedJob(?ServiceSpecModeReplicatedJob $replicatedJob): self + { + $this->initialized['replicatedJob'] = true; + $this->replicatedJob = $replicatedJob; + + return $this; + } + + /** + * The mode used for services which run a task to the completed state + * on each valid node. + */ + public function getGlobalJob(): ?ServiceSpecModeGlobalJob + { + return $this->globalJob; + } + + /** + * The mode used for services which run a task to the completed state + * on each valid node. + */ + public function setGlobalJob(?ServiceSpecModeGlobalJob $globalJob): self + { + $this->initialized['globalJob'] = true; + $this->globalJob = $globalJob; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeGlobal.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeGlobal.php new file mode 100644 index 000000000..d1089e36f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeGlobal.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeGlobalJob.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeGlobalJob.php new file mode 100644 index 000000000..33932becb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeGlobalJob.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeReplicated.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeReplicated.php new file mode 100644 index 000000000..7a25296d1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeReplicated.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var int|null + */ + protected $replicas; + + public function getReplicas(): ?int + { + return $this->replicas; + } + + public function setReplicas(?int $replicas): self + { + $this->initialized['replicas'] = true; + $this->replicas = $replicas; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeReplicatedJob.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeReplicatedJob.php new file mode 100644 index 000000000..f0642655b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecModeReplicatedJob.php @@ -0,0 +1,71 @@ +initialized); + } + /** + * The maximum number of replicas to run simultaneously. + * + * @var int|null + */ + protected $maxConcurrent = 1; + /** + * The total number of replicas desired to reach the Completed + * state. If unset, will default to the value of `MaxConcurrent`. + * + * @var int|null + */ + protected $totalCompletions; + + /** + * The maximum number of replicas to run simultaneously. + */ + public function getMaxConcurrent(): ?int + { + return $this->maxConcurrent; + } + + /** + * The maximum number of replicas to run simultaneously. + */ + public function setMaxConcurrent(?int $maxConcurrent): self + { + $this->initialized['maxConcurrent'] = true; + $this->maxConcurrent = $maxConcurrent; + + return $this; + } + + /** + * The total number of replicas desired to reach the Completed + * state. If unset, will default to the value of `MaxConcurrent`. + */ + public function getTotalCompletions(): ?int + { + return $this->totalCompletions; + } + + /** + * The total number of replicas desired to reach the Completed + * state. If unset, will default to the value of `MaxConcurrent`. + */ + public function setTotalCompletions(?int $totalCompletions): self + { + $this->initialized['totalCompletions'] = true; + $this->totalCompletions = $totalCompletions; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecRollbackConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecRollbackConfig.php new file mode 100644 index 000000000..c630b335d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecRollbackConfig.php @@ -0,0 +1,189 @@ +initialized); + } + /** + * Maximum number of tasks to be rolled back in one iteration (0 means + * unlimited parallelism). + * + * @var int|null + */ + protected $parallelism; + /** + * Amount of time between rollback iterations, in nanoseconds. + * + * @var int|null + */ + protected $delay; + /** + * Action to take if an rolled back task fails to run, or stops + * running during the rollback. + * + * @var string|null + */ + protected $failureAction; + /** + * Amount of time to monitor each rolled back task for failures, in + * nanoseconds. + * + * @var int|null + */ + protected $monitor; + /** + * The fraction of tasks that may fail during a rollback before the + * failure action is invoked, specified as a floating point number + * between 0 and 1. + * + * @var float|null + */ + protected $maxFailureRatio; + /** + * The order of operations when rolling back a task. Either the old + * task is shut down before the new task is started, or the new task + * is started before the old task is shut down. + * + * @var string|null + */ + protected $order; + + /** + * Maximum number of tasks to be rolled back in one iteration (0 means + * unlimited parallelism). + */ + public function getParallelism(): ?int + { + return $this->parallelism; + } + + /** + * Maximum number of tasks to be rolled back in one iteration (0 means + * unlimited parallelism). + */ + public function setParallelism(?int $parallelism): self + { + $this->initialized['parallelism'] = true; + $this->parallelism = $parallelism; + + return $this; + } + + /** + * Amount of time between rollback iterations, in nanoseconds. + */ + public function getDelay(): ?int + { + return $this->delay; + } + + /** + * Amount of time between rollback iterations, in nanoseconds. + */ + public function setDelay(?int $delay): self + { + $this->initialized['delay'] = true; + $this->delay = $delay; + + return $this; + } + + /** + * Action to take if an rolled back task fails to run, or stops + * running during the rollback. + */ + public function getFailureAction(): ?string + { + return $this->failureAction; + } + + /** + * Action to take if an rolled back task fails to run, or stops + * running during the rollback. + */ + public function setFailureAction(?string $failureAction): self + { + $this->initialized['failureAction'] = true; + $this->failureAction = $failureAction; + + return $this; + } + + /** + * Amount of time to monitor each rolled back task for failures, in + * nanoseconds. + */ + public function getMonitor(): ?int + { + return $this->monitor; + } + + /** + * Amount of time to monitor each rolled back task for failures, in + * nanoseconds. + */ + public function setMonitor(?int $monitor): self + { + $this->initialized['monitor'] = true; + $this->monitor = $monitor; + + return $this; + } + + /** + * The fraction of tasks that may fail during a rollback before the + * failure action is invoked, specified as a floating point number + * between 0 and 1. + */ + public function getMaxFailureRatio(): ?float + { + return $this->maxFailureRatio; + } + + /** + * The fraction of tasks that may fail during a rollback before the + * failure action is invoked, specified as a floating point number + * between 0 and 1. + */ + public function setMaxFailureRatio(?float $maxFailureRatio): self + { + $this->initialized['maxFailureRatio'] = true; + $this->maxFailureRatio = $maxFailureRatio; + + return $this; + } + + /** + * The order of operations when rolling back a task. Either the old + * task is shut down before the new task is started, or the new task + * is started before the old task is shut down. + */ + public function getOrder(): ?string + { + return $this->order; + } + + /** + * The order of operations when rolling back a task. Either the old + * task is shut down before the new task is started, or the new task + * is started before the old task is shut down. + */ + public function setOrder(?string $order): self + { + $this->initialized['order'] = true; + $this->order = $order; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecUpdateConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecUpdateConfig.php new file mode 100644 index 000000000..453dc337a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceSpecUpdateConfig.php @@ -0,0 +1,189 @@ +initialized); + } + /** + * Maximum number of tasks to be updated in one iteration (0 means + * unlimited parallelism). + * + * @var int|null + */ + protected $parallelism; + /** + * Amount of time between updates, in nanoseconds. + * + * @var int|null + */ + protected $delay; + /** + * Action to take if an updated task fails to run, or stops running + * during the update. + * + * @var string|null + */ + protected $failureAction; + /** + * Amount of time to monitor each updated task for failures, in + * nanoseconds. + * + * @var int|null + */ + protected $monitor; + /** + * The fraction of tasks that may fail during an update before the + * failure action is invoked, specified as a floating point number + * between 0 and 1. + * + * @var float|null + */ + protected $maxFailureRatio; + /** + * The order of operations when rolling out an updated task. Either + * the old task is shut down before the new task is started, or the + * new task is started before the old task is shut down. + * + * @var string|null + */ + protected $order; + + /** + * Maximum number of tasks to be updated in one iteration (0 means + * unlimited parallelism). + */ + public function getParallelism(): ?int + { + return $this->parallelism; + } + + /** + * Maximum number of tasks to be updated in one iteration (0 means + * unlimited parallelism). + */ + public function setParallelism(?int $parallelism): self + { + $this->initialized['parallelism'] = true; + $this->parallelism = $parallelism; + + return $this; + } + + /** + * Amount of time between updates, in nanoseconds. + */ + public function getDelay(): ?int + { + return $this->delay; + } + + /** + * Amount of time between updates, in nanoseconds. + */ + public function setDelay(?int $delay): self + { + $this->initialized['delay'] = true; + $this->delay = $delay; + + return $this; + } + + /** + * Action to take if an updated task fails to run, or stops running + * during the update. + */ + public function getFailureAction(): ?string + { + return $this->failureAction; + } + + /** + * Action to take if an updated task fails to run, or stops running + * during the update. + */ + public function setFailureAction(?string $failureAction): self + { + $this->initialized['failureAction'] = true; + $this->failureAction = $failureAction; + + return $this; + } + + /** + * Amount of time to monitor each updated task for failures, in + * nanoseconds. + */ + public function getMonitor(): ?int + { + return $this->monitor; + } + + /** + * Amount of time to monitor each updated task for failures, in + * nanoseconds. + */ + public function setMonitor(?int $monitor): self + { + $this->initialized['monitor'] = true; + $this->monitor = $monitor; + + return $this; + } + + /** + * The fraction of tasks that may fail during an update before the + * failure action is invoked, specified as a floating point number + * between 0 and 1. + */ + public function getMaxFailureRatio(): ?float + { + return $this->maxFailureRatio; + } + + /** + * The fraction of tasks that may fail during an update before the + * failure action is invoked, specified as a floating point number + * between 0 and 1. + */ + public function setMaxFailureRatio(?float $maxFailureRatio): self + { + $this->initialized['maxFailureRatio'] = true; + $this->maxFailureRatio = $maxFailureRatio; + + return $this; + } + + /** + * The order of operations when rolling out an updated task. Either + * the old task is shut down before the new task is started, or the + * new task is started before the old task is shut down. + */ + public function getOrder(): ?string + { + return $this->order; + } + + /** + * The order of operations when rolling out an updated task. Either + * the old task is shut down before the new task is started, or the + * new task is started before the old task is shut down. + */ + public function setOrder(?string $order): self + { + $this->initialized['order'] = true; + $this->order = $order; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceUpdateResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceUpdateResponse.php new file mode 100644 index 000000000..5489200c6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceUpdateResponse.php @@ -0,0 +1,47 @@ +initialized); + } + /** + * Optional warning messages. + * + * @var list|null + */ + protected $warnings; + + /** + * Optional warning messages. + * + * @return list|null + */ + public function getWarnings(): ?array + { + return $this->warnings; + } + + /** + * Optional warning messages. + * + * @param list|null $warnings + */ + public function setWarnings(?array $warnings): self + { + $this->initialized['warnings'] = true; + $this->warnings = $warnings; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServiceUpdateStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceUpdateStatus.php new file mode 100644 index 000000000..2581c09ff --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServiceUpdateStatus.php @@ -0,0 +1,86 @@ +initialized); + } + /** + * @var string|null + */ + protected $state; + /** + * @var string|null + */ + protected $startedAt; + /** + * @var string|null + */ + protected $completedAt; + /** + * @var string|null + */ + protected $message; + + public function getState(): ?string + { + return $this->state; + } + + public function setState(?string $state): self + { + $this->initialized['state'] = true; + $this->state = $state; + + return $this; + } + + public function getStartedAt(): ?string + { + return $this->startedAt; + } + + public function setStartedAt(?string $startedAt): self + { + $this->initialized['startedAt'] = true; + $this->startedAt = $startedAt; + + return $this; + } + + public function getCompletedAt(): ?string + { + return $this->completedAt; + } + + public function setCompletedAt(?string $completedAt): self + { + $this->initialized['completedAt'] = true; + $this->completedAt = $completedAt; + + return $this; + } + + public function getMessage(): ?string + { + return $this->message; + } + + public function setMessage(?string $message): self + { + $this->initialized['message'] = true; + $this->message = $message; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServicesCreatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServicesCreatePostBody.php new file mode 100644 index 000000000..d9ec1c6ba --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServicesCreatePostBody.php @@ -0,0 +1,232 @@ +initialized); + } + /** + * Name of the service. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * User modifiable task configuration. + * + * @var TaskSpec|null + */ + protected $taskTemplate; + /** + * Scheduling mode for the service. + * + * @var ServiceSpecMode|null + */ + protected $mode; + /** + * Specification for the update strategy of the service. + * + * @var ServiceSpecUpdateConfig|null + */ + protected $updateConfig; + /** + * Specification for the rollback strategy of the service. + * + * @var ServiceSpecRollbackConfig|null + */ + protected $rollbackConfig; + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @var list|null + */ + protected $networks; + /** + * Properties that can be configured to access and load balance a service. + * + * @var EndpointSpec|null + */ + protected $endpointSpec; + + /** + * Name of the service. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the service. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * User modifiable task configuration. + */ + public function getTaskTemplate(): ?TaskSpec + { + return $this->taskTemplate; + } + + /** + * User modifiable task configuration. + */ + public function setTaskTemplate(?TaskSpec $taskTemplate): self + { + $this->initialized['taskTemplate'] = true; + $this->taskTemplate = $taskTemplate; + + return $this; + } + + /** + * Scheduling mode for the service. + */ + public function getMode(): ?ServiceSpecMode + { + return $this->mode; + } + + /** + * Scheduling mode for the service. + */ + public function setMode(?ServiceSpecMode $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } + + /** + * Specification for the update strategy of the service. + */ + public function getUpdateConfig(): ?ServiceSpecUpdateConfig + { + return $this->updateConfig; + } + + /** + * Specification for the update strategy of the service. + */ + public function setUpdateConfig(?ServiceSpecUpdateConfig $updateConfig): self + { + $this->initialized['updateConfig'] = true; + $this->updateConfig = $updateConfig; + + return $this; + } + + /** + * Specification for the rollback strategy of the service. + */ + public function getRollbackConfig(): ?ServiceSpecRollbackConfig + { + return $this->rollbackConfig; + } + + /** + * Specification for the rollback strategy of the service. + */ + public function setRollbackConfig(?ServiceSpecRollbackConfig $rollbackConfig): self + { + $this->initialized['rollbackConfig'] = true; + $this->rollbackConfig = $rollbackConfig; + + return $this; + } + + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @return list|null + */ + public function getNetworks(): ?array + { + return $this->networks; + } + + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @param list|null $networks + */ + public function setNetworks(?array $networks): self + { + $this->initialized['networks'] = true; + $this->networks = $networks; + + return $this; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function getEndpointSpec(): ?EndpointSpec + { + return $this->endpointSpec; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function setEndpointSpec(?EndpointSpec $endpointSpec): self + { + $this->initialized['endpointSpec'] = true; + $this->endpointSpec = $endpointSpec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ServicesIdUpdatePostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/ServicesIdUpdatePostBody.php new file mode 100644 index 000000000..c53eacf17 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ServicesIdUpdatePostBody.php @@ -0,0 +1,232 @@ +initialized); + } + /** + * Name of the service. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * User modifiable task configuration. + * + * @var TaskSpec|null + */ + protected $taskTemplate; + /** + * Scheduling mode for the service. + * + * @var ServiceSpecMode|null + */ + protected $mode; + /** + * Specification for the update strategy of the service. + * + * @var ServiceSpecUpdateConfig|null + */ + protected $updateConfig; + /** + * Specification for the rollback strategy of the service. + * + * @var ServiceSpecRollbackConfig|null + */ + protected $rollbackConfig; + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @var list|null + */ + protected $networks; + /** + * Properties that can be configured to access and load balance a service. + * + * @var EndpointSpec|null + */ + protected $endpointSpec; + + /** + * Name of the service. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the service. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * User modifiable task configuration. + */ + public function getTaskTemplate(): ?TaskSpec + { + return $this->taskTemplate; + } + + /** + * User modifiable task configuration. + */ + public function setTaskTemplate(?TaskSpec $taskTemplate): self + { + $this->initialized['taskTemplate'] = true; + $this->taskTemplate = $taskTemplate; + + return $this; + } + + /** + * Scheduling mode for the service. + */ + public function getMode(): ?ServiceSpecMode + { + return $this->mode; + } + + /** + * Scheduling mode for the service. + */ + public function setMode(?ServiceSpecMode $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } + + /** + * Specification for the update strategy of the service. + */ + public function getUpdateConfig(): ?ServiceSpecUpdateConfig + { + return $this->updateConfig; + } + + /** + * Specification for the update strategy of the service. + */ + public function setUpdateConfig(?ServiceSpecUpdateConfig $updateConfig): self + { + $this->initialized['updateConfig'] = true; + $this->updateConfig = $updateConfig; + + return $this; + } + + /** + * Specification for the rollback strategy of the service. + */ + public function getRollbackConfig(): ?ServiceSpecRollbackConfig + { + return $this->rollbackConfig; + } + + /** + * Specification for the rollback strategy of the service. + */ + public function setRollbackConfig(?ServiceSpecRollbackConfig $rollbackConfig): self + { + $this->initialized['rollbackConfig'] = true; + $this->rollbackConfig = $rollbackConfig; + + return $this; + } + + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @return list|null + */ + public function getNetworks(): ?array + { + return $this->networks; + } + + /** + * Specifies which networks the service should attach to. + * + * Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + * + * @param list|null $networks + */ + public function setNetworks(?array $networks): self + { + $this->initialized['networks'] = true; + $this->networks = $networks; + + return $this; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function getEndpointSpec(): ?EndpointSpec + { + return $this->endpointSpec; + } + + /** + * Properties that can be configured to access and load balance a service. + */ + public function setEndpointSpec(?EndpointSpec $endpointSpec): self + { + $this->initialized['endpointSpec'] = true; + $this->endpointSpec = $endpointSpec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Swarm.php b/app/vendor/beluga-php/docker-php-api/src/Model/Swarm.php new file mode 100644 index 000000000..ad88dd4bd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Swarm.php @@ -0,0 +1,345 @@ +initialized); + } + /** + * The ID of the swarm. + * + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * Date and time at which the swarm was initialised in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $createdAt; + /** + * Date and time at which the swarm was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + * + * @var string|null + */ + protected $updatedAt; + /** + * User modifiable swarm configuration. + * + * @var SwarmSpec|null + */ + protected $spec; + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + * + * @var TLSInfo|null + */ + protected $tLSInfo; + /** + * Whether there is currently a root CA rotation in progress for the swarm. + * + * @var bool|null + */ + protected $rootRotationInProgress; + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * If no port is set or is set to 0, the default port (4789) is used. + * + * @var int|null + */ + protected $dataPathPort; + /** + * Default Address Pool specifies default subnet pools for global scope + * networks. + * + * @var list|null + */ + protected $defaultAddrPool; + /** + * SubnetSize specifies the subnet size of the networks created from the + * default subnet pool. + * + * @var int|null + */ + protected $subnetSize; + /** + * JoinTokens contains the tokens workers and managers need to join the swarm. + * + * @var JoinTokens|null + */ + protected $joinTokens; + + /** + * The ID of the swarm. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * The ID of the swarm. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + /** + * Date and time at which the swarm was initialised in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + /** + * Date and time at which the swarm was initialised in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + /** + * Date and time at which the swarm was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + /** + * Date and time at which the swarm was last updated in + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + */ + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + /** + * User modifiable swarm configuration. + */ + public function getSpec(): ?SwarmSpec + { + return $this->spec; + } + + /** + * User modifiable swarm configuration. + */ + public function setSpec(?SwarmSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + */ + public function getTLSInfo(): ?TLSInfo + { + return $this->tLSInfo; + } + + /** + * Information about the issuer of leaf TLS certificates and the trusted root + * CA certificate. + */ + public function setTLSInfo(?TLSInfo $tLSInfo): self + { + $this->initialized['tLSInfo'] = true; + $this->tLSInfo = $tLSInfo; + + return $this; + } + + /** + * Whether there is currently a root CA rotation in progress for the swarm. + */ + public function getRootRotationInProgress(): ?bool + { + return $this->rootRotationInProgress; + } + + /** + * Whether there is currently a root CA rotation in progress for the swarm. + */ + public function setRootRotationInProgress(?bool $rootRotationInProgress): self + { + $this->initialized['rootRotationInProgress'] = true; + $this->rootRotationInProgress = $rootRotationInProgress; + + return $this; + } + + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * If no port is set or is set to 0, the default port (4789) is used. + */ + public function getDataPathPort(): ?int + { + return $this->dataPathPort; + } + + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * If no port is set or is set to 0, the default port (4789) is used. + */ + public function setDataPathPort(?int $dataPathPort): self + { + $this->initialized['dataPathPort'] = true; + $this->dataPathPort = $dataPathPort; + + return $this; + } + + /** + * Default Address Pool specifies default subnet pools for global scope + * networks. + * + * @return list|null + */ + public function getDefaultAddrPool(): ?array + { + return $this->defaultAddrPool; + } + + /** + * Default Address Pool specifies default subnet pools for global scope + * networks. + * + * @param list|null $defaultAddrPool + */ + public function setDefaultAddrPool(?array $defaultAddrPool): self + { + $this->initialized['defaultAddrPool'] = true; + $this->defaultAddrPool = $defaultAddrPool; + + return $this; + } + + /** + * SubnetSize specifies the subnet size of the networks created from the + * default subnet pool. + */ + public function getSubnetSize(): ?int + { + return $this->subnetSize; + } + + /** + * SubnetSize specifies the subnet size of the networks created from the + * default subnet pool. + */ + public function setSubnetSize(?int $subnetSize): self + { + $this->initialized['subnetSize'] = true; + $this->subnetSize = $subnetSize; + + return $this; + } + + /** + * JoinTokens contains the tokens workers and managers need to join the swarm. + */ + public function getJoinTokens(): ?JoinTokens + { + return $this->joinTokens; + } + + /** + * JoinTokens contains the tokens workers and managers need to join the swarm. + */ + public function setJoinTokens(?JoinTokens $joinTokens): self + { + $this->initialized['joinTokens'] = true; + $this->joinTokens = $joinTokens; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmInfo.php new file mode 100644 index 000000000..d09fb8269 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmInfo.php @@ -0,0 +1,237 @@ +initialized); + } + /** + * Unique identifier of for this node in the swarm. + * + * @var string|null + */ + protected $nodeID = ''; + /** + * IP address at which this node can be reached by other nodes in the + * swarm. + * + * @var string|null + */ + protected $nodeAddr = ''; + /** + * Current local status of this node. + * + * @var string|null + */ + protected $localNodeState = ''; + /** + * @var bool|null + */ + protected $controlAvailable = false; + /** + * @var string|null + */ + protected $error = ''; + /** + * List of ID's and addresses of other managers in the swarm. + * + * @var list|null + */ + protected $remoteManagers; + /** + * Total number of nodes in the swarm. + * + * @var int|null + */ + protected $nodes; + /** + * Total number of managers in the swarm. + * + * @var int|null + */ + protected $managers; + /** + * ClusterInfo represents information about the swarm as is returned by the + * "/info" endpoint. Join-tokens are not included. + * + * @var ClusterInfo|null + */ + protected $cluster; + + /** + * Unique identifier of for this node in the swarm. + */ + public function getNodeID(): ?string + { + return $this->nodeID; + } + + /** + * Unique identifier of for this node in the swarm. + */ + public function setNodeID(?string $nodeID): self + { + $this->initialized['nodeID'] = true; + $this->nodeID = $nodeID; + + return $this; + } + + /** + * IP address at which this node can be reached by other nodes in the + * swarm. + */ + public function getNodeAddr(): ?string + { + return $this->nodeAddr; + } + + /** + * IP address at which this node can be reached by other nodes in the + * swarm. + */ + public function setNodeAddr(?string $nodeAddr): self + { + $this->initialized['nodeAddr'] = true; + $this->nodeAddr = $nodeAddr; + + return $this; + } + + /** + * Current local status of this node. + */ + public function getLocalNodeState(): ?string + { + return $this->localNodeState; + } + + /** + * Current local status of this node. + */ + public function setLocalNodeState(?string $localNodeState): self + { + $this->initialized['localNodeState'] = true; + $this->localNodeState = $localNodeState; + + return $this; + } + + public function getControlAvailable(): ?bool + { + return $this->controlAvailable; + } + + public function setControlAvailable(?bool $controlAvailable): self + { + $this->initialized['controlAvailable'] = true; + $this->controlAvailable = $controlAvailable; + + return $this; + } + + public function getError(): ?string + { + return $this->error; + } + + public function setError(?string $error): self + { + $this->initialized['error'] = true; + $this->error = $error; + + return $this; + } + + /** + * List of ID's and addresses of other managers in the swarm. + * + * @return list|null + */ + public function getRemoteManagers(): ?array + { + return $this->remoteManagers; + } + + /** + * List of ID's and addresses of other managers in the swarm. + * + * @param list|null $remoteManagers + */ + public function setRemoteManagers(?array $remoteManagers): self + { + $this->initialized['remoteManagers'] = true; + $this->remoteManagers = $remoteManagers; + + return $this; + } + + /** + * Total number of nodes in the swarm. + */ + public function getNodes(): ?int + { + return $this->nodes; + } + + /** + * Total number of nodes in the swarm. + */ + public function setNodes(?int $nodes): self + { + $this->initialized['nodes'] = true; + $this->nodes = $nodes; + + return $this; + } + + /** + * Total number of managers in the swarm. + */ + public function getManagers(): ?int + { + return $this->managers; + } + + /** + * Total number of managers in the swarm. + */ + public function setManagers(?int $managers): self + { + $this->initialized['managers'] = true; + $this->managers = $managers; + + return $this; + } + + /** + * ClusterInfo represents information about the swarm as is returned by the + * "/info" endpoint. Join-tokens are not included. + */ + public function getCluster(): ?ClusterInfo + { + return $this->cluster; + } + + /** + * ClusterInfo represents information about the swarm as is returned by the + * "/info" endpoint. Join-tokens are not included. + */ + public function setCluster(?ClusterInfo $cluster): self + { + $this->initialized['cluster'] = true; + $this->cluster = $cluster; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmInitPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmInitPostBody.php new file mode 100644 index 000000000..d037378a1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmInitPostBody.php @@ -0,0 +1,291 @@ +initialized); + } + /** + * Listen address used for inter-manager communication, as well + * as determining the networking interface used for the VXLAN + * Tunnel Endpoint (VTEP). This can either be an address/port + * combination in the form `192.168.1.1:4567`, or an interface + * followed by a port number, like `eth0:4567`. If the port number + * is omitted, the default swarm listening port is used. + * + * @var string|null + */ + protected $listenAddr; + /** + * Externally reachable address advertised to other nodes. This + * can either be an address/port combination in the form + * `192.168.1.1:4567`, or an interface followed by a port number, + * like `eth0:4567`. If the port number is omitted, the port + * number from the listen address is used. If `AdvertiseAddr` is + * not specified, it will be automatically detected when possible. + * + * @var string|null + */ + protected $advertiseAddr; + /** + * Address or interface to use for data path traffic (format: + * ``), for example, `192.168.1.1`, or an interface, + * like `eth0`. If `DataPathAddr` is unspecified, the same address + * as `AdvertiseAddr` is used. + * + * The `DataPathAddr` specifies the address that global scope + * network drivers will publish towards other nodes in order to + * reach the containers running on this node. Using this parameter + * it is possible to separate the container data traffic from the + * management traffic of the cluster. + * + * @var string|null + */ + protected $dataPathAddr; + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * if no port is set or is set to 0, default port 4789 will be used. + * + * @var int|null + */ + protected $dataPathPort; + /** + * Default Address Pool specifies default subnet pools for global + * scope networks. + * + * @var list|null + */ + protected $defaultAddrPool; + /** + * Force creation of a new swarm. + * + * @var bool|null + */ + protected $forceNewCluster; + /** + * SubnetSize specifies the subnet size of the networks created + * from the default subnet pool. + * + * @var int|null + */ + protected $subnetSize; + /** + * User modifiable swarm configuration. + * + * @var SwarmSpec|null + */ + protected $spec; + + /** + * Listen address used for inter-manager communication, as well + * as determining the networking interface used for the VXLAN + * Tunnel Endpoint (VTEP). This can either be an address/port + * combination in the form `192.168.1.1:4567`, or an interface + * followed by a port number, like `eth0:4567`. If the port number + * is omitted, the default swarm listening port is used. + */ + public function getListenAddr(): ?string + { + return $this->listenAddr; + } + + /** + * Listen address used for inter-manager communication, as well + * as determining the networking interface used for the VXLAN + * Tunnel Endpoint (VTEP). This can either be an address/port + * combination in the form `192.168.1.1:4567`, or an interface + * followed by a port number, like `eth0:4567`. If the port number + * is omitted, the default swarm listening port is used. + */ + public function setListenAddr(?string $listenAddr): self + { + $this->initialized['listenAddr'] = true; + $this->listenAddr = $listenAddr; + + return $this; + } + + /** + * Externally reachable address advertised to other nodes. This + * can either be an address/port combination in the form + * `192.168.1.1:4567`, or an interface followed by a port number, + * like `eth0:4567`. If the port number is omitted, the port + * number from the listen address is used. If `AdvertiseAddr` is + * not specified, it will be automatically detected when possible. + */ + public function getAdvertiseAddr(): ?string + { + return $this->advertiseAddr; + } + + /** + * Externally reachable address advertised to other nodes. This + * can either be an address/port combination in the form + * `192.168.1.1:4567`, or an interface followed by a port number, + * like `eth0:4567`. If the port number is omitted, the port + * number from the listen address is used. If `AdvertiseAddr` is + * not specified, it will be automatically detected when possible. + */ + public function setAdvertiseAddr(?string $advertiseAddr): self + { + $this->initialized['advertiseAddr'] = true; + $this->advertiseAddr = $advertiseAddr; + + return $this; + } + + /** + * Address or interface to use for data path traffic (format: + * ``), for example, `192.168.1.1`, or an interface, + * like `eth0`. If `DataPathAddr` is unspecified, the same address + * as `AdvertiseAddr` is used. + * + * The `DataPathAddr` specifies the address that global scope + * network drivers will publish towards other nodes in order to + * reach the containers running on this node. Using this parameter + * it is possible to separate the container data traffic from the + * management traffic of the cluster. + */ + public function getDataPathAddr(): ?string + { + return $this->dataPathAddr; + } + + /** + * Address or interface to use for data path traffic (format: + * ``), for example, `192.168.1.1`, or an interface, + * like `eth0`. If `DataPathAddr` is unspecified, the same address + * as `AdvertiseAddr` is used. + * + * The `DataPathAddr` specifies the address that global scope + * network drivers will publish towards other nodes in order to + * reach the containers running on this node. Using this parameter + * it is possible to separate the container data traffic from the + * management traffic of the cluster. + */ + public function setDataPathAddr(?string $dataPathAddr): self + { + $this->initialized['dataPathAddr'] = true; + $this->dataPathAddr = $dataPathAddr; + + return $this; + } + + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * if no port is set or is set to 0, default port 4789 will be used. + */ + public function getDataPathPort(): ?int + { + return $this->dataPathPort; + } + + /** + * DataPathPort specifies the data path port number for data traffic. + * Acceptable port range is 1024 to 49151. + * if no port is set or is set to 0, default port 4789 will be used. + */ + public function setDataPathPort(?int $dataPathPort): self + { + $this->initialized['dataPathPort'] = true; + $this->dataPathPort = $dataPathPort; + + return $this; + } + + /** + * Default Address Pool specifies default subnet pools for global + * scope networks. + * + * @return list|null + */ + public function getDefaultAddrPool(): ?array + { + return $this->defaultAddrPool; + } + + /** + * Default Address Pool specifies default subnet pools for global + * scope networks. + * + * @param list|null $defaultAddrPool + */ + public function setDefaultAddrPool(?array $defaultAddrPool): self + { + $this->initialized['defaultAddrPool'] = true; + $this->defaultAddrPool = $defaultAddrPool; + + return $this; + } + + /** + * Force creation of a new swarm. + */ + public function getForceNewCluster(): ?bool + { + return $this->forceNewCluster; + } + + /** + * Force creation of a new swarm. + */ + public function setForceNewCluster(?bool $forceNewCluster): self + { + $this->initialized['forceNewCluster'] = true; + $this->forceNewCluster = $forceNewCluster; + + return $this; + } + + /** + * SubnetSize specifies the subnet size of the networks created + * from the default subnet pool. + */ + public function getSubnetSize(): ?int + { + return $this->subnetSize; + } + + /** + * SubnetSize specifies the subnet size of the networks created + * from the default subnet pool. + */ + public function setSubnetSize(?int $subnetSize): self + { + $this->initialized['subnetSize'] = true; + $this->subnetSize = $subnetSize; + + return $this; + } + + /** + * User modifiable swarm configuration. + */ + public function getSpec(): ?SwarmSpec + { + return $this->spec; + } + + /** + * User modifiable swarm configuration. + */ + public function setSpec(?SwarmSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmJoinPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmJoinPostBody.php new file mode 100644 index 000000000..21a3aebc8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmJoinPostBody.php @@ -0,0 +1,195 @@ +initialized); + } + /** + * Listen address used for inter-manager communication if the node + * gets promoted to manager, as well as determining the networking + * interface used for the VXLAN Tunnel Endpoint (VTEP). + * + * @var string|null + */ + protected $listenAddr; + /** + * Externally reachable address advertised to other nodes. This + * can either be an address/port combination in the form + * `192.168.1.1:4567`, or an interface followed by a port number, + * like `eth0:4567`. If the port number is omitted, the port + * number from the listen address is used. If `AdvertiseAddr` is + * not specified, it will be automatically detected when possible. + * + * @var string|null + */ + protected $advertiseAddr; + /** + * Address or interface to use for data path traffic (format: + * ``), for example, `192.168.1.1`, or an interface, + * like `eth0`. If `DataPathAddr` is unspecified, the same address + * as `AdvertiseAddr` is used. + * + * The `DataPathAddr` specifies the address that global scope + * network drivers will publish towards other nodes in order to + * reach the containers running on this node. Using this parameter + * it is possible to separate the container data traffic from the + * management traffic of the cluster. + * + * @var string|null + */ + protected $dataPathAddr; + /** + * Addresses of manager nodes already participating in the swarm. + * + * @var list|null + */ + protected $remoteAddrs; + /** + * Secret token for joining this swarm. + * + * @var string|null + */ + protected $joinToken; + + /** + * Listen address used for inter-manager communication if the node + * gets promoted to manager, as well as determining the networking + * interface used for the VXLAN Tunnel Endpoint (VTEP). + */ + public function getListenAddr(): ?string + { + return $this->listenAddr; + } + + /** + * Listen address used for inter-manager communication if the node + * gets promoted to manager, as well as determining the networking + * interface used for the VXLAN Tunnel Endpoint (VTEP). + */ + public function setListenAddr(?string $listenAddr): self + { + $this->initialized['listenAddr'] = true; + $this->listenAddr = $listenAddr; + + return $this; + } + + /** + * Externally reachable address advertised to other nodes. This + * can either be an address/port combination in the form + * `192.168.1.1:4567`, or an interface followed by a port number, + * like `eth0:4567`. If the port number is omitted, the port + * number from the listen address is used. If `AdvertiseAddr` is + * not specified, it will be automatically detected when possible. + */ + public function getAdvertiseAddr(): ?string + { + return $this->advertiseAddr; + } + + /** + * Externally reachable address advertised to other nodes. This + * can either be an address/port combination in the form + * `192.168.1.1:4567`, or an interface followed by a port number, + * like `eth0:4567`. If the port number is omitted, the port + * number from the listen address is used. If `AdvertiseAddr` is + * not specified, it will be automatically detected when possible. + */ + public function setAdvertiseAddr(?string $advertiseAddr): self + { + $this->initialized['advertiseAddr'] = true; + $this->advertiseAddr = $advertiseAddr; + + return $this; + } + + /** + * Address or interface to use for data path traffic (format: + * ``), for example, `192.168.1.1`, or an interface, + * like `eth0`. If `DataPathAddr` is unspecified, the same address + * as `AdvertiseAddr` is used. + * + * The `DataPathAddr` specifies the address that global scope + * network drivers will publish towards other nodes in order to + * reach the containers running on this node. Using this parameter + * it is possible to separate the container data traffic from the + * management traffic of the cluster. + */ + public function getDataPathAddr(): ?string + { + return $this->dataPathAddr; + } + + /** + * Address or interface to use for data path traffic (format: + * ``), for example, `192.168.1.1`, or an interface, + * like `eth0`. If `DataPathAddr` is unspecified, the same address + * as `AdvertiseAddr` is used. + * + * The `DataPathAddr` specifies the address that global scope + * network drivers will publish towards other nodes in order to + * reach the containers running on this node. Using this parameter + * it is possible to separate the container data traffic from the + * management traffic of the cluster. + */ + public function setDataPathAddr(?string $dataPathAddr): self + { + $this->initialized['dataPathAddr'] = true; + $this->dataPathAddr = $dataPathAddr; + + return $this; + } + + /** + * Addresses of manager nodes already participating in the swarm. + * + * @return list|null + */ + public function getRemoteAddrs(): ?array + { + return $this->remoteAddrs; + } + + /** + * Addresses of manager nodes already participating in the swarm. + * + * @param list|null $remoteAddrs + */ + public function setRemoteAddrs(?array $remoteAddrs): self + { + $this->initialized['remoteAddrs'] = true; + $this->remoteAddrs = $remoteAddrs; + + return $this; + } + + /** + * Secret token for joining this swarm. + */ + public function getJoinToken(): ?string + { + return $this->joinToken; + } + + /** + * Secret token for joining this swarm. + */ + public function setJoinToken(?string $joinToken): self + { + $this->initialized['joinToken'] = true; + $this->joinToken = $joinToken; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpec.php new file mode 100644 index 000000000..6efb97a01 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpec.php @@ -0,0 +1,222 @@ +initialized); + } + /** + * Name of the swarm. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Orchestration configuration. + * + * @var SwarmSpecOrchestration|null + */ + protected $orchestration; + /** + * Raft configuration. + * + * @var SwarmSpecRaft|null + */ + protected $raft; + /** + * Dispatcher configuration. + * + * @var SwarmSpecDispatcher|null + */ + protected $dispatcher; + /** + * CA configuration. + * + * @var SwarmSpecCAConfig|null + */ + protected $cAConfig; + /** + * Parameters related to encryption-at-rest. + * + * @var SwarmSpecEncryptionConfig|null + */ + protected $encryptionConfig; + /** + * Defaults for creating tasks in this cluster. + * + * @var SwarmSpecTaskDefaults|null + */ + protected $taskDefaults; + + /** + * Name of the swarm. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the swarm. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Orchestration configuration. + */ + public function getOrchestration(): ?SwarmSpecOrchestration + { + return $this->orchestration; + } + + /** + * Orchestration configuration. + */ + public function setOrchestration(?SwarmSpecOrchestration $orchestration): self + { + $this->initialized['orchestration'] = true; + $this->orchestration = $orchestration; + + return $this; + } + + /** + * Raft configuration. + */ + public function getRaft(): ?SwarmSpecRaft + { + return $this->raft; + } + + /** + * Raft configuration. + */ + public function setRaft(?SwarmSpecRaft $raft): self + { + $this->initialized['raft'] = true; + $this->raft = $raft; + + return $this; + } + + /** + * Dispatcher configuration. + */ + public function getDispatcher(): ?SwarmSpecDispatcher + { + return $this->dispatcher; + } + + /** + * Dispatcher configuration. + */ + public function setDispatcher(?SwarmSpecDispatcher $dispatcher): self + { + $this->initialized['dispatcher'] = true; + $this->dispatcher = $dispatcher; + + return $this; + } + + /** + * CA configuration. + */ + public function getCAConfig(): ?SwarmSpecCAConfig + { + return $this->cAConfig; + } + + /** + * CA configuration. + */ + public function setCAConfig(?SwarmSpecCAConfig $cAConfig): self + { + $this->initialized['cAConfig'] = true; + $this->cAConfig = $cAConfig; + + return $this; + } + + /** + * Parameters related to encryption-at-rest. + */ + public function getEncryptionConfig(): ?SwarmSpecEncryptionConfig + { + return $this->encryptionConfig; + } + + /** + * Parameters related to encryption-at-rest. + */ + public function setEncryptionConfig(?SwarmSpecEncryptionConfig $encryptionConfig): self + { + $this->initialized['encryptionConfig'] = true; + $this->encryptionConfig = $encryptionConfig; + + return $this; + } + + /** + * Defaults for creating tasks in this cluster. + */ + public function getTaskDefaults(): ?SwarmSpecTaskDefaults + { + return $this->taskDefaults; + } + + /** + * Defaults for creating tasks in this cluster. + */ + public function setTaskDefaults(?SwarmSpecTaskDefaults $taskDefaults): self + { + $this->initialized['taskDefaults'] = true; + $this->taskDefaults = $taskDefaults; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecCAConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecCAConfig.php new file mode 100644 index 000000000..873690ff5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecCAConfig.php @@ -0,0 +1,162 @@ +initialized); + } + /** + * The duration node certificates are issued for. + * + * @var int|null + */ + protected $nodeCertExpiry; + /** + * Configuration for forwarding signing requests to an external + * certificate authority. + * + * @var list|null + */ + protected $externalCAs; + /** + * The desired signing CA certificate for all swarm node TLS leaf + * certificates, in PEM format. + * + * @var string|null + */ + protected $signingCACert; + /** + * The desired signing CA key for all swarm node TLS leaf certificates, + * in PEM format. + * + * @var string|null + */ + protected $signingCAKey; + /** + * An integer whose purpose is to force swarm to generate a new + * signing CA certificate and key, if none have been specified in + * `SigningCACert` and `SigningCAKey`. + * + * @var int|null + */ + protected $forceRotate; + + /** + * The duration node certificates are issued for. + */ + public function getNodeCertExpiry(): ?int + { + return $this->nodeCertExpiry; + } + + /** + * The duration node certificates are issued for. + */ + public function setNodeCertExpiry(?int $nodeCertExpiry): self + { + $this->initialized['nodeCertExpiry'] = true; + $this->nodeCertExpiry = $nodeCertExpiry; + + return $this; + } + + /** + * Configuration for forwarding signing requests to an external + * certificate authority. + * + * @return list|null + */ + public function getExternalCAs(): ?array + { + return $this->externalCAs; + } + + /** + * Configuration for forwarding signing requests to an external + * certificate authority. + * + * @param list|null $externalCAs + */ + public function setExternalCAs(?array $externalCAs): self + { + $this->initialized['externalCAs'] = true; + $this->externalCAs = $externalCAs; + + return $this; + } + + /** + * The desired signing CA certificate for all swarm node TLS leaf + * certificates, in PEM format. + */ + public function getSigningCACert(): ?string + { + return $this->signingCACert; + } + + /** + * The desired signing CA certificate for all swarm node TLS leaf + * certificates, in PEM format. + */ + public function setSigningCACert(?string $signingCACert): self + { + $this->initialized['signingCACert'] = true; + $this->signingCACert = $signingCACert; + + return $this; + } + + /** + * The desired signing CA key for all swarm node TLS leaf certificates, + * in PEM format. + */ + public function getSigningCAKey(): ?string + { + return $this->signingCAKey; + } + + /** + * The desired signing CA key for all swarm node TLS leaf certificates, + * in PEM format. + */ + public function setSigningCAKey(?string $signingCAKey): self + { + $this->initialized['signingCAKey'] = true; + $this->signingCAKey = $signingCAKey; + + return $this; + } + + /** + * An integer whose purpose is to force swarm to generate a new + * signing CA certificate and key, if none have been specified in + * `SigningCACert` and `SigningCAKey`. + */ + public function getForceRotate(): ?int + { + return $this->forceRotate; + } + + /** + * An integer whose purpose is to force swarm to generate a new + * signing CA certificate and key, if none have been specified in + * `SigningCACert` and `SigningCAKey`. + */ + public function setForceRotate(?int $forceRotate): self + { + $this->initialized['forceRotate'] = true; + $this->forceRotate = $forceRotate; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecCAConfigExternalCAsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecCAConfigExternalCAsItem.php new file mode 100644 index 000000000..4a957f4d4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecCAConfigExternalCAsItem.php @@ -0,0 +1,134 @@ +initialized); + } + /** + * Protocol for communication with the external CA (currently + * only `cfssl` is supported). + * + * @var string|null + */ + protected $protocol = 'cfssl'; + /** + * URL where certificate signing requests should be sent. + * + * @var string|null + */ + protected $uRL; + /** + * An object with key/value pairs that are interpreted as + * protocol-specific options for the external CA driver. + * + * @var array|null + */ + protected $options; + /** + * The root CA certificate (in PEM format) this external CA uses + * to issue TLS certificates (assumed to be to the current swarm + * root CA certificate if not provided). + * + * @var string|null + */ + protected $cACert; + + /** + * Protocol for communication with the external CA (currently + * only `cfssl` is supported). + */ + public function getProtocol(): ?string + { + return $this->protocol; + } + + /** + * Protocol for communication with the external CA (currently + * only `cfssl` is supported). + */ + public function setProtocol(?string $protocol): self + { + $this->initialized['protocol'] = true; + $this->protocol = $protocol; + + return $this; + } + + /** + * URL where certificate signing requests should be sent. + */ + public function getURL(): ?string + { + return $this->uRL; + } + + /** + * URL where certificate signing requests should be sent. + */ + public function setURL(?string $uRL): self + { + $this->initialized['uRL'] = true; + $this->uRL = $uRL; + + return $this; + } + + /** + * An object with key/value pairs that are interpreted as + * protocol-specific options for the external CA driver. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * An object with key/value pairs that are interpreted as + * protocol-specific options for the external CA driver. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } + + /** + * The root CA certificate (in PEM format) this external CA uses + * to issue TLS certificates (assumed to be to the current swarm + * root CA certificate if not provided). + */ + public function getCACert(): ?string + { + return $this->cACert; + } + + /** + * The root CA certificate (in PEM format) this external CA uses + * to issue TLS certificates (assumed to be to the current swarm + * root CA certificate if not provided). + */ + public function setCACert(?string $cACert): self + { + $this->initialized['cACert'] = true; + $this->cACert = $cACert; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecDispatcher.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecDispatcher.php new file mode 100644 index 000000000..2b39e3c55 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecDispatcher.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * The delay for an agent to send a heartbeat to the dispatcher. + * + * @var int|null + */ + protected $heartbeatPeriod; + + /** + * The delay for an agent to send a heartbeat to the dispatcher. + */ + public function getHeartbeatPeriod(): ?int + { + return $this->heartbeatPeriod; + } + + /** + * The delay for an agent to send a heartbeat to the dispatcher. + */ + public function setHeartbeatPeriod(?int $heartbeatPeriod): self + { + $this->initialized['heartbeatPeriod'] = true; + $this->heartbeatPeriod = $heartbeatPeriod; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecEncryptionConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecEncryptionConfig.php new file mode 100644 index 000000000..dbfcade85 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecEncryptionConfig.php @@ -0,0 +1,46 @@ +initialized); + } + /** + * If set, generate a key and use it to lock data stored on the + * managers. + * + * @var bool|null + */ + protected $autoLockManagers; + + /** + * If set, generate a key and use it to lock data stored on the + * managers. + */ + public function getAutoLockManagers(): ?bool + { + return $this->autoLockManagers; + } + + /** + * If set, generate a key and use it to lock data stored on the + * managers. + */ + public function setAutoLockManagers(?bool $autoLockManagers): self + { + $this->initialized['autoLockManagers'] = true; + $this->autoLockManagers = $autoLockManagers; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecOrchestration.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecOrchestration.php new file mode 100644 index 000000000..047e8b0fb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecOrchestration.php @@ -0,0 +1,46 @@ +initialized); + } + /** + * The number of historic tasks to keep per instance or node. If + * negative, never remove completed or failed tasks. + * + * @var int|null + */ + protected $taskHistoryRetentionLimit; + + /** + * The number of historic tasks to keep per instance or node. If + * negative, never remove completed or failed tasks. + */ + public function getTaskHistoryRetentionLimit(): ?int + { + return $this->taskHistoryRetentionLimit; + } + + /** + * The number of historic tasks to keep per instance or node. If + * negative, never remove completed or failed tasks. + */ + public function setTaskHistoryRetentionLimit(?int $taskHistoryRetentionLimit): self + { + $this->initialized['taskHistoryRetentionLimit'] = true; + $this->taskHistoryRetentionLimit = $taskHistoryRetentionLimit; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecRaft.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecRaft.php new file mode 100644 index 000000000..039f2d410 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecRaft.php @@ -0,0 +1,173 @@ +initialized); + } + /** + * The number of log entries between snapshots. + * + * @var int|null + */ + protected $snapshotInterval; + /** + * The number of snapshots to keep beyond the current snapshot. + * + * @var int|null + */ + protected $keepOldSnapshots; + /** + * The number of log entries to keep around to sync up slow followers + * after a snapshot is created. + * + * @var int|null + */ + protected $logEntriesForSlowFollowers; + /** + * The number of ticks that a follower will wait for a message from + * the leader before becoming a candidate and starting an election. + * `ElectionTick` must be greater than `HeartbeatTick`. + * + * A tick currently defaults to one second, so these translate + * directly to seconds currently, but this is NOT guaranteed. + * + * @var int|null + */ + protected $electionTick; + /** + * The number of ticks between heartbeats. Every HeartbeatTick ticks, + * the leader will send a heartbeat to the followers. + * + * A tick currently defaults to one second, so these translate + * directly to seconds currently, but this is NOT guaranteed. + * + * @var int|null + */ + protected $heartbeatTick; + + /** + * The number of log entries between snapshots. + */ + public function getSnapshotInterval(): ?int + { + return $this->snapshotInterval; + } + + /** + * The number of log entries between snapshots. + */ + public function setSnapshotInterval(?int $snapshotInterval): self + { + $this->initialized['snapshotInterval'] = true; + $this->snapshotInterval = $snapshotInterval; + + return $this; + } + + /** + * The number of snapshots to keep beyond the current snapshot. + */ + public function getKeepOldSnapshots(): ?int + { + return $this->keepOldSnapshots; + } + + /** + * The number of snapshots to keep beyond the current snapshot. + */ + public function setKeepOldSnapshots(?int $keepOldSnapshots): self + { + $this->initialized['keepOldSnapshots'] = true; + $this->keepOldSnapshots = $keepOldSnapshots; + + return $this; + } + + /** + * The number of log entries to keep around to sync up slow followers + * after a snapshot is created. + */ + public function getLogEntriesForSlowFollowers(): ?int + { + return $this->logEntriesForSlowFollowers; + } + + /** + * The number of log entries to keep around to sync up slow followers + * after a snapshot is created. + */ + public function setLogEntriesForSlowFollowers(?int $logEntriesForSlowFollowers): self + { + $this->initialized['logEntriesForSlowFollowers'] = true; + $this->logEntriesForSlowFollowers = $logEntriesForSlowFollowers; + + return $this; + } + + /** + * The number of ticks that a follower will wait for a message from + * the leader before becoming a candidate and starting an election. + * `ElectionTick` must be greater than `HeartbeatTick`. + * + * A tick currently defaults to one second, so these translate + * directly to seconds currently, but this is NOT guaranteed. + */ + public function getElectionTick(): ?int + { + return $this->electionTick; + } + + /** + * The number of ticks that a follower will wait for a message from + * the leader before becoming a candidate and starting an election. + * `ElectionTick` must be greater than `HeartbeatTick`. + * + * A tick currently defaults to one second, so these translate + * directly to seconds currently, but this is NOT guaranteed. + */ + public function setElectionTick(?int $electionTick): self + { + $this->initialized['electionTick'] = true; + $this->electionTick = $electionTick; + + return $this; + } + + /** + * The number of ticks between heartbeats. Every HeartbeatTick ticks, + * the leader will send a heartbeat to the followers. + * + * A tick currently defaults to one second, so these translate + * directly to seconds currently, but this is NOT guaranteed. + */ + public function getHeartbeatTick(): ?int + { + return $this->heartbeatTick; + } + + /** + * The number of ticks between heartbeats. Every HeartbeatTick ticks, + * the leader will send a heartbeat to the followers. + * + * A tick currently defaults to one second, so these translate + * directly to seconds currently, but this is NOT guaranteed. + */ + public function setHeartbeatTick(?int $heartbeatTick): self + { + $this->initialized['heartbeatTick'] = true; + $this->heartbeatTick = $heartbeatTick; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecTaskDefaults.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecTaskDefaults.php new file mode 100644 index 000000000..aadcd88ee --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecTaskDefaults.php @@ -0,0 +1,55 @@ +initialized); + } + /** + * The log driver to use for tasks created in the orchestrator if + * unspecified by a service. + * + * Updating this value only affects new tasks. Existing tasks continue + * to use their previously configured log driver until recreated. + * + * @var SwarmSpecTaskDefaultsLogDriver|null + */ + protected $logDriver; + + /** + * The log driver to use for tasks created in the orchestrator if + * unspecified by a service. + * + * Updating this value only affects new tasks. Existing tasks continue + * to use their previously configured log driver until recreated. + */ + public function getLogDriver(): ?SwarmSpecTaskDefaultsLogDriver + { + return $this->logDriver; + } + + /** + * The log driver to use for tasks created in the orchestrator if + * unspecified by a service. + * + * Updating this value only affects new tasks. Existing tasks continue + * to use their previously configured log driver until recreated. + */ + public function setLogDriver(?SwarmSpecTaskDefaultsLogDriver $logDriver): self + { + $this->initialized['logDriver'] = true; + $this->logDriver = $logDriver; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecTaskDefaultsLogDriver.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecTaskDefaultsLogDriver.php new file mode 100644 index 000000000..4bd8521f3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmSpecTaskDefaultsLogDriver.php @@ -0,0 +1,75 @@ +initialized); + } + /** + * The log driver to use as a default for new tasks. + * + * @var string|null + */ + protected $name; + /** + * Driver-specific options for the selectd log driver, specified + * as key/value pairs. + * + * @var array|null + */ + protected $options; + + /** + * The log driver to use as a default for new tasks. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * The log driver to use as a default for new tasks. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Driver-specific options for the selectd log driver, specified + * as key/value pairs. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * Driver-specific options for the selectd log driver, specified + * as key/value pairs. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockPostBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockPostBody.php new file mode 100644 index 000000000..1f33fdd32 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockPostBody.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * The swarm's unlock key. + * + * @var string|null + */ + protected $unlockKey; + + /** + * The swarm's unlock key. + */ + public function getUnlockKey(): ?string + { + return $this->unlockKey; + } + + /** + * The swarm's unlock key. + */ + public function setUnlockKey(?string $unlockKey): self + { + $this->initialized['unlockKey'] = true; + $this->unlockKey = $unlockKey; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockkeyGetJsonResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockkeyGetJsonResponse200.php new file mode 100644 index 000000000..803e8f35b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockkeyGetJsonResponse200.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * The swarm's unlock key. + * + * @var string|null + */ + protected $unlockKey; + + /** + * The swarm's unlock key. + */ + public function getUnlockKey(): ?string + { + return $this->unlockKey; + } + + /** + * The swarm's unlock key. + */ + public function setUnlockKey(?string $unlockKey): self + { + $this->initialized['unlockKey'] = true; + $this->unlockKey = $unlockKey; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockkeyGetTextplainResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockkeyGetTextplainResponse200.php new file mode 100644 index 000000000..659e2c8f3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SwarmUnlockkeyGetTextplainResponse200.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * The swarm's unlock key. + * + * @var string|null + */ + protected $unlockKey; + + /** + * The swarm's unlock key. + */ + public function getUnlockKey(): ?string + { + return $this->unlockKey; + } + + /** + * The swarm's unlock key. + */ + public function setUnlockKey(?string $unlockKey): self + { + $this->initialized['unlockKey'] = true; + $this->unlockKey = $unlockKey; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemDfGetJsonResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemDfGetJsonResponse200.php new file mode 100644 index 000000000..8ba172118 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemDfGetJsonResponse200.php @@ -0,0 +1,127 @@ +initialized); + } + /** + * @var int|null + */ + protected $layersSize; + /** + * @var list|null + */ + protected $images; + /** + * @var list|null + */ + protected $containers; + /** + * @var list|null + */ + protected $volumes; + /** + * @var list|null + */ + protected $buildCache; + + public function getLayersSize(): ?int + { + return $this->layersSize; + } + + public function setLayersSize(?int $layersSize): self + { + $this->initialized['layersSize'] = true; + $this->layersSize = $layersSize; + + return $this; + } + + /** + * @return list|null + */ + public function getImages(): ?array + { + return $this->images; + } + + /** + * @param list|null $images + */ + public function setImages(?array $images): self + { + $this->initialized['images'] = true; + $this->images = $images; + + return $this; + } + + /** + * @return list|null + */ + public function getContainers(): ?array + { + return $this->containers; + } + + /** + * @param list|null $containers + */ + public function setContainers(?array $containers): self + { + $this->initialized['containers'] = true; + $this->containers = $containers; + + return $this; + } + + /** + * @return list|null + */ + public function getVolumes(): ?array + { + return $this->volumes; + } + + /** + * @param list|null $volumes + */ + public function setVolumes(?array $volumes): self + { + $this->initialized['volumes'] = true; + $this->volumes = $volumes; + + return $this; + } + + /** + * @return list|null + */ + public function getBuildCache(): ?array + { + return $this->buildCache; + } + + /** + * @param list|null $buildCache + */ + public function setBuildCache(?array $buildCache): self + { + $this->initialized['buildCache'] = true; + $this->buildCache = $buildCache; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemDfGetTextplainResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemDfGetTextplainResponse200.php new file mode 100644 index 000000000..0ca7e3435 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemDfGetTextplainResponse200.php @@ -0,0 +1,127 @@ +initialized); + } + /** + * @var int|null + */ + protected $layersSize; + /** + * @var list|null + */ + protected $images; + /** + * @var list|null + */ + protected $containers; + /** + * @var list|null + */ + protected $volumes; + /** + * @var list|null + */ + protected $buildCache; + + public function getLayersSize(): ?int + { + return $this->layersSize; + } + + public function setLayersSize(?int $layersSize): self + { + $this->initialized['layersSize'] = true; + $this->layersSize = $layersSize; + + return $this; + } + + /** + * @return list|null + */ + public function getImages(): ?array + { + return $this->images; + } + + /** + * @param list|null $images + */ + public function setImages(?array $images): self + { + $this->initialized['images'] = true; + $this->images = $images; + + return $this; + } + + /** + * @return list|null + */ + public function getContainers(): ?array + { + return $this->containers; + } + + /** + * @param list|null $containers + */ + public function setContainers(?array $containers): self + { + $this->initialized['containers'] = true; + $this->containers = $containers; + + return $this; + } + + /** + * @return list|null + */ + public function getVolumes(): ?array + { + return $this->volumes; + } + + /** + * @param list|null $volumes + */ + public function setVolumes(?array $volumes): self + { + $this->initialized['volumes'] = true; + $this->volumes = $volumes; + + return $this; + } + + /** + * @return list|null + */ + public function getBuildCache(): ?array + { + return $this->buildCache; + } + + /** + * @param list|null $buildCache + */ + public function setBuildCache(?array $buildCache): self + { + $this->initialized['buildCache'] = true; + $this->buildCache = $buildCache; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemInfo.php new file mode 100644 index 000000000..df7f2409c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemInfo.php @@ -0,0 +1,2001 @@ +initialized); + } + /** + * Unique identifier of the daemon. + * + *


+ * + * > **Note**: The format of the ID itself is not part of the API, and + * > should not be considered stable. + * + * @var string|null + */ + protected $iD; + /** + * Total number of containers on the host. + * + * @var int|null + */ + protected $containers; + /** + * Number of containers with status `"running"`. + * + * @var int|null + */ + protected $containersRunning; + /** + * Number of containers with status `"paused"`. + * + * @var int|null + */ + protected $containersPaused; + /** + * Number of containers with status `"stopped"`. + * + * @var int|null + */ + protected $containersStopped; + /** + * Total number of images on the host. + * + * Both _tagged_ and _untagged_ (dangling) images are counted. + * + * @var int|null + */ + protected $images; + /** + * Name of the storage driver in use. + * + * @var string|null + */ + protected $driver; + /** + * Information specific to the storage driver, provided as + * "label" / "value" pairs. + * + * This information is provided by the storage driver, and formatted + * in a way consistent with the output of `docker info` on the command + * line. + * + *


+ * + * > **Note**: The information returned in this field, including the + * > formatting of values and labels, should not be considered stable, + * > and may change without notice. + * + * @var list>|null + */ + protected $driverStatus; + /** + * Root directory of persistent Docker state. + * + * Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + * on Windows. + * + * @var string|null + */ + protected $dockerRootDir; + /** + * Available plugins per type. + * + *


+ * + * > **Note**: Only unmanaged (V1) plugins are included in this list. + * > V1 plugins are "lazily" loaded, and are not returned in this list + * > if there is no resource using the plugin. + * + * @var PluginsInfo|null + */ + protected $plugins; + /** + * Indicates if the host has memory limit support enabled. + * + * @var bool|null + */ + protected $memoryLimit; + /** + * Indicates if the host has memory swap limit support enabled. + * + * @var bool|null + */ + protected $swapLimit; + /** + * Indicates if the host has kernel memory TCP limit support enabled. This + * field is omitted if not supported. + * + * Kernel memory TCP limits are not supported when using cgroups v2, which + * does not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup. + * + * @var bool|null + */ + protected $kernelMemoryTCP; + /** + * Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + * the host. + * + * @var bool|null + */ + protected $cpuCfsPeriod; + /** + * Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + * the host. + * + * @var bool|null + */ + protected $cpuCfsQuota; + /** + * Indicates if CPU Shares limiting is supported by the host. + * + * @var bool|null + */ + protected $cPUShares; + /** + * Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + * + * See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + * + * @var bool|null + */ + protected $cPUSet; + /** + * Indicates if the host kernel has PID limit support enabled. + * + * @var bool|null + */ + protected $pidsLimit; + /** + * Indicates if OOM killer disable is supported on the host. + * + * @var bool|null + */ + protected $oomKillDisable; + /** + * Indicates IPv4 forwarding is enabled. + * + * @var bool|null + */ + protected $iPv4Forwarding; + /** + * Indicates if `bridge-nf-call-iptables` is available on the host. + * + * @var bool|null + */ + protected $bridgeNfIptables; + /** + * Indicates if `bridge-nf-call-ip6tables` is available on the host. + * + * @var bool|null + */ + protected $bridgeNfIp6tables; + /** + * Indicates if the daemon is running in debug-mode / with debug-level + * logging enabled. + * + * @var bool|null + */ + protected $debug; + /** + * The total number of file Descriptors in use by the daemon process. + * + * This information is only returned if debug-mode is enabled. + * + * @var int|null + */ + protected $nFd; + /** + * The number of goroutines that currently exist. + * + * This information is only returned if debug-mode is enabled. + * + * @var int|null + */ + protected $nGoroutines; + /** + * Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + * format with nano-seconds. + * + * @var string|null + */ + protected $systemTime; + /** + * The logging driver to use as a default for new containers. + * + * @var string|null + */ + protected $loggingDriver; + /** + * The driver to use for managing cgroups. + * + * @var string|null + */ + protected $cgroupDriver = 'cgroupfs'; + /** + * The version of the cgroup. + * + * @var string|null + */ + protected $cgroupVersion = '1'; + /** + * Number of event listeners subscribed. + * + * @var int|null + */ + protected $nEventsListener; + /** + * Kernel version of the host. + * + * On Linux, this information obtained from `uname`. On Windows this + * information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + * registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + * + * @var string|null + */ + protected $kernelVersion; + /** + * Name of the host's operating system, for example: "Ubuntu 16.04.2 LTS" + * or "Windows Server 2016 Datacenter". + * + * @var string|null + */ + protected $operatingSystem; + /** + * Version of the host's operating system. + * + *


+ * + * > **Note**: The information returned in this field, including its + * > very existence, and the formatting of values, should not be considered + * > stable, and may change without notice. + * + * @var string|null + */ + protected $oSVersion; + /** + * Generic type of the operating system of the host, as returned by the + * Go runtime (`GOOS`). + * + * Currently returned values are "linux" and "windows". A full list of + * possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + * + * @var string|null + */ + protected $oSType; + /** + * Hardware architecture of the host, as returned by the Go runtime + * (`GOARCH`). + * + * A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + * + * @var string|null + */ + protected $architecture; + /** + * The number of logical CPUs usable by the daemon. + * + * The number of available CPUs is checked by querying the operating + * system when the daemon starts. Changes to operating system CPU + * allocation after the daemon is started are not reflected. + * + * @var int|null + */ + protected $nCPU; + /** + * Total amount of physical memory available on the host, in bytes. + * + * @var int|null + */ + protected $memTotal; + /** + * Address / URL of the index server that is used for image search, + * and as a default for user authentication for Docker Hub and Docker Cloud. + * + * @var string|null + */ + protected $indexServerAddress = 'https://index.docker.io/v1/'; + /** + * RegistryServiceConfig stores daemon registry services configuration. + * + * @var RegistryServiceConfig|null + */ + protected $registryConfig; + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @var list|null + */ + protected $genericResources; + /** + * HTTP-proxy configured for the daemon. This value is obtained from the + * [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + * Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + * are masked in the API response. + * + * Containers do not automatically inherit this configuration. + * + * @var string|null + */ + protected $httpProxy; + /** + * HTTPS-proxy configured for the daemon. This value is obtained from the + * [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + * Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + * are masked in the API response. + * + * Containers do not automatically inherit this configuration. + * + * @var string|null + */ + protected $httpsProxy; + /** + * Comma-separated list of domain extensions for which no proxy should be + * used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + * environment variable. + * + * Containers do not automatically inherit this configuration. + * + * @var string|null + */ + protected $noProxy; + /** + * Hostname of the host. + * + * @var string|null + */ + protected $name; + /** + * User-defined labels (key/value metadata) as set on the daemon. + * + *


+ * + * > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + * > set through the daemon configuration, and _node_ labels, set from a + * > manager node in the Swarm. Node labels are not included in this + * > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + * > on a manager node in the Swarm. + * + * @var list|null + */ + protected $labels; + /** + * Indicates if experimental features are enabled on the daemon. + * + * @var bool|null + */ + protected $experimentalBuild; + /** + * Version string of the daemon. + * + * @var string|null + */ + protected $serverVersion; + /** + * List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + * runtimes configured on the daemon. Keys hold the "name" used to + * reference the runtime. + * + * The Docker daemon relies on an OCI compliant runtime (invoked via the + * `containerd` daemon) as its interface to the Linux kernel namespaces, + * cgroups, and SELinux. + * + * The default runtime is `runc`, and automatically configured. Additional + * runtimes can be configured by the user and will be listed here. + * + * @var array|null + */ + protected $runtimes; + /** + * Name of the default OCI runtime that is used when starting containers. + * + * The default can be overridden per-container at create time. + * + * @var string|null + */ + protected $defaultRuntime = 'runc'; + /** + * Represents generic information about swarm. + * + * @var SwarmInfo|null + */ + protected $swarm; + /** + * Indicates if live restore is enabled. + * + * If enabled, containers are kept running when the daemon is shutdown + * or upon daemon start if running containers are detected. + * + * @var bool|null + */ + protected $liveRestoreEnabled = false; + /** + * Represents the isolation technology to use as a default for containers. + * The supported values are platform-specific. + * + * If no isolation value is specified on daemon start, on Windows client, + * the default is `hyperv`, and on Windows server, the default is `process`. + * + * This option is currently not used on other platforms. + * + * @var string|null + */ + protected $isolation = 'default'; + /** + * Name and, optional, path of the `docker-init` binary. + * + * If the path is omitted, the daemon searches the host's `$PATH` for the + * binary and uses the first result. + * + * @var string|null + */ + protected $initBinary; + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + * + * @var Commit|null + */ + protected $containerdCommit; + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + * + * @var Commit|null + */ + protected $runcCommit; + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + * + * @var Commit|null + */ + protected $initCommit; + /** + * List of security features that are enabled on the daemon, such as + * apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + * no-new-privileges. + * + * Additional configuration options for each security feature may + * be present, and are included as a comma-separated list of key/value + * pairs. + * + * @var list|null + */ + protected $securityOptions; + /** + * Reports a summary of the product license on the daemon. + * + * If a commercial license has been applied to the daemon, information + * such as number of nodes, and expiration are included. + * + * @var string|null + */ + protected $productLicense; + /** + * List of custom default address pools for local networks, which can be + * specified in the daemon.json file or dockerd option. + * + * Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + * 10.10.[0-255].0/24 address pools. + * + * @var list|null + */ + protected $defaultAddressPools; + /** + * List of warnings / informational messages about missing features, or + * issues related to the daemon configuration. + * + * These messages can be printed by the client as information to the user. + * + * @var list|null + */ + protected $warnings; + /** + * List of directories where (Container Device Interface) CDI + * specifications are located. + * + * These specifications define vendor-specific modifications to an OCI + * runtime specification for a container being created. + * + * An empty list indicates that CDI device injection is disabled. + * + * Note that since using CDI device injection requires the daemon to have + * experimental enabled. For non-experimental daemons an empty list will + * always be returned. + * + * @var list|null + */ + protected $cDISpecDirs; + + /** + * Unique identifier of the daemon. + * + *


+ * + * > **Note**: The format of the ID itself is not part of the API, and + * > should not be considered stable. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * Unique identifier of the daemon. + * + *


+ * + * > **Note**: The format of the ID itself is not part of the API, and + * > should not be considered stable. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * Total number of containers on the host. + */ + public function getContainers(): ?int + { + return $this->containers; + } + + /** + * Total number of containers on the host. + */ + public function setContainers(?int $containers): self + { + $this->initialized['containers'] = true; + $this->containers = $containers; + + return $this; + } + + /** + * Number of containers with status `"running"`. + */ + public function getContainersRunning(): ?int + { + return $this->containersRunning; + } + + /** + * Number of containers with status `"running"`. + */ + public function setContainersRunning(?int $containersRunning): self + { + $this->initialized['containersRunning'] = true; + $this->containersRunning = $containersRunning; + + return $this; + } + + /** + * Number of containers with status `"paused"`. + */ + public function getContainersPaused(): ?int + { + return $this->containersPaused; + } + + /** + * Number of containers with status `"paused"`. + */ + public function setContainersPaused(?int $containersPaused): self + { + $this->initialized['containersPaused'] = true; + $this->containersPaused = $containersPaused; + + return $this; + } + + /** + * Number of containers with status `"stopped"`. + */ + public function getContainersStopped(): ?int + { + return $this->containersStopped; + } + + /** + * Number of containers with status `"stopped"`. + */ + public function setContainersStopped(?int $containersStopped): self + { + $this->initialized['containersStopped'] = true; + $this->containersStopped = $containersStopped; + + return $this; + } + + /** + * Total number of images on the host. + * + * Both _tagged_ and _untagged_ (dangling) images are counted. + */ + public function getImages(): ?int + { + return $this->images; + } + + /** + * Total number of images on the host. + * + * Both _tagged_ and _untagged_ (dangling) images are counted. + */ + public function setImages(?int $images): self + { + $this->initialized['images'] = true; + $this->images = $images; + + return $this; + } + + /** + * Name of the storage driver in use. + */ + public function getDriver(): ?string + { + return $this->driver; + } + + /** + * Name of the storage driver in use. + */ + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * Information specific to the storage driver, provided as + * "label" / "value" pairs. + * + * This information is provided by the storage driver, and formatted + * in a way consistent with the output of `docker info` on the command + * line. + * + *


+ * + * > **Note**: The information returned in this field, including the + * > formatting of values and labels, should not be considered stable, + * > and may change without notice. + * + * @return list>|null + */ + public function getDriverStatus(): ?array + { + return $this->driverStatus; + } + + /** + * Information specific to the storage driver, provided as + * "label" / "value" pairs. + * + * This information is provided by the storage driver, and formatted + * in a way consistent with the output of `docker info` on the command + * line. + * + *


+ * + * > **Note**: The information returned in this field, including the + * > formatting of values and labels, should not be considered stable, + * > and may change without notice. + * + * @param list>|null $driverStatus + */ + public function setDriverStatus(?array $driverStatus): self + { + $this->initialized['driverStatus'] = true; + $this->driverStatus = $driverStatus; + + return $this; + } + + /** + * Root directory of persistent Docker state. + * + * Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + * on Windows. + */ + public function getDockerRootDir(): ?string + { + return $this->dockerRootDir; + } + + /** + * Root directory of persistent Docker state. + * + * Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + * on Windows. + */ + public function setDockerRootDir(?string $dockerRootDir): self + { + $this->initialized['dockerRootDir'] = true; + $this->dockerRootDir = $dockerRootDir; + + return $this; + } + + /** + * Available plugins per type. + * + *


+ * + * > **Note**: Only unmanaged (V1) plugins are included in this list. + * > V1 plugins are "lazily" loaded, and are not returned in this list + * > if there is no resource using the plugin. + */ + public function getPlugins(): ?PluginsInfo + { + return $this->plugins; + } + + /** + * Available plugins per type. + * + *


+ * + * > **Note**: Only unmanaged (V1) plugins are included in this list. + * > V1 plugins are "lazily" loaded, and are not returned in this list + * > if there is no resource using the plugin. + */ + public function setPlugins(?PluginsInfo $plugins): self + { + $this->initialized['plugins'] = true; + $this->plugins = $plugins; + + return $this; + } + + /** + * Indicates if the host has memory limit support enabled. + */ + public function getMemoryLimit(): ?bool + { + return $this->memoryLimit; + } + + /** + * Indicates if the host has memory limit support enabled. + */ + public function setMemoryLimit(?bool $memoryLimit): self + { + $this->initialized['memoryLimit'] = true; + $this->memoryLimit = $memoryLimit; + + return $this; + } + + /** + * Indicates if the host has memory swap limit support enabled. + */ + public function getSwapLimit(): ?bool + { + return $this->swapLimit; + } + + /** + * Indicates if the host has memory swap limit support enabled. + */ + public function setSwapLimit(?bool $swapLimit): self + { + $this->initialized['swapLimit'] = true; + $this->swapLimit = $swapLimit; + + return $this; + } + + /** + * Indicates if the host has kernel memory TCP limit support enabled. This + * field is omitted if not supported. + * + * Kernel memory TCP limits are not supported when using cgroups v2, which + * does not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup. + */ + public function getKernelMemoryTCP(): ?bool + { + return $this->kernelMemoryTCP; + } + + /** + * Indicates if the host has kernel memory TCP limit support enabled. This + * field is omitted if not supported. + * + * Kernel memory TCP limits are not supported when using cgroups v2, which + * does not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup. + */ + public function setKernelMemoryTCP(?bool $kernelMemoryTCP): self + { + $this->initialized['kernelMemoryTCP'] = true; + $this->kernelMemoryTCP = $kernelMemoryTCP; + + return $this; + } + + /** + * Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + * the host. + */ + public function getCpuCfsPeriod(): ?bool + { + return $this->cpuCfsPeriod; + } + + /** + * Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + * the host. + */ + public function setCpuCfsPeriod(?bool $cpuCfsPeriod): self + { + $this->initialized['cpuCfsPeriod'] = true; + $this->cpuCfsPeriod = $cpuCfsPeriod; + + return $this; + } + + /** + * Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + * the host. + */ + public function getCpuCfsQuota(): ?bool + { + return $this->cpuCfsQuota; + } + + /** + * Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + * the host. + */ + public function setCpuCfsQuota(?bool $cpuCfsQuota): self + { + $this->initialized['cpuCfsQuota'] = true; + $this->cpuCfsQuota = $cpuCfsQuota; + + return $this; + } + + /** + * Indicates if CPU Shares limiting is supported by the host. + */ + public function getCPUShares(): ?bool + { + return $this->cPUShares; + } + + /** + * Indicates if CPU Shares limiting is supported by the host. + */ + public function setCPUShares(?bool $cPUShares): self + { + $this->initialized['cPUShares'] = true; + $this->cPUShares = $cPUShares; + + return $this; + } + + /** + * Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + * + * See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + */ + public function getCPUSet(): ?bool + { + return $this->cPUSet; + } + + /** + * Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + * + * See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + */ + public function setCPUSet(?bool $cPUSet): self + { + $this->initialized['cPUSet'] = true; + $this->cPUSet = $cPUSet; + + return $this; + } + + /** + * Indicates if the host kernel has PID limit support enabled. + */ + public function getPidsLimit(): ?bool + { + return $this->pidsLimit; + } + + /** + * Indicates if the host kernel has PID limit support enabled. + */ + public function setPidsLimit(?bool $pidsLimit): self + { + $this->initialized['pidsLimit'] = true; + $this->pidsLimit = $pidsLimit; + + return $this; + } + + /** + * Indicates if OOM killer disable is supported on the host. + */ + public function getOomKillDisable(): ?bool + { + return $this->oomKillDisable; + } + + /** + * Indicates if OOM killer disable is supported on the host. + */ + public function setOomKillDisable(?bool $oomKillDisable): self + { + $this->initialized['oomKillDisable'] = true; + $this->oomKillDisable = $oomKillDisable; + + return $this; + } + + /** + * Indicates IPv4 forwarding is enabled. + */ + public function getIPv4Forwarding(): ?bool + { + return $this->iPv4Forwarding; + } + + /** + * Indicates IPv4 forwarding is enabled. + */ + public function setIPv4Forwarding(?bool $iPv4Forwarding): self + { + $this->initialized['iPv4Forwarding'] = true; + $this->iPv4Forwarding = $iPv4Forwarding; + + return $this; + } + + /** + * Indicates if `bridge-nf-call-iptables` is available on the host. + */ + public function getBridgeNfIptables(): ?bool + { + return $this->bridgeNfIptables; + } + + /** + * Indicates if `bridge-nf-call-iptables` is available on the host. + */ + public function setBridgeNfIptables(?bool $bridgeNfIptables): self + { + $this->initialized['bridgeNfIptables'] = true; + $this->bridgeNfIptables = $bridgeNfIptables; + + return $this; + } + + /** + * Indicates if `bridge-nf-call-ip6tables` is available on the host. + */ + public function getBridgeNfIp6tables(): ?bool + { + return $this->bridgeNfIp6tables; + } + + /** + * Indicates if `bridge-nf-call-ip6tables` is available on the host. + */ + public function setBridgeNfIp6tables(?bool $bridgeNfIp6tables): self + { + $this->initialized['bridgeNfIp6tables'] = true; + $this->bridgeNfIp6tables = $bridgeNfIp6tables; + + return $this; + } + + /** + * Indicates if the daemon is running in debug-mode / with debug-level + * logging enabled. + */ + public function getDebug(): ?bool + { + return $this->debug; + } + + /** + * Indicates if the daemon is running in debug-mode / with debug-level + * logging enabled. + */ + public function setDebug(?bool $debug): self + { + $this->initialized['debug'] = true; + $this->debug = $debug; + + return $this; + } + + /** + * The total number of file Descriptors in use by the daemon process. + * + * This information is only returned if debug-mode is enabled. + */ + public function getNFd(): ?int + { + return $this->nFd; + } + + /** + * The total number of file Descriptors in use by the daemon process. + * + * This information is only returned if debug-mode is enabled. + */ + public function setNFd(?int $nFd): self + { + $this->initialized['nFd'] = true; + $this->nFd = $nFd; + + return $this; + } + + /** + * The number of goroutines that currently exist. + * + * This information is only returned if debug-mode is enabled. + */ + public function getNGoroutines(): ?int + { + return $this->nGoroutines; + } + + /** + * The number of goroutines that currently exist. + * + * This information is only returned if debug-mode is enabled. + */ + public function setNGoroutines(?int $nGoroutines): self + { + $this->initialized['nGoroutines'] = true; + $this->nGoroutines = $nGoroutines; + + return $this; + } + + /** + * Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + * format with nano-seconds. + */ + public function getSystemTime(): ?string + { + return $this->systemTime; + } + + /** + * Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + * format with nano-seconds. + */ + public function setSystemTime(?string $systemTime): self + { + $this->initialized['systemTime'] = true; + $this->systemTime = $systemTime; + + return $this; + } + + /** + * The logging driver to use as a default for new containers. + */ + public function getLoggingDriver(): ?string + { + return $this->loggingDriver; + } + + /** + * The logging driver to use as a default for new containers. + */ + public function setLoggingDriver(?string $loggingDriver): self + { + $this->initialized['loggingDriver'] = true; + $this->loggingDriver = $loggingDriver; + + return $this; + } + + /** + * The driver to use for managing cgroups. + */ + public function getCgroupDriver(): ?string + { + return $this->cgroupDriver; + } + + /** + * The driver to use for managing cgroups. + */ + public function setCgroupDriver(?string $cgroupDriver): self + { + $this->initialized['cgroupDriver'] = true; + $this->cgroupDriver = $cgroupDriver; + + return $this; + } + + /** + * The version of the cgroup. + */ + public function getCgroupVersion(): ?string + { + return $this->cgroupVersion; + } + + /** + * The version of the cgroup. + */ + public function setCgroupVersion(?string $cgroupVersion): self + { + $this->initialized['cgroupVersion'] = true; + $this->cgroupVersion = $cgroupVersion; + + return $this; + } + + /** + * Number of event listeners subscribed. + */ + public function getNEventsListener(): ?int + { + return $this->nEventsListener; + } + + /** + * Number of event listeners subscribed. + */ + public function setNEventsListener(?int $nEventsListener): self + { + $this->initialized['nEventsListener'] = true; + $this->nEventsListener = $nEventsListener; + + return $this; + } + + /** + * Kernel version of the host. + * + * On Linux, this information obtained from `uname`. On Windows this + * information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + * registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + */ + public function getKernelVersion(): ?string + { + return $this->kernelVersion; + } + + /** + * Kernel version of the host. + * + * On Linux, this information obtained from `uname`. On Windows this + * information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + * registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + */ + public function setKernelVersion(?string $kernelVersion): self + { + $this->initialized['kernelVersion'] = true; + $this->kernelVersion = $kernelVersion; + + return $this; + } + + /** + * Name of the host's operating system, for example: "Ubuntu 16.04.2 LTS" + * or "Windows Server 2016 Datacenter". + */ + public function getOperatingSystem(): ?string + { + return $this->operatingSystem; + } + + /** + * Name of the host's operating system, for example: "Ubuntu 16.04.2 LTS" + * or "Windows Server 2016 Datacenter". + */ + public function setOperatingSystem(?string $operatingSystem): self + { + $this->initialized['operatingSystem'] = true; + $this->operatingSystem = $operatingSystem; + + return $this; + } + + /** + * Version of the host's operating system. + * + *


+ * + * > **Note**: The information returned in this field, including its + * > very existence, and the formatting of values, should not be considered + * > stable, and may change without notice. + */ + public function getOSVersion(): ?string + { + return $this->oSVersion; + } + + /** + * Version of the host's operating system. + * + *


+ * + * > **Note**: The information returned in this field, including its + * > very existence, and the formatting of values, should not be considered + * > stable, and may change without notice. + */ + public function setOSVersion(?string $oSVersion): self + { + $this->initialized['oSVersion'] = true; + $this->oSVersion = $oSVersion; + + return $this; + } + + /** + * Generic type of the operating system of the host, as returned by the + * Go runtime (`GOOS`). + * + * Currently returned values are "linux" and "windows". A full list of + * possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + */ + public function getOSType(): ?string + { + return $this->oSType; + } + + /** + * Generic type of the operating system of the host, as returned by the + * Go runtime (`GOOS`). + * + * Currently returned values are "linux" and "windows". A full list of + * possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + */ + public function setOSType(?string $oSType): self + { + $this->initialized['oSType'] = true; + $this->oSType = $oSType; + + return $this; + } + + /** + * Hardware architecture of the host, as returned by the Go runtime + * (`GOARCH`). + * + * A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + */ + public function getArchitecture(): ?string + { + return $this->architecture; + } + + /** + * Hardware architecture of the host, as returned by the Go runtime + * (`GOARCH`). + * + * A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + */ + public function setArchitecture(?string $architecture): self + { + $this->initialized['architecture'] = true; + $this->architecture = $architecture; + + return $this; + } + + /** + * The number of logical CPUs usable by the daemon. + * + * The number of available CPUs is checked by querying the operating + * system when the daemon starts. Changes to operating system CPU + * allocation after the daemon is started are not reflected. + */ + public function getNCPU(): ?int + { + return $this->nCPU; + } + + /** + * The number of logical CPUs usable by the daemon. + * + * The number of available CPUs is checked by querying the operating + * system when the daemon starts. Changes to operating system CPU + * allocation after the daemon is started are not reflected. + */ + public function setNCPU(?int $nCPU): self + { + $this->initialized['nCPU'] = true; + $this->nCPU = $nCPU; + + return $this; + } + + /** + * Total amount of physical memory available on the host, in bytes. + */ + public function getMemTotal(): ?int + { + return $this->memTotal; + } + + /** + * Total amount of physical memory available on the host, in bytes. + */ + public function setMemTotal(?int $memTotal): self + { + $this->initialized['memTotal'] = true; + $this->memTotal = $memTotal; + + return $this; + } + + /** + * Address / URL of the index server that is used for image search, + * and as a default for user authentication for Docker Hub and Docker Cloud. + */ + public function getIndexServerAddress(): ?string + { + return $this->indexServerAddress; + } + + /** + * Address / URL of the index server that is used for image search, + * and as a default for user authentication for Docker Hub and Docker Cloud. + */ + public function setIndexServerAddress(?string $indexServerAddress): self + { + $this->initialized['indexServerAddress'] = true; + $this->indexServerAddress = $indexServerAddress; + + return $this; + } + + /** + * RegistryServiceConfig stores daemon registry services configuration. + */ + public function getRegistryConfig(): ?RegistryServiceConfig + { + return $this->registryConfig; + } + + /** + * RegistryServiceConfig stores daemon registry services configuration. + */ + public function setRegistryConfig(?RegistryServiceConfig $registryConfig): self + { + $this->initialized['registryConfig'] = true; + $this->registryConfig = $registryConfig; + + return $this; + } + + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @return list|null + */ + public function getGenericResources(): ?array + { + return $this->genericResources; + } + + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @param list|null $genericResources + */ + public function setGenericResources(?array $genericResources): self + { + $this->initialized['genericResources'] = true; + $this->genericResources = $genericResources; + + return $this; + } + + /** + * HTTP-proxy configured for the daemon. This value is obtained from the + * [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + * Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + * are masked in the API response. + * + * Containers do not automatically inherit this configuration. + */ + public function getHttpProxy(): ?string + { + return $this->httpProxy; + } + + /** + * HTTP-proxy configured for the daemon. This value is obtained from the + * [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + * Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + * are masked in the API response. + * + * Containers do not automatically inherit this configuration. + */ + public function setHttpProxy(?string $httpProxy): self + { + $this->initialized['httpProxy'] = true; + $this->httpProxy = $httpProxy; + + return $this; + } + + /** + * HTTPS-proxy configured for the daemon. This value is obtained from the + * [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + * Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + * are masked in the API response. + * + * Containers do not automatically inherit this configuration. + */ + public function getHttpsProxy(): ?string + { + return $this->httpsProxy; + } + + /** + * HTTPS-proxy configured for the daemon. This value is obtained from the + * [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + * Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + * are masked in the API response. + * + * Containers do not automatically inherit this configuration. + */ + public function setHttpsProxy(?string $httpsProxy): self + { + $this->initialized['httpsProxy'] = true; + $this->httpsProxy = $httpsProxy; + + return $this; + } + + /** + * Comma-separated list of domain extensions for which no proxy should be + * used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + * environment variable. + * + * Containers do not automatically inherit this configuration. + */ + public function getNoProxy(): ?string + { + return $this->noProxy; + } + + /** + * Comma-separated list of domain extensions for which no proxy should be + * used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + * environment variable. + * + * Containers do not automatically inherit this configuration. + */ + public function setNoProxy(?string $noProxy): self + { + $this->initialized['noProxy'] = true; + $this->noProxy = $noProxy; + + return $this; + } + + /** + * Hostname of the host. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Hostname of the host. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined labels (key/value metadata) as set on the daemon. + * + *


+ * + * > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + * > set through the daemon configuration, and _node_ labels, set from a + * > manager node in the Swarm. Node labels are not included in this + * > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + * > on a manager node in the Swarm. + * + * @return list|null + */ + public function getLabels(): ?array + { + return $this->labels; + } + + /** + * User-defined labels (key/value metadata) as set on the daemon. + * + *


+ * + * > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + * > set through the daemon configuration, and _node_ labels, set from a + * > manager node in the Swarm. Node labels are not included in this + * > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + * > on a manager node in the Swarm. + * + * @param list|null $labels + */ + public function setLabels(?array $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Indicates if experimental features are enabled on the daemon. + */ + public function getExperimentalBuild(): ?bool + { + return $this->experimentalBuild; + } + + /** + * Indicates if experimental features are enabled on the daemon. + */ + public function setExperimentalBuild(?bool $experimentalBuild): self + { + $this->initialized['experimentalBuild'] = true; + $this->experimentalBuild = $experimentalBuild; + + return $this; + } + + /** + * Version string of the daemon. + */ + public function getServerVersion(): ?string + { + return $this->serverVersion; + } + + /** + * Version string of the daemon. + */ + public function setServerVersion(?string $serverVersion): self + { + $this->initialized['serverVersion'] = true; + $this->serverVersion = $serverVersion; + + return $this; + } + + /** + * List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + * runtimes configured on the daemon. Keys hold the "name" used to + * reference the runtime. + * + * The Docker daemon relies on an OCI compliant runtime (invoked via the + * `containerd` daemon) as its interface to the Linux kernel namespaces, + * cgroups, and SELinux. + * + * The default runtime is `runc`, and automatically configured. Additional + * runtimes can be configured by the user and will be listed here. + * + * @return array|null + */ + public function getRuntimes(): ?iterable + { + return $this->runtimes; + } + + /** + * List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + * runtimes configured on the daemon. Keys hold the "name" used to + * reference the runtime. + * + * The Docker daemon relies on an OCI compliant runtime (invoked via the + * `containerd` daemon) as its interface to the Linux kernel namespaces, + * cgroups, and SELinux. + * + * The default runtime is `runc`, and automatically configured. Additional + * runtimes can be configured by the user and will be listed here. + * + * @param array|null $runtimes + */ + public function setRuntimes(?iterable $runtimes): self + { + $this->initialized['runtimes'] = true; + $this->runtimes = $runtimes; + + return $this; + } + + /** + * Name of the default OCI runtime that is used when starting containers. + * + * The default can be overridden per-container at create time. + */ + public function getDefaultRuntime(): ?string + { + return $this->defaultRuntime; + } + + /** + * Name of the default OCI runtime that is used when starting containers. + * + * The default can be overridden per-container at create time. + */ + public function setDefaultRuntime(?string $defaultRuntime): self + { + $this->initialized['defaultRuntime'] = true; + $this->defaultRuntime = $defaultRuntime; + + return $this; + } + + /** + * Represents generic information about swarm. + */ + public function getSwarm(): ?SwarmInfo + { + return $this->swarm; + } + + /** + * Represents generic information about swarm. + */ + public function setSwarm(?SwarmInfo $swarm): self + { + $this->initialized['swarm'] = true; + $this->swarm = $swarm; + + return $this; + } + + /** + * Indicates if live restore is enabled. + * + * If enabled, containers are kept running when the daemon is shutdown + * or upon daemon start if running containers are detected. + */ + public function getLiveRestoreEnabled(): ?bool + { + return $this->liveRestoreEnabled; + } + + /** + * Indicates if live restore is enabled. + * + * If enabled, containers are kept running when the daemon is shutdown + * or upon daemon start if running containers are detected. + */ + public function setLiveRestoreEnabled(?bool $liveRestoreEnabled): self + { + $this->initialized['liveRestoreEnabled'] = true; + $this->liveRestoreEnabled = $liveRestoreEnabled; + + return $this; + } + + /** + * Represents the isolation technology to use as a default for containers. + * The supported values are platform-specific. + * + * If no isolation value is specified on daemon start, on Windows client, + * the default is `hyperv`, and on Windows server, the default is `process`. + * + * This option is currently not used on other platforms. + */ + public function getIsolation(): ?string + { + return $this->isolation; + } + + /** + * Represents the isolation technology to use as a default for containers. + * The supported values are platform-specific. + * + * If no isolation value is specified on daemon start, on Windows client, + * the default is `hyperv`, and on Windows server, the default is `process`. + * + * This option is currently not used on other platforms. + */ + public function setIsolation(?string $isolation): self + { + $this->initialized['isolation'] = true; + $this->isolation = $isolation; + + return $this; + } + + /** + * Name and, optional, path of the `docker-init` binary. + * + * If the path is omitted, the daemon searches the host's `$PATH` for the + * binary and uses the first result. + */ + public function getInitBinary(): ?string + { + return $this->initBinary; + } + + /** + * Name and, optional, path of the `docker-init` binary. + * + * If the path is omitted, the daemon searches the host's `$PATH` for the + * binary and uses the first result. + */ + public function setInitBinary(?string $initBinary): self + { + $this->initialized['initBinary'] = true; + $this->initBinary = $initBinary; + + return $this; + } + + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + */ + public function getContainerdCommit(): ?Commit + { + return $this->containerdCommit; + } + + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + */ + public function setContainerdCommit(?Commit $containerdCommit): self + { + $this->initialized['containerdCommit'] = true; + $this->containerdCommit = $containerdCommit; + + return $this; + } + + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + */ + public function getRuncCommit(): ?Commit + { + return $this->runcCommit; + } + + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + */ + public function setRuncCommit(?Commit $runcCommit): self + { + $this->initialized['runcCommit'] = true; + $this->runcCommit = $runcCommit; + + return $this; + } + + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + */ + public function getInitCommit(): ?Commit + { + return $this->initCommit; + } + + /** + * Commit holds the Git-commit (SHA1) that a binary was built from, as + * reported in the version-string of external tools, such as `containerd`, + * or `runC`. + */ + public function setInitCommit(?Commit $initCommit): self + { + $this->initialized['initCommit'] = true; + $this->initCommit = $initCommit; + + return $this; + } + + /** + * List of security features that are enabled on the daemon, such as + * apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + * no-new-privileges. + * + * Additional configuration options for each security feature may + * be present, and are included as a comma-separated list of key/value + * pairs. + * + * @return list|null + */ + public function getSecurityOptions(): ?array + { + return $this->securityOptions; + } + + /** + * List of security features that are enabled on the daemon, such as + * apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + * no-new-privileges. + * + * Additional configuration options for each security feature may + * be present, and are included as a comma-separated list of key/value + * pairs. + * + * @param list|null $securityOptions + */ + public function setSecurityOptions(?array $securityOptions): self + { + $this->initialized['securityOptions'] = true; + $this->securityOptions = $securityOptions; + + return $this; + } + + /** + * Reports a summary of the product license on the daemon. + * + * If a commercial license has been applied to the daemon, information + * such as number of nodes, and expiration are included. + */ + public function getProductLicense(): ?string + { + return $this->productLicense; + } + + /** + * Reports a summary of the product license on the daemon. + * + * If a commercial license has been applied to the daemon, information + * such as number of nodes, and expiration are included. + */ + public function setProductLicense(?string $productLicense): self + { + $this->initialized['productLicense'] = true; + $this->productLicense = $productLicense; + + return $this; + } + + /** + * List of custom default address pools for local networks, which can be + * specified in the daemon.json file or dockerd option. + * + * Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + * 10.10.[0-255].0/24 address pools. + * + * @return list|null + */ + public function getDefaultAddressPools(): ?array + { + return $this->defaultAddressPools; + } + + /** + * List of custom default address pools for local networks, which can be + * specified in the daemon.json file or dockerd option. + * + * Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + * 10.10.[0-255].0/24 address pools. + * + * @param list|null $defaultAddressPools + */ + public function setDefaultAddressPools(?array $defaultAddressPools): self + { + $this->initialized['defaultAddressPools'] = true; + $this->defaultAddressPools = $defaultAddressPools; + + return $this; + } + + /** + * List of warnings / informational messages about missing features, or + * issues related to the daemon configuration. + * + * These messages can be printed by the client as information to the user. + * + * @return list|null + */ + public function getWarnings(): ?array + { + return $this->warnings; + } + + /** + * List of warnings / informational messages about missing features, or + * issues related to the daemon configuration. + * + * These messages can be printed by the client as information to the user. + * + * @param list|null $warnings + */ + public function setWarnings(?array $warnings): self + { + $this->initialized['warnings'] = true; + $this->warnings = $warnings; + + return $this; + } + + /** + * List of directories where (Container Device Interface) CDI + * specifications are located. + * + * These specifications define vendor-specific modifications to an OCI + * runtime specification for a container being created. + * + * An empty list indicates that CDI device injection is disabled. + * + * Note that since using CDI device injection requires the daemon to have + * experimental enabled. For non-experimental daemons an empty list will + * always be returned. + * + * @return list|null + */ + public function getCDISpecDirs(): ?array + { + return $this->cDISpecDirs; + } + + /** + * List of directories where (Container Device Interface) CDI + * specifications are located. + * + * These specifications define vendor-specific modifications to an OCI + * runtime specification for a container being created. + * + * An empty list indicates that CDI device injection is disabled. + * + * Note that since using CDI device injection requires the daemon to have + * experimental enabled. For non-experimental daemons an empty list will + * always be returned. + * + * @param list|null $cDISpecDirs + */ + public function setCDISpecDirs(?array $cDISpecDirs): self + { + $this->initialized['cDISpecDirs'] = true; + $this->cDISpecDirs = $cDISpecDirs; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemInfoDefaultAddressPoolsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemInfoDefaultAddressPoolsItem.php new file mode 100644 index 000000000..7847664fa --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemInfoDefaultAddressPoolsItem.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * The network address in CIDR format. + * + * @var string|null + */ + protected $base; + /** + * The network pool size. + * + * @var int|null + */ + protected $size; + + /** + * The network address in CIDR format. + */ + public function getBase(): ?string + { + return $this->base; + } + + /** + * The network address in CIDR format. + */ + public function setBase(?string $base): self + { + $this->initialized['base'] = true; + $this->base = $base; + + return $this; + } + + /** + * The network pool size. + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * The network pool size. + */ + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersion.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersion.php new file mode 100644 index 000000000..1281aabe0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersion.php @@ -0,0 +1,329 @@ +initialized); + } + /** + * @var SystemVersionPlatform|null + */ + protected $platform; + /** + * Information about system components. + * + * @var list|null + */ + protected $components; + /** + * The version of the daemon. + * + * @var string|null + */ + protected $version; + /** + * The default (and highest) API version that is supported by the daemon. + * + * @var string|null + */ + protected $apiVersion; + /** + * The minimum API version that is supported by the daemon. + * + * @var string|null + */ + protected $minAPIVersion; + /** + * The Git commit of the source code that was used to build the daemon. + * + * @var string|null + */ + protected $gitCommit; + /** + * The version Go used to compile the daemon, and the version of the Go + * runtime in use. + * + * @var string|null + */ + protected $goVersion; + /** + * The operating system that the daemon is running on ("linux" or "windows"). + * + * @var string|null + */ + protected $os; + /** + * The architecture that the daemon is running on. + * + * @var string|null + */ + protected $arch; + /** + * The kernel version (`uname -r`) that the daemon is running on. + * + * This field is omitted when empty. + * + * @var string|null + */ + protected $kernelVersion; + /** + * Indicates if the daemon is started with experimental features enabled. + * + * This field is omitted when empty / false. + * + * @var bool|null + */ + protected $experimental; + /** + * The date and time that the daemon was compiled. + * + * @var string|null + */ + protected $buildTime; + + public function getPlatform(): ?SystemVersionPlatform + { + return $this->platform; + } + + public function setPlatform(?SystemVersionPlatform $platform): self + { + $this->initialized['platform'] = true; + $this->platform = $platform; + + return $this; + } + + /** + * Information about system components. + * + * @return list|null + */ + public function getComponents(): ?array + { + return $this->components; + } + + /** + * Information about system components. + * + * @param list|null $components + */ + public function setComponents(?array $components): self + { + $this->initialized['components'] = true; + $this->components = $components; + + return $this; + } + + /** + * The version of the daemon. + */ + public function getVersion(): ?string + { + return $this->version; + } + + /** + * The version of the daemon. + */ + public function setVersion(?string $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + /** + * The default (and highest) API version that is supported by the daemon. + */ + public function getApiVersion(): ?string + { + return $this->apiVersion; + } + + /** + * The default (and highest) API version that is supported by the daemon. + */ + public function setApiVersion(?string $apiVersion): self + { + $this->initialized['apiVersion'] = true; + $this->apiVersion = $apiVersion; + + return $this; + } + + /** + * The minimum API version that is supported by the daemon. + */ + public function getMinAPIVersion(): ?string + { + return $this->minAPIVersion; + } + + /** + * The minimum API version that is supported by the daemon. + */ + public function setMinAPIVersion(?string $minAPIVersion): self + { + $this->initialized['minAPIVersion'] = true; + $this->minAPIVersion = $minAPIVersion; + + return $this; + } + + /** + * The Git commit of the source code that was used to build the daemon. + */ + public function getGitCommit(): ?string + { + return $this->gitCommit; + } + + /** + * The Git commit of the source code that was used to build the daemon. + */ + public function setGitCommit(?string $gitCommit): self + { + $this->initialized['gitCommit'] = true; + $this->gitCommit = $gitCommit; + + return $this; + } + + /** + * The version Go used to compile the daemon, and the version of the Go + * runtime in use. + */ + public function getGoVersion(): ?string + { + return $this->goVersion; + } + + /** + * The version Go used to compile the daemon, and the version of the Go + * runtime in use. + */ + public function setGoVersion(?string $goVersion): self + { + $this->initialized['goVersion'] = true; + $this->goVersion = $goVersion; + + return $this; + } + + /** + * The operating system that the daemon is running on ("linux" or "windows"). + */ + public function getOs(): ?string + { + return $this->os; + } + + /** + * The operating system that the daemon is running on ("linux" or "windows"). + */ + public function setOs(?string $os): self + { + $this->initialized['os'] = true; + $this->os = $os; + + return $this; + } + + /** + * The architecture that the daemon is running on. + */ + public function getArch(): ?string + { + return $this->arch; + } + + /** + * The architecture that the daemon is running on. + */ + public function setArch(?string $arch): self + { + $this->initialized['arch'] = true; + $this->arch = $arch; + + return $this; + } + + /** + * The kernel version (`uname -r`) that the daemon is running on. + * + * This field is omitted when empty. + */ + public function getKernelVersion(): ?string + { + return $this->kernelVersion; + } + + /** + * The kernel version (`uname -r`) that the daemon is running on. + * + * This field is omitted when empty. + */ + public function setKernelVersion(?string $kernelVersion): self + { + $this->initialized['kernelVersion'] = true; + $this->kernelVersion = $kernelVersion; + + return $this; + } + + /** + * Indicates if the daemon is started with experimental features enabled. + * + * This field is omitted when empty / false. + */ + public function getExperimental(): ?bool + { + return $this->experimental; + } + + /** + * Indicates if the daemon is started with experimental features enabled. + * + * This field is omitted when empty / false. + */ + public function setExperimental(?bool $experimental): self + { + $this->initialized['experimental'] = true; + $this->experimental = $experimental; + + return $this; + } + + /** + * The date and time that the daemon was compiled. + */ + public function getBuildTime(): ?string + { + return $this->buildTime; + } + + /** + * The date and time that the daemon was compiled. + */ + public function setBuildTime(?string $buildTime): self + { + $this->initialized['buildTime'] = true; + $this->buildTime = $buildTime; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionComponentsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionComponentsItem.php new file mode 100644 index 000000000..3236b6a98 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionComponentsItem.php @@ -0,0 +1,108 @@ +initialized); + } + /** + * Name of the component. + * + * @var string|null + */ + protected $name; + /** + * Version of the component. + * + * @var string|null + */ + protected $version; + /** + * Key/value pairs of strings with additional information about the + * component. These values are intended for informational purposes + * only, and their content is not defined, and not part of the API + * specification. + * + * These messages can be printed by the client as information to the user. + * + * @var SystemVersionComponentsItemDetails|null + */ + protected $details; + + /** + * Name of the component. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the component. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Version of the component. + */ + public function getVersion(): ?string + { + return $this->version; + } + + /** + * Version of the component. + */ + public function setVersion(?string $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + /** + * Key/value pairs of strings with additional information about the + * component. These values are intended for informational purposes + * only, and their content is not defined, and not part of the API + * specification. + * + * These messages can be printed by the client as information to the user. + */ + public function getDetails(): ?SystemVersionComponentsItemDetails + { + return $this->details; + } + + /** + * Key/value pairs of strings with additional information about the + * component. These values are intended for informational purposes + * only, and their content is not defined, and not part of the API + * specification. + * + * These messages can be printed by the client as information to the user. + */ + public function setDetails(?SystemVersionComponentsItemDetails $details): self + { + $this->initialized['details'] = true; + $this->details = $details; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionComponentsItemDetails.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionComponentsItemDetails.php new file mode 100644 index 000000000..ee3fb7116 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionComponentsItemDetails.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionPlatform.php b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionPlatform.php new file mode 100644 index 000000000..0dbeaa69b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/SystemVersionPlatform.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TLSInfo.php b/app/vendor/beluga-php/docker-php-api/src/Model/TLSInfo.php new file mode 100644 index 000000000..9dfef4a0b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TLSInfo.php @@ -0,0 +1,96 @@ +initialized); + } + /** + * The root CA certificate(s) that are used to validate leaf TLS + * certificates. + * + * @var string|null + */ + protected $trustRoot; + /** + * The base64-url-safe-encoded raw subject bytes of the issuer. + * + * @var string|null + */ + protected $certIssuerSubject; + /** + * The base64-url-safe-encoded raw public key bytes of the issuer. + * + * @var string|null + */ + protected $certIssuerPublicKey; + + /** + * The root CA certificate(s) that are used to validate leaf TLS + * certificates. + */ + public function getTrustRoot(): ?string + { + return $this->trustRoot; + } + + /** + * The root CA certificate(s) that are used to validate leaf TLS + * certificates. + */ + public function setTrustRoot(?string $trustRoot): self + { + $this->initialized['trustRoot'] = true; + $this->trustRoot = $trustRoot; + + return $this; + } + + /** + * The base64-url-safe-encoded raw subject bytes of the issuer. + */ + public function getCertIssuerSubject(): ?string + { + return $this->certIssuerSubject; + } + + /** + * The base64-url-safe-encoded raw subject bytes of the issuer. + */ + public function setCertIssuerSubject(?string $certIssuerSubject): self + { + $this->initialized['certIssuerSubject'] = true; + $this->certIssuerSubject = $certIssuerSubject; + + return $this; + } + + /** + * The base64-url-safe-encoded raw public key bytes of the issuer. + */ + public function getCertIssuerPublicKey(): ?string + { + return $this->certIssuerPublicKey; + } + + /** + * The base64-url-safe-encoded raw public key bytes of the issuer. + */ + public function setCertIssuerPublicKey(?string $certIssuerPublicKey): self + { + $this->initialized['certIssuerPublicKey'] = true; + $this->certIssuerPublicKey = $certIssuerPublicKey; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Task.php b/app/vendor/beluga-php/docker-php-api/src/Model/Task.php new file mode 100644 index 000000000..812f1275f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Task.php @@ -0,0 +1,401 @@ +initialized); + } + /** + * The ID of the task. + * + * @var string|null + */ + protected $iD; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $version; + /** + * @var string|null + */ + protected $createdAt; + /** + * @var string|null + */ + protected $updatedAt; + /** + * Name of the task. + * + * @var string|null + */ + protected $name; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * User modifiable task configuration. + * + * @var TaskSpec|null + */ + protected $spec; + /** + * The ID of the service this task is part of. + * + * @var string|null + */ + protected $serviceID; + /** + * @var int|null + */ + protected $slot; + /** + * The ID of the node that this task is on. + * + * @var string|null + */ + protected $nodeID; + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @var list|null + */ + protected $assignedGenericResources; + /** + * represents the status of a task. + * + * @var TaskStatus|null + */ + protected $status; + /** + * @var string|null + */ + protected $desiredState; + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + * + * @var ObjectVersion|null + */ + protected $jobIteration; + + /** + * The ID of the task. + */ + public function getID(): ?string + { + return $this->iD; + } + + /** + * The ID of the task. + */ + public function setID(?string $iD): self + { + $this->initialized['iD'] = true; + $this->iD = $iD; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getVersion(): ?ObjectVersion + { + return $this->version; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setVersion(?ObjectVersion $version): self + { + $this->initialized['version'] = true; + $this->version = $version; + + return $this; + } + + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?string + { + return $this->updatedAt; + } + + public function setUpdatedAt(?string $updatedAt): self + { + $this->initialized['updatedAt'] = true; + $this->updatedAt = $updatedAt; + + return $this; + } + + /** + * Name of the task. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the task. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * User modifiable task configuration. + */ + public function getSpec(): ?TaskSpec + { + return $this->spec; + } + + /** + * User modifiable task configuration. + */ + public function setSpec(?TaskSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } + + /** + * The ID of the service this task is part of. + */ + public function getServiceID(): ?string + { + return $this->serviceID; + } + + /** + * The ID of the service this task is part of. + */ + public function setServiceID(?string $serviceID): self + { + $this->initialized['serviceID'] = true; + $this->serviceID = $serviceID; + + return $this; + } + + public function getSlot(): ?int + { + return $this->slot; + } + + public function setSlot(?int $slot): self + { + $this->initialized['slot'] = true; + $this->slot = $slot; + + return $this; + } + + /** + * The ID of the node that this task is on. + */ + public function getNodeID(): ?string + { + return $this->nodeID; + } + + /** + * The ID of the node that this task is on. + */ + public function setNodeID(?string $nodeID): self + { + $this->initialized['nodeID'] = true; + $this->nodeID = $nodeID; + + return $this; + } + + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @return list|null + */ + public function getAssignedGenericResources(): ?array + { + return $this->assignedGenericResources; + } + + /** + * User-defined resources can be either Integer resources (e.g, `SSD=3`) or + * String resources (e.g, `GPU=UUID1`). + * + * @param list|null $assignedGenericResources + */ + public function setAssignedGenericResources(?array $assignedGenericResources): self + { + $this->initialized['assignedGenericResources'] = true; + $this->assignedGenericResources = $assignedGenericResources; + + return $this; + } + + /** + * represents the status of a task. + */ + public function getStatus(): ?TaskStatus + { + return $this->status; + } + + /** + * represents the status of a task. + */ + public function setStatus(?TaskStatus $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + public function getDesiredState(): ?string + { + return $this->desiredState; + } + + public function setDesiredState(?string $desiredState): self + { + $this->initialized['desiredState'] = true; + $this->desiredState = $desiredState; + + return $this; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function getJobIteration(): ?ObjectVersion + { + return $this->jobIteration; + } + + /** + * The version number of the object such as node, service, etc. This is needed + * to avoid conflicting writes. The client must send the version number along + * with the modified specification when updating these objects. + * + * This approach ensures safe concurrency and determinism in that the change + * on the object may not be applied if the version number has changed from the + * last read. In other words, if two update requests specify the same base + * version, only one of the requests can succeed. As a result, two separate + * update requests that happen at the same time will not unintentionally + * overwrite each other. + */ + public function setJobIteration(?ObjectVersion $jobIteration): self + { + $this->initialized['jobIteration'] = true; + $this->jobIteration = $jobIteration; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpec.php new file mode 100644 index 000000000..e030d1cf2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpec.php @@ -0,0 +1,345 @@ +initialized); + } + /** + * Plugin spec for the service. *(Experimental release only.)*. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + * + * @var TaskSpecPluginSpec|null + */ + protected $pluginSpec; + /** + * Container spec for the service. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + * + * @var TaskSpecContainerSpec|null + */ + protected $containerSpec; + /** + * Read-only spec type for non-swarm containers attached to swarm overlay + * networks. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + * + * @var TaskSpecNetworkAttachmentSpec|null + */ + protected $networkAttachmentSpec; + /** + * Resource requirements which apply to each individual container created + * as part of the service. + * + * @var TaskSpecResources|null + */ + protected $resources; + /** + * Specification for the restart policy which applies to containers + * created as part of this service. + * + * @var TaskSpecRestartPolicy|null + */ + protected $restartPolicy; + /** + * @var TaskSpecPlacement|null + */ + protected $placement; + /** + * A counter that triggers an update even if no relevant parameters have + * been changed. + * + * @var int|null + */ + protected $forceUpdate; + /** + * Runtime is the type of runtime specified for the task executor. + * + * @var string|null + */ + protected $runtime; + /** + * Specifies which networks the service should attach to. + * + * @var list|null + */ + protected $networks; + /** + * Specifies the log driver to use for tasks created from this spec. If + * not present, the default one for the swarm will be used, finally + * falling back to the engine default if not specified. + * + * @var TaskSpecLogDriver|null + */ + protected $logDriver; + + /** + * Plugin spec for the service. *(Experimental release only.)*. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + */ + public function getPluginSpec(): ?TaskSpecPluginSpec + { + return $this->pluginSpec; + } + + /** + * Plugin spec for the service. *(Experimental release only.)*. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + */ + public function setPluginSpec(?TaskSpecPluginSpec $pluginSpec): self + { + $this->initialized['pluginSpec'] = true; + $this->pluginSpec = $pluginSpec; + + return $this; + } + + /** + * Container spec for the service. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + */ + public function getContainerSpec(): ?TaskSpecContainerSpec + { + return $this->containerSpec; + } + + /** + * Container spec for the service. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + */ + public function setContainerSpec(?TaskSpecContainerSpec $containerSpec): self + { + $this->initialized['containerSpec'] = true; + $this->containerSpec = $containerSpec; + + return $this; + } + + /** + * Read-only spec type for non-swarm containers attached to swarm overlay + * networks. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + */ + public function getNetworkAttachmentSpec(): ?TaskSpecNetworkAttachmentSpec + { + return $this->networkAttachmentSpec; + } + + /** + * Read-only spec type for non-swarm containers attached to swarm overlay + * networks. + * + *


+ * + * > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + * > mutually exclusive. PluginSpec is only used when the Runtime field + * > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + * > field is set to `attachment`. + */ + public function setNetworkAttachmentSpec(?TaskSpecNetworkAttachmentSpec $networkAttachmentSpec): self + { + $this->initialized['networkAttachmentSpec'] = true; + $this->networkAttachmentSpec = $networkAttachmentSpec; + + return $this; + } + + /** + * Resource requirements which apply to each individual container created + * as part of the service. + */ + public function getResources(): ?TaskSpecResources + { + return $this->resources; + } + + /** + * Resource requirements which apply to each individual container created + * as part of the service. + */ + public function setResources(?TaskSpecResources $resources): self + { + $this->initialized['resources'] = true; + $this->resources = $resources; + + return $this; + } + + /** + * Specification for the restart policy which applies to containers + * created as part of this service. + */ + public function getRestartPolicy(): ?TaskSpecRestartPolicy + { + return $this->restartPolicy; + } + + /** + * Specification for the restart policy which applies to containers + * created as part of this service. + */ + public function setRestartPolicy(?TaskSpecRestartPolicy $restartPolicy): self + { + $this->initialized['restartPolicy'] = true; + $this->restartPolicy = $restartPolicy; + + return $this; + } + + public function getPlacement(): ?TaskSpecPlacement + { + return $this->placement; + } + + public function setPlacement(?TaskSpecPlacement $placement): self + { + $this->initialized['placement'] = true; + $this->placement = $placement; + + return $this; + } + + /** + * A counter that triggers an update even if no relevant parameters have + * been changed. + */ + public function getForceUpdate(): ?int + { + return $this->forceUpdate; + } + + /** + * A counter that triggers an update even if no relevant parameters have + * been changed. + */ + public function setForceUpdate(?int $forceUpdate): self + { + $this->initialized['forceUpdate'] = true; + $this->forceUpdate = $forceUpdate; + + return $this; + } + + /** + * Runtime is the type of runtime specified for the task executor. + */ + public function getRuntime(): ?string + { + return $this->runtime; + } + + /** + * Runtime is the type of runtime specified for the task executor. + */ + public function setRuntime(?string $runtime): self + { + $this->initialized['runtime'] = true; + $this->runtime = $runtime; + + return $this; + } + + /** + * Specifies which networks the service should attach to. + * + * @return list|null + */ + public function getNetworks(): ?array + { + return $this->networks; + } + + /** + * Specifies which networks the service should attach to. + * + * @param list|null $networks + */ + public function setNetworks(?array $networks): self + { + $this->initialized['networks'] = true; + $this->networks = $networks; + + return $this; + } + + /** + * Specifies the log driver to use for tasks created from this spec. If + * not present, the default one for the swarm will be used, finally + * falling back to the engine default if not specified. + */ + public function getLogDriver(): ?TaskSpecLogDriver + { + return $this->logDriver; + } + + /** + * Specifies the log driver to use for tasks created from this spec. If + * not present, the default one for the swarm will be used, finally + * falling back to the engine default if not specified. + */ + public function setLogDriver(?TaskSpecLogDriver $logDriver): self + { + $this->initialized['logDriver'] = true; + $this->logDriver = $logDriver; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpec.php new file mode 100644 index 000000000..bcb9cac88 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpec.php @@ -0,0 +1,811 @@ +initialized); + } + /** + * The image name to use for the container. + * + * @var string|null + */ + protected $image; + /** + * User-defined key/value data. + * + * @var array|null + */ + protected $labels; + /** + * The command to be run in the image. + * + * @var list|null + */ + protected $command; + /** + * Arguments to the command. + * + * @var list|null + */ + protected $args; + /** + * The hostname to use for the container, as a valid + * [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + * + * @var string|null + */ + protected $hostname; + /** + * A list of environment variables in the form `VAR=value`. + * + * @var list|null + */ + protected $env; + /** + * The working directory for commands to run in. + * + * @var string|null + */ + protected $dir; + /** + * The user inside the container. + * + * @var string|null + */ + protected $user; + /** + * A list of additional groups that the container process will run as. + * + * @var list|null + */ + protected $groups; + /** + * Security options for the container. + * + * @var TaskSpecContainerSpecPrivileges|null + */ + protected $privileges; + /** + * Whether a pseudo-TTY should be allocated. + * + * @var bool|null + */ + protected $tTY; + /** + * Open `stdin`. + * + * @var bool|null + */ + protected $openStdin; + /** + * Mount the container's root filesystem as read only. + * + * @var bool|null + */ + protected $readOnly; + /** + * Specification for mounts to be added to containers created as part + * of the service. + * + * @var list|null + */ + protected $mounts; + /** + * Signal to stop the container. + * + * @var string|null + */ + protected $stopSignal; + /** + * Amount of time to wait for the container to terminate before + * forcefully killing it. + * + * @var int|null + */ + protected $stopGracePeriod; + /** + * A test to perform to check that the container is healthy. + * + * @var HealthConfig|null + */ + protected $healthCheck; + /** + * A list of hostname/IP mappings to add to the container's `hosts` + * file. The format of extra hosts is specified in the + * [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + * man page: + * + * IP_address canonical_hostname [aliases...] + * + * @var list|null + */ + protected $hosts; + /** + * Specification for DNS related configurations in resolver configuration + * file (`resolv.conf`). + * + * @var TaskSpecContainerSpecDNSConfig|null + */ + protected $dNSConfig; + /** + * Secrets contains references to zero or more secrets that will be + * exposed to the service. + * + * @var list|null + */ + protected $secrets; + /** + * Configs contains references to zero or more configs that will be + * exposed to the service. + * + * @var list|null + */ + protected $configs; + /** + * Isolation technology of the containers running the service. + * (Windows only). + * + * @var string|null + */ + protected $isolation; + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + * + * @var bool|null + */ + protected $init; + /** + * Set kernel namedspaced parameters (sysctls) in the container. + * The Sysctls option on services accepts the same sysctls as the + * are supported on containers. Note that while the same sysctls are + * supported, no guarantees or checks are made about their + * suitability for a clustered environment, and it's up to the user + * to determine whether a given sysctl will work properly in a + * Service. + * + * @var array|null + */ + protected $sysctls; + /** + * A list of kernel capabilities to add to the default set + * for the container. + * + * @var list|null + */ + protected $capabilityAdd; + /** + * A list of kernel capabilities to drop from the default set + * for the container. + * + * @var list|null + */ + protected $capabilityDrop; + /** + * A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`". + * + * @var list|null + */ + protected $ulimits; + + /** + * The image name to use for the container. + */ + public function getImage(): ?string + { + return $this->image; + } + + /** + * The image name to use for the container. + */ + public function setImage(?string $image): self + { + $this->initialized['image'] = true; + $this->image = $image; + + return $this; + } + + /** + * User-defined key/value data. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value data. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * The command to be run in the image. + * + * @return list|null + */ + public function getCommand(): ?array + { + return $this->command; + } + + /** + * The command to be run in the image. + * + * @param list|null $command + */ + public function setCommand(?array $command): self + { + $this->initialized['command'] = true; + $this->command = $command; + + return $this; + } + + /** + * Arguments to the command. + * + * @return list|null + */ + public function getArgs(): ?array + { + return $this->args; + } + + /** + * Arguments to the command. + * + * @param list|null $args + */ + public function setArgs(?array $args): self + { + $this->initialized['args'] = true; + $this->args = $args; + + return $this; + } + + /** + * The hostname to use for the container, as a valid + * [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + */ + public function getHostname(): ?string + { + return $this->hostname; + } + + /** + * The hostname to use for the container, as a valid + * [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + */ + public function setHostname(?string $hostname): self + { + $this->initialized['hostname'] = true; + $this->hostname = $hostname; + + return $this; + } + + /** + * A list of environment variables in the form `VAR=value`. + * + * @return list|null + */ + public function getEnv(): ?array + { + return $this->env; + } + + /** + * A list of environment variables in the form `VAR=value`. + * + * @param list|null $env + */ + public function setEnv(?array $env): self + { + $this->initialized['env'] = true; + $this->env = $env; + + return $this; + } + + /** + * The working directory for commands to run in. + */ + public function getDir(): ?string + { + return $this->dir; + } + + /** + * The working directory for commands to run in. + */ + public function setDir(?string $dir): self + { + $this->initialized['dir'] = true; + $this->dir = $dir; + + return $this; + } + + /** + * The user inside the container. + */ + public function getUser(): ?string + { + return $this->user; + } + + /** + * The user inside the container. + */ + public function setUser(?string $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + /** + * A list of additional groups that the container process will run as. + * + * @return list|null + */ + public function getGroups(): ?array + { + return $this->groups; + } + + /** + * A list of additional groups that the container process will run as. + * + * @param list|null $groups + */ + public function setGroups(?array $groups): self + { + $this->initialized['groups'] = true; + $this->groups = $groups; + + return $this; + } + + /** + * Security options for the container. + */ + public function getPrivileges(): ?TaskSpecContainerSpecPrivileges + { + return $this->privileges; + } + + /** + * Security options for the container. + */ + public function setPrivileges(?TaskSpecContainerSpecPrivileges $privileges): self + { + $this->initialized['privileges'] = true; + $this->privileges = $privileges; + + return $this; + } + + /** + * Whether a pseudo-TTY should be allocated. + */ + public function getTTY(): ?bool + { + return $this->tTY; + } + + /** + * Whether a pseudo-TTY should be allocated. + */ + public function setTTY(?bool $tTY): self + { + $this->initialized['tTY'] = true; + $this->tTY = $tTY; + + return $this; + } + + /** + * Open `stdin`. + */ + public function getOpenStdin(): ?bool + { + return $this->openStdin; + } + + /** + * Open `stdin`. + */ + public function setOpenStdin(?bool $openStdin): self + { + $this->initialized['openStdin'] = true; + $this->openStdin = $openStdin; + + return $this; + } + + /** + * Mount the container's root filesystem as read only. + */ + public function getReadOnly(): ?bool + { + return $this->readOnly; + } + + /** + * Mount the container's root filesystem as read only. + */ + public function setReadOnly(?bool $readOnly): self + { + $this->initialized['readOnly'] = true; + $this->readOnly = $readOnly; + + return $this; + } + + /** + * Specification for mounts to be added to containers created as part + * of the service. + * + * @return list|null + */ + public function getMounts(): ?array + { + return $this->mounts; + } + + /** + * Specification for mounts to be added to containers created as part + * of the service. + * + * @param list|null $mounts + */ + public function setMounts(?array $mounts): self + { + $this->initialized['mounts'] = true; + $this->mounts = $mounts; + + return $this; + } + + /** + * Signal to stop the container. + */ + public function getStopSignal(): ?string + { + return $this->stopSignal; + } + + /** + * Signal to stop the container. + */ + public function setStopSignal(?string $stopSignal): self + { + $this->initialized['stopSignal'] = true; + $this->stopSignal = $stopSignal; + + return $this; + } + + /** + * Amount of time to wait for the container to terminate before + * forcefully killing it. + */ + public function getStopGracePeriod(): ?int + { + return $this->stopGracePeriod; + } + + /** + * Amount of time to wait for the container to terminate before + * forcefully killing it. + */ + public function setStopGracePeriod(?int $stopGracePeriod): self + { + $this->initialized['stopGracePeriod'] = true; + $this->stopGracePeriod = $stopGracePeriod; + + return $this; + } + + /** + * A test to perform to check that the container is healthy. + */ + public function getHealthCheck(): ?HealthConfig + { + return $this->healthCheck; + } + + /** + * A test to perform to check that the container is healthy. + */ + public function setHealthCheck(?HealthConfig $healthCheck): self + { + $this->initialized['healthCheck'] = true; + $this->healthCheck = $healthCheck; + + return $this; + } + + /** + * A list of hostname/IP mappings to add to the container's `hosts` + * file. The format of extra hosts is specified in the + * [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + * man page: + * + * IP_address canonical_hostname [aliases...] + * + * @return list|null + */ + public function getHosts(): ?array + { + return $this->hosts; + } + + /** + * A list of hostname/IP mappings to add to the container's `hosts` + * file. The format of extra hosts is specified in the + * [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + * man page: + * + * IP_address canonical_hostname [aliases...] + * + * @param list|null $hosts + */ + public function setHosts(?array $hosts): self + { + $this->initialized['hosts'] = true; + $this->hosts = $hosts; + + return $this; + } + + /** + * Specification for DNS related configurations in resolver configuration + * file (`resolv.conf`). + */ + public function getDNSConfig(): ?TaskSpecContainerSpecDNSConfig + { + return $this->dNSConfig; + } + + /** + * Specification for DNS related configurations in resolver configuration + * file (`resolv.conf`). + */ + public function setDNSConfig(?TaskSpecContainerSpecDNSConfig $dNSConfig): self + { + $this->initialized['dNSConfig'] = true; + $this->dNSConfig = $dNSConfig; + + return $this; + } + + /** + * Secrets contains references to zero or more secrets that will be + * exposed to the service. + * + * @return list|null + */ + public function getSecrets(): ?array + { + return $this->secrets; + } + + /** + * Secrets contains references to zero or more secrets that will be + * exposed to the service. + * + * @param list|null $secrets + */ + public function setSecrets(?array $secrets): self + { + $this->initialized['secrets'] = true; + $this->secrets = $secrets; + + return $this; + } + + /** + * Configs contains references to zero or more configs that will be + * exposed to the service. + * + * @return list|null + */ + public function getConfigs(): ?array + { + return $this->configs; + } + + /** + * Configs contains references to zero or more configs that will be + * exposed to the service. + * + * @param list|null $configs + */ + public function setConfigs(?array $configs): self + { + $this->initialized['configs'] = true; + $this->configs = $configs; + + return $this; + } + + /** + * Isolation technology of the containers running the service. + * (Windows only). + */ + public function getIsolation(): ?string + { + return $this->isolation; + } + + /** + * Isolation technology of the containers running the service. + * (Windows only). + */ + public function setIsolation(?string $isolation): self + { + $this->initialized['isolation'] = true; + $this->isolation = $isolation; + + return $this; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function getInit(): ?bool + { + return $this->init; + } + + /** + * Run an init inside the container that forwards signals and reaps + * processes. This field is omitted if empty, and the default (as + * configured on the daemon) is used. + */ + public function setInit(?bool $init): self + { + $this->initialized['init'] = true; + $this->init = $init; + + return $this; + } + + /** + * Set kernel namedspaced parameters (sysctls) in the container. + * The Sysctls option on services accepts the same sysctls as the + * are supported on containers. Note that while the same sysctls are + * supported, no guarantees or checks are made about their + * suitability for a clustered environment, and it's up to the user + * to determine whether a given sysctl will work properly in a + * Service. + * + * @return array|null + */ + public function getSysctls(): ?iterable + { + return $this->sysctls; + } + + /** + * Set kernel namedspaced parameters (sysctls) in the container. + * The Sysctls option on services accepts the same sysctls as the + * are supported on containers. Note that while the same sysctls are + * supported, no guarantees or checks are made about their + * suitability for a clustered environment, and it's up to the user + * to determine whether a given sysctl will work properly in a + * Service. + * + * @param array|null $sysctls + */ + public function setSysctls(?iterable $sysctls): self + { + $this->initialized['sysctls'] = true; + $this->sysctls = $sysctls; + + return $this; + } + + /** + * A list of kernel capabilities to add to the default set + * for the container. + * + * @return list|null + */ + public function getCapabilityAdd(): ?array + { + return $this->capabilityAdd; + } + + /** + * A list of kernel capabilities to add to the default set + * for the container. + * + * @param list|null $capabilityAdd + */ + public function setCapabilityAdd(?array $capabilityAdd): self + { + $this->initialized['capabilityAdd'] = true; + $this->capabilityAdd = $capabilityAdd; + + return $this; + } + + /** + * A list of kernel capabilities to drop from the default set + * for the container. + * + * @return list|null + */ + public function getCapabilityDrop(): ?array + { + return $this->capabilityDrop; + } + + /** + * A list of kernel capabilities to drop from the default set + * for the container. + * + * @param list|null $capabilityDrop + */ + public function setCapabilityDrop(?array $capabilityDrop): self + { + $this->initialized['capabilityDrop'] = true; + $this->capabilityDrop = $capabilityDrop; + + return $this; + } + + /** + * A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`". + * + * @return list|null + */ + public function getUlimits(): ?array + { + return $this->ulimits; + } + + /** + * A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`". + * + * @param list|null $ulimits + */ + public function setUlimits(?array $ulimits): self + { + $this->initialized['ulimits'] = true; + $this->ulimits = $ulimits; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItem.php new file mode 100644 index 000000000..96d87e385 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItem.php @@ -0,0 +1,157 @@ +initialized); + } + /** + * File represents a specific target that is backed by a file. + * + *


+ * + * > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + * + * @var TaskSpecContainerSpecConfigsItemFile|null + */ + protected $file; + /** + * Runtime represents a target that is not mounted into the + * container but is used by the task. + * + *


+ * + * > **Note**: `Configs.File` and `Configs.Runtime` are mutually + * > exclusive + * + * @var TaskSpecContainerSpecConfigsItemRuntime|null + */ + protected $runtime; + /** + * ConfigID represents the ID of the specific config that we're + * referencing. + * + * @var string|null + */ + protected $configID; + /** + * ConfigName is the name of the config that this references, + * but this is just provided for lookup/display purposes. The + * config in the reference will be identified by its ID. + * + * @var string|null + */ + protected $configName; + + /** + * File represents a specific target that is backed by a file. + * + *


+ * + * > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + */ + public function getFile(): ?TaskSpecContainerSpecConfigsItemFile + { + return $this->file; + } + + /** + * File represents a specific target that is backed by a file. + * + *


+ * + * > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + */ + public function setFile(?TaskSpecContainerSpecConfigsItemFile $file): self + { + $this->initialized['file'] = true; + $this->file = $file; + + return $this; + } + + /** + * Runtime represents a target that is not mounted into the + * container but is used by the task. + * + *


+ * + * > **Note**: `Configs.File` and `Configs.Runtime` are mutually + * > exclusive + */ + public function getRuntime(): ?TaskSpecContainerSpecConfigsItemRuntime + { + return $this->runtime; + } + + /** + * Runtime represents a target that is not mounted into the + * container but is used by the task. + * + *


+ * + * > **Note**: `Configs.File` and `Configs.Runtime` are mutually + * > exclusive + */ + public function setRuntime(?TaskSpecContainerSpecConfigsItemRuntime $runtime): self + { + $this->initialized['runtime'] = true; + $this->runtime = $runtime; + + return $this; + } + + /** + * ConfigID represents the ID of the specific config that we're + * referencing. + */ + public function getConfigID(): ?string + { + return $this->configID; + } + + /** + * ConfigID represents the ID of the specific config that we're + * referencing. + */ + public function setConfigID(?string $configID): self + { + $this->initialized['configID'] = true; + $this->configID = $configID; + + return $this; + } + + /** + * ConfigName is the name of the config that this references, + * but this is just provided for lookup/display purposes. The + * config in the reference will be identified by its ID. + */ + public function getConfigName(): ?string + { + return $this->configName; + } + + /** + * ConfigName is the name of the config that this references, + * but this is just provided for lookup/display purposes. The + * config in the reference will be identified by its ID. + */ + public function setConfigName(?string $configName): self + { + $this->initialized['configName'] = true; + $this->configName = $configName; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItemFile.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItemFile.php new file mode 100644 index 000000000..d77ee9fc2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItemFile.php @@ -0,0 +1,118 @@ +initialized); + } + /** + * Name represents the final filename in the filesystem. + * + * @var string|null + */ + protected $name; + /** + * UID represents the file UID. + * + * @var string|null + */ + protected $uID; + /** + * GID represents the file GID. + * + * @var string|null + */ + protected $gID; + /** + * Mode represents the FileMode of the file. + * + * @var int|null + */ + protected $mode; + + /** + * Name represents the final filename in the filesystem. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name represents the final filename in the filesystem. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * UID represents the file UID. + */ + public function getUID(): ?string + { + return $this->uID; + } + + /** + * UID represents the file UID. + */ + public function setUID(?string $uID): self + { + $this->initialized['uID'] = true; + $this->uID = $uID; + + return $this; + } + + /** + * GID represents the file GID. + */ + public function getGID(): ?string + { + return $this->gID; + } + + /** + * GID represents the file GID. + */ + public function setGID(?string $gID): self + { + $this->initialized['gID'] = true; + $this->gID = $gID; + + return $this; + } + + /** + * Mode represents the FileMode of the file. + */ + public function getMode(): ?int + { + return $this->mode; + } + + /** + * Mode represents the FileMode of the file. + */ + public function setMode(?int $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItemRuntime.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItemRuntime.php new file mode 100644 index 000000000..15c69e665 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecConfigsItemRuntime.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecDNSConfig.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecDNSConfig.php new file mode 100644 index 000000000..be0f8e9e5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecDNSConfig.php @@ -0,0 +1,108 @@ +initialized); + } + /** + * The IP addresses of the name servers. + * + * @var list|null + */ + protected $nameservers; + /** + * A search list for host-name lookup. + * + * @var list|null + */ + protected $search; + /** + * A list of internal resolver variables to be modified (e.g., + * `debug`, `ndots:3`, etc.). + * + * @var list|null + */ + protected $options; + + /** + * The IP addresses of the name servers. + * + * @return list|null + */ + public function getNameservers(): ?array + { + return $this->nameservers; + } + + /** + * The IP addresses of the name servers. + * + * @param list|null $nameservers + */ + public function setNameservers(?array $nameservers): self + { + $this->initialized['nameservers'] = true; + $this->nameservers = $nameservers; + + return $this; + } + + /** + * A search list for host-name lookup. + * + * @return list|null + */ + public function getSearch(): ?array + { + return $this->search; + } + + /** + * A search list for host-name lookup. + * + * @param list|null $search + */ + public function setSearch(?array $search): self + { + $this->initialized['search'] = true; + $this->search = $search; + + return $this; + } + + /** + * A list of internal resolver variables to be modified (e.g., + * `debug`, `ndots:3`, etc.). + * + * @return list|null + */ + public function getOptions(): ?array + { + return $this->options; + } + + /** + * A list of internal resolver variables to be modified (e.g., + * `debug`, `ndots:3`, etc.). + * + * @param list|null $options + */ + public function setOptions(?array $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivileges.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivileges.php new file mode 100644 index 000000000..436431783 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivileges.php @@ -0,0 +1,143 @@ +initialized); + } + /** + * CredentialSpec for managed service account (Windows only). + * + * @var TaskSpecContainerSpecPrivilegesCredentialSpec|null + */ + protected $credentialSpec; + /** + * SELinux labels of the container. + * + * @var TaskSpecContainerSpecPrivilegesSELinuxContext|null + */ + protected $sELinuxContext; + /** + * Options for configuring seccomp on the container. + * + * @var TaskSpecContainerSpecPrivilegesSeccomp|null + */ + protected $seccomp; + /** + * Options for configuring AppArmor on the container. + * + * @var TaskSpecContainerSpecPrivilegesAppArmor|null + */ + protected $appArmor; + /** + * Configuration of the no_new_privs bit in the container. + * + * @var bool|null + */ + protected $noNewPrivileges; + + /** + * CredentialSpec for managed service account (Windows only). + */ + public function getCredentialSpec(): ?TaskSpecContainerSpecPrivilegesCredentialSpec + { + return $this->credentialSpec; + } + + /** + * CredentialSpec for managed service account (Windows only). + */ + public function setCredentialSpec(?TaskSpecContainerSpecPrivilegesCredentialSpec $credentialSpec): self + { + $this->initialized['credentialSpec'] = true; + $this->credentialSpec = $credentialSpec; + + return $this; + } + + /** + * SELinux labels of the container. + */ + public function getSELinuxContext(): ?TaskSpecContainerSpecPrivilegesSELinuxContext + { + return $this->sELinuxContext; + } + + /** + * SELinux labels of the container. + */ + public function setSELinuxContext(?TaskSpecContainerSpecPrivilegesSELinuxContext $sELinuxContext): self + { + $this->initialized['sELinuxContext'] = true; + $this->sELinuxContext = $sELinuxContext; + + return $this; + } + + /** + * Options for configuring seccomp on the container. + */ + public function getSeccomp(): ?TaskSpecContainerSpecPrivilegesSeccomp + { + return $this->seccomp; + } + + /** + * Options for configuring seccomp on the container. + */ + public function setSeccomp(?TaskSpecContainerSpecPrivilegesSeccomp $seccomp): self + { + $this->initialized['seccomp'] = true; + $this->seccomp = $seccomp; + + return $this; + } + + /** + * Options for configuring AppArmor on the container. + */ + public function getAppArmor(): ?TaskSpecContainerSpecPrivilegesAppArmor + { + return $this->appArmor; + } + + /** + * Options for configuring AppArmor on the container. + */ + public function setAppArmor(?TaskSpecContainerSpecPrivilegesAppArmor $appArmor): self + { + $this->initialized['appArmor'] = true; + $this->appArmor = $appArmor; + + return $this; + } + + /** + * Configuration of the no_new_privs bit in the container. + */ + public function getNoNewPrivileges(): ?bool + { + return $this->noNewPrivileges; + } + + /** + * Configuration of the no_new_privs bit in the container. + */ + public function setNoNewPrivileges(?bool $noNewPrivileges): self + { + $this->initialized['noNewPrivileges'] = true; + $this->noNewPrivileges = $noNewPrivileges; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesAppArmor.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesAppArmor.php new file mode 100644 index 000000000..8314775be --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesAppArmor.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var string|null + */ + protected $mode; + + public function getMode(): ?string + { + return $this->mode; + } + + public function setMode(?string $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesCredentialSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesCredentialSpec.php new file mode 100644 index 000000000..5238b40b9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesCredentialSpec.php @@ -0,0 +1,177 @@ +initialized); + } + /** + * Load credential spec from a Swarm Config with the given ID. + * The specified config must also be present in the Configs + * field with the Runtime property set. + * + *


+ * + * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + * + * @var string|null + */ + protected $config; + /** + * Load credential spec from this file. The file is read by + * the daemon, and must be present in the `CredentialSpecs` + * subdirectory in the docker data directory, which defaults + * to `C:\ProgramData\Docker\` on Windows. + * + * For example, specifying `spec.json` loads + * `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + * + *


+ * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + * + * @var string|null + */ + protected $file; + /** + * Load credential spec from this value in the Windows + * registry. The specified registry value must be located in: + * + * `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + * + *


+ * + * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + * + * @var string|null + */ + protected $registry; + + /** + * Load credential spec from a Swarm Config with the given ID. + * The specified config must also be present in the Configs + * field with the Runtime property set. + * + *


+ * + * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + */ + public function getConfig(): ?string + { + return $this->config; + } + + /** + * Load credential spec from a Swarm Config with the given ID. + * The specified config must also be present in the Configs + * field with the Runtime property set. + * + *


+ * + * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + */ + public function setConfig(?string $config): self + { + $this->initialized['config'] = true; + $this->config = $config; + + return $this; + } + + /** + * Load credential spec from this file. The file is read by + * the daemon, and must be present in the `CredentialSpecs` + * subdirectory in the docker data directory, which defaults + * to `C:\ProgramData\Docker\` on Windows. + * + * For example, specifying `spec.json` loads + * `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + * + *


+ * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + */ + public function getFile(): ?string + { + return $this->file; + } + + /** + * Load credential spec from this file. The file is read by + * the daemon, and must be present in the `CredentialSpecs` + * subdirectory in the docker data directory, which defaults + * to `C:\ProgramData\Docker\` on Windows. + * + * For example, specifying `spec.json` loads + * `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + * + *


+ * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + */ + public function setFile(?string $file): self + { + $this->initialized['file'] = true; + $this->file = $file; + + return $this; + } + + /** + * Load credential spec from this value in the Windows + * registry. The specified registry value must be located in: + * + * `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + * + *


+ * + * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + */ + public function getRegistry(): ?string + { + return $this->registry; + } + + /** + * Load credential spec from this value in the Windows + * registry. The specified registry value must be located in: + * + * `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + * + *


+ * + * + * > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + * > and `CredentialSpec.Config` are mutually exclusive. + */ + public function setRegistry(?string $registry): self + { + $this->initialized['registry'] = true; + $this->registry = $registry; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesSELinuxContext.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesSELinuxContext.php new file mode 100644 index 000000000..f5cf5a82d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesSELinuxContext.php @@ -0,0 +1,143 @@ +initialized); + } + /** + * Disable SELinux. + * + * @var bool|null + */ + protected $disable; + /** + * SELinux user label. + * + * @var string|null + */ + protected $user; + /** + * SELinux role label. + * + * @var string|null + */ + protected $role; + /** + * SELinux type label. + * + * @var string|null + */ + protected $type; + /** + * SELinux level label. + * + * @var string|null + */ + protected $level; + + /** + * Disable SELinux. + */ + public function getDisable(): ?bool + { + return $this->disable; + } + + /** + * Disable SELinux. + */ + public function setDisable(?bool $disable): self + { + $this->initialized['disable'] = true; + $this->disable = $disable; + + return $this; + } + + /** + * SELinux user label. + */ + public function getUser(): ?string + { + return $this->user; + } + + /** + * SELinux user label. + */ + public function setUser(?string $user): self + { + $this->initialized['user'] = true; + $this->user = $user; + + return $this; + } + + /** + * SELinux role label. + */ + public function getRole(): ?string + { + return $this->role; + } + + /** + * SELinux role label. + */ + public function setRole(?string $role): self + { + $this->initialized['role'] = true; + $this->role = $role; + + return $this; + } + + /** + * SELinux type label. + */ + public function getType(): ?string + { + return $this->type; + } + + /** + * SELinux type label. + */ + public function setType(?string $type): self + { + $this->initialized['type'] = true; + $this->type = $type; + + return $this; + } + + /** + * SELinux level label. + */ + public function getLevel(): ?string + { + return $this->level; + } + + /** + * SELinux level label. + */ + public function setLevel(?string $level): self + { + $this->initialized['level'] = true; + $this->level = $level; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesSeccomp.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesSeccomp.php new file mode 100644 index 000000000..011162847 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecPrivilegesSeccomp.php @@ -0,0 +1,60 @@ +initialized); + } + /** + * @var string|null + */ + protected $mode; + /** + * The custom seccomp profile as a json object. + * + * @var string|null + */ + protected $profile; + + public function getMode(): ?string + { + return $this->mode; + } + + public function setMode(?string $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } + + /** + * The custom seccomp profile as a json object. + */ + public function getProfile(): ?string + { + return $this->profile; + } + + /** + * The custom seccomp profile as a json object. + */ + public function setProfile(?string $profile): self + { + $this->initialized['profile'] = true; + $this->profile = $profile; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecSecretsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecSecretsItem.php new file mode 100644 index 000000000..ea540fa36 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecSecretsItem.php @@ -0,0 +1,102 @@ +initialized); + } + /** + * File represents a specific target that is backed by a file. + * + * @var TaskSpecContainerSpecSecretsItemFile|null + */ + protected $file; + /** + * SecretID represents the ID of the specific secret that we're + * referencing. + * + * @var string|null + */ + protected $secretID; + /** + * SecretName is the name of the secret that this references, + * but this is just provided for lookup/display purposes. The + * secret in the reference will be identified by its ID. + * + * @var string|null + */ + protected $secretName; + + /** + * File represents a specific target that is backed by a file. + */ + public function getFile(): ?TaskSpecContainerSpecSecretsItemFile + { + return $this->file; + } + + /** + * File represents a specific target that is backed by a file. + */ + public function setFile(?TaskSpecContainerSpecSecretsItemFile $file): self + { + $this->initialized['file'] = true; + $this->file = $file; + + return $this; + } + + /** + * SecretID represents the ID of the specific secret that we're + * referencing. + */ + public function getSecretID(): ?string + { + return $this->secretID; + } + + /** + * SecretID represents the ID of the specific secret that we're + * referencing. + */ + public function setSecretID(?string $secretID): self + { + $this->initialized['secretID'] = true; + $this->secretID = $secretID; + + return $this; + } + + /** + * SecretName is the name of the secret that this references, + * but this is just provided for lookup/display purposes. The + * secret in the reference will be identified by its ID. + */ + public function getSecretName(): ?string + { + return $this->secretName; + } + + /** + * SecretName is the name of the secret that this references, + * but this is just provided for lookup/display purposes. The + * secret in the reference will be identified by its ID. + */ + public function setSecretName(?string $secretName): self + { + $this->initialized['secretName'] = true; + $this->secretName = $secretName; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecSecretsItemFile.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecSecretsItemFile.php new file mode 100644 index 000000000..d9daf7ebc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecSecretsItemFile.php @@ -0,0 +1,118 @@ +initialized); + } + /** + * Name represents the final filename in the filesystem. + * + * @var string|null + */ + protected $name; + /** + * UID represents the file UID. + * + * @var string|null + */ + protected $uID; + /** + * GID represents the file GID. + * + * @var string|null + */ + protected $gID; + /** + * Mode represents the FileMode of the file. + * + * @var int|null + */ + protected $mode; + + /** + * Name represents the final filename in the filesystem. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name represents the final filename in the filesystem. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * UID represents the file UID. + */ + public function getUID(): ?string + { + return $this->uID; + } + + /** + * UID represents the file UID. + */ + public function setUID(?string $uID): self + { + $this->initialized['uID'] = true; + $this->uID = $uID; + + return $this; + } + + /** + * GID represents the file GID. + */ + public function getGID(): ?string + { + return $this->gID; + } + + /** + * GID represents the file GID. + */ + public function setGID(?string $gID): self + { + $this->initialized['gID'] = true; + $this->gID = $gID; + + return $this; + } + + /** + * Mode represents the FileMode of the file. + */ + public function getMode(): ?int + { + return $this->mode; + } + + /** + * Mode represents the FileMode of the file. + */ + public function setMode(?int $mode): self + { + $this->initialized['mode'] = true; + $this->mode = $mode; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecUlimitsItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecUlimitsItem.php new file mode 100644 index 000000000..f45831991 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecContainerSpecUlimitsItem.php @@ -0,0 +1,93 @@ +initialized); + } + /** + * Name of ulimit. + * + * @var string|null + */ + protected $name; + /** + * Soft limit. + * + * @var int|null + */ + protected $soft; + /** + * Hard limit. + * + * @var int|null + */ + protected $hard; + + /** + * Name of ulimit. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of ulimit. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Soft limit. + */ + public function getSoft(): ?int + { + return $this->soft; + } + + /** + * Soft limit. + */ + public function setSoft(?int $soft): self + { + $this->initialized['soft'] = true; + $this->soft = $soft; + + return $this; + } + + /** + * Hard limit. + */ + public function getHard(): ?int + { + return $this->hard; + } + + /** + * Hard limit. + */ + public function setHard(?int $hard): self + { + $this->initialized['hard'] = true; + $this->hard = $hard; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecLogDriver.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecLogDriver.php new file mode 100644 index 000000000..ad67be234 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecLogDriver.php @@ -0,0 +1,58 @@ +initialized); + } + /** + * @var string|null + */ + protected $name; + /** + * @var array|null + */ + protected $options; + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecNetworkAttachmentSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecNetworkAttachmentSpec.php new file mode 100644 index 000000000..b34b12400 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecNetworkAttachmentSpec.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * ID of the container represented by this task. + * + * @var string|null + */ + protected $containerID; + + /** + * ID of the container represented by this task. + */ + public function getContainerID(): ?string + { + return $this->containerID; + } + + /** + * ID of the container represented by this task. + */ + public function setContainerID(?string $containerID): self + { + $this->initialized['containerID'] = true; + $this->containerID = $containerID; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacement.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacement.php new file mode 100644 index 000000000..676ef539d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacement.php @@ -0,0 +1,202 @@ +initialized); + } + /** + * An array of constraint expressions to limit the set of nodes where + * a task can be scheduled. Constraint expressions can either use a + * _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + * nodes that satisfy every expression (AND match). Constraints can + * match node or Docker Engine labels as follows: + * + * node attribute | matches | example + * ---------------------|--------------------------------|----------------------------------------------- + * `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + * `node.hostname` | Node hostname | `node.hostname!=node-2` + * `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + * `node.platform.os` | Node operating system | `node.platform.os==windows` + * `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + * `node.labels` | User-defined node labels | `node.labels.security==high` + * `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04` + * + * `engine.labels` apply to Docker Engine labels like operating system, + * drivers, etc. Swarm administrators add `node.labels` for operational + * purposes by using the [`node update endpoint`](#operation/NodeUpdate). + * + * @var list|null + */ + protected $constraints; + /** + * Preferences provide a way to make the scheduler aware of factors + * such as topology. They are provided in order from highest to + * lowest precedence. + * + * @var list|null + */ + protected $preferences; + /** + * Maximum number of replicas for per node (default value is 0, which + * is unlimited). + * + * @var int|null + */ + protected $maxReplicas = 0; + /** + * Platforms stores all the platforms that the service's image can + * run on. This field is used in the platform filter for scheduling. + * If empty, then the platform filter is off, meaning there are no + * scheduling restrictions. + * + * @var list|null + */ + protected $platforms; + + /** + * An array of constraint expressions to limit the set of nodes where + * a task can be scheduled. Constraint expressions can either use a + * _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + * nodes that satisfy every expression (AND match). Constraints can + * match node or Docker Engine labels as follows: + * + * node attribute | matches | example + * ---------------------|--------------------------------|----------------------------------------------- + * `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + * `node.hostname` | Node hostname | `node.hostname!=node-2` + * `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + * `node.platform.os` | Node operating system | `node.platform.os==windows` + * `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + * `node.labels` | User-defined node labels | `node.labels.security==high` + * `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04` + * + * `engine.labels` apply to Docker Engine labels like operating system, + * drivers, etc. Swarm administrators add `node.labels` for operational + * purposes by using the [`node update endpoint`](#operation/NodeUpdate). + * + * @return list|null + */ + public function getConstraints(): ?array + { + return $this->constraints; + } + + /** + * An array of constraint expressions to limit the set of nodes where + * a task can be scheduled. Constraint expressions can either use a + * _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + * nodes that satisfy every expression (AND match). Constraints can + * match node or Docker Engine labels as follows: + * + * node attribute | matches | example + * ---------------------|--------------------------------|----------------------------------------------- + * `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + * `node.hostname` | Node hostname | `node.hostname!=node-2` + * `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + * `node.platform.os` | Node operating system | `node.platform.os==windows` + * `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + * `node.labels` | User-defined node labels | `node.labels.security==high` + * `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04` + * + * `engine.labels` apply to Docker Engine labels like operating system, + * drivers, etc. Swarm administrators add `node.labels` for operational + * purposes by using the [`node update endpoint`](#operation/NodeUpdate). + * + * @param list|null $constraints + */ + public function setConstraints(?array $constraints): self + { + $this->initialized['constraints'] = true; + $this->constraints = $constraints; + + return $this; + } + + /** + * Preferences provide a way to make the scheduler aware of factors + * such as topology. They are provided in order from highest to + * lowest precedence. + * + * @return list|null + */ + public function getPreferences(): ?array + { + return $this->preferences; + } + + /** + * Preferences provide a way to make the scheduler aware of factors + * such as topology. They are provided in order from highest to + * lowest precedence. + * + * @param list|null $preferences + */ + public function setPreferences(?array $preferences): self + { + $this->initialized['preferences'] = true; + $this->preferences = $preferences; + + return $this; + } + + /** + * Maximum number of replicas for per node (default value is 0, which + * is unlimited). + */ + public function getMaxReplicas(): ?int + { + return $this->maxReplicas; + } + + /** + * Maximum number of replicas for per node (default value is 0, which + * is unlimited). + */ + public function setMaxReplicas(?int $maxReplicas): self + { + $this->initialized['maxReplicas'] = true; + $this->maxReplicas = $maxReplicas; + + return $this; + } + + /** + * Platforms stores all the platforms that the service's image can + * run on. This field is used in the platform filter for scheduling. + * If empty, then the platform filter is off, meaning there are no + * scheduling restrictions. + * + * @return list|null + */ + public function getPlatforms(): ?array + { + return $this->platforms; + } + + /** + * Platforms stores all the platforms that the service's image can + * run on. This field is used in the platform filter for scheduling. + * If empty, then the platform filter is off, meaning there are no + * scheduling restrictions. + * + * @param list|null $platforms + */ + public function setPlatforms(?array $platforms): self + { + $this->initialized['platforms'] = true; + $this->platforms = $platforms; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacementPreferencesItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacementPreferencesItem.php new file mode 100644 index 000000000..558b254bb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacementPreferencesItem.php @@ -0,0 +1,35 @@ +initialized); + } + /** + * @var TaskSpecPlacementPreferencesItemSpread|null + */ + protected $spread; + + public function getSpread(): ?TaskSpecPlacementPreferencesItemSpread + { + return $this->spread; + } + + public function setSpread(?TaskSpecPlacementPreferencesItemSpread $spread): self + { + $this->initialized['spread'] = true; + $this->spread = $spread; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacementPreferencesItemSpread.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacementPreferencesItemSpread.php new file mode 100644 index 000000000..bca2bc3c5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPlacementPreferencesItemSpread.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * label descriptor, such as `engine.labels.az`. + * + * @var string|null + */ + protected $spreadDescriptor; + + /** + * label descriptor, such as `engine.labels.az`. + */ + public function getSpreadDescriptor(): ?string + { + return $this->spreadDescriptor; + } + + /** + * label descriptor, such as `engine.labels.az`. + */ + public function setSpreadDescriptor(?string $spreadDescriptor): self + { + $this->initialized['spreadDescriptor'] = true; + $this->spreadDescriptor = $spreadDescriptor; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPluginSpec.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPluginSpec.php new file mode 100644 index 000000000..de74015f1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecPluginSpec.php @@ -0,0 +1,116 @@ +initialized); + } + /** + * The name or 'alias' to use for the plugin. + * + * @var string|null + */ + protected $name; + /** + * The plugin image reference to use. + * + * @var string|null + */ + protected $remote; + /** + * Disable the plugin once scheduled. + * + * @var bool|null + */ + protected $disabled; + /** + * @var list|null + */ + protected $pluginPrivilege; + + /** + * The name or 'alias' to use for the plugin. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * The name or 'alias' to use for the plugin. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * The plugin image reference to use. + */ + public function getRemote(): ?string + { + return $this->remote; + } + + /** + * The plugin image reference to use. + */ + public function setRemote(?string $remote): self + { + $this->initialized['remote'] = true; + $this->remote = $remote; + + return $this; + } + + /** + * Disable the plugin once scheduled. + */ + public function getDisabled(): ?bool + { + return $this->disabled; + } + + /** + * Disable the plugin once scheduled. + */ + public function setDisabled(?bool $disabled): self + { + $this->initialized['disabled'] = true; + $this->disabled = $disabled; + + return $this; + } + + /** + * @return list|null + */ + public function getPluginPrivilege(): ?array + { + return $this->pluginPrivilege; + } + + /** + * @param list|null $pluginPrivilege + */ + public function setPluginPrivilege(?array $pluginPrivilege): self + { + $this->initialized['pluginPrivilege'] = true; + $this->pluginPrivilege = $pluginPrivilege; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecResources.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecResources.php new file mode 100644 index 000000000..2936c8516 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecResources.php @@ -0,0 +1,71 @@ +initialized); + } + /** + * An object describing a limit on resources which can be requested by a task. + * + * @var Limit|null + */ + protected $limits; + /** + * An object describing the resources which can be advertised by a node and + * requested by a task. + * + * @var ResourceObject|null + */ + protected $reservations; + + /** + * An object describing a limit on resources which can be requested by a task. + */ + public function getLimits(): ?Limit + { + return $this->limits; + } + + /** + * An object describing a limit on resources which can be requested by a task. + */ + public function setLimits(?Limit $limits): self + { + $this->initialized['limits'] = true; + $this->limits = $limits; + + return $this; + } + + /** + * An object describing the resources which can be advertised by a node and + * requested by a task. + */ + public function getReservations(): ?ResourceObject + { + return $this->reservations; + } + + /** + * An object describing the resources which can be advertised by a node and + * requested by a task. + */ + public function setReservations(?ResourceObject $reservations): self + { + $this->initialized['reservations'] = true; + $this->reservations = $reservations; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecRestartPolicy.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecRestartPolicy.php new file mode 100644 index 000000000..068b26f2d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskSpecRestartPolicy.php @@ -0,0 +1,124 @@ +initialized); + } + /** + * Condition for restart. + * + * @var string|null + */ + protected $condition; + /** + * Delay between restart attempts. + * + * @var int|null + */ + protected $delay; + /** + * Maximum attempts to restart a given container before giving up + * (default value is 0, which is ignored). + * + * @var int|null + */ + protected $maxAttempts = 0; + /** + * Windows is the time window used to evaluate the restart policy + * (default value is 0, which is unbounded). + * + * @var int|null + */ + protected $window = 0; + + /** + * Condition for restart. + */ + public function getCondition(): ?string + { + return $this->condition; + } + + /** + * Condition for restart. + */ + public function setCondition(?string $condition): self + { + $this->initialized['condition'] = true; + $this->condition = $condition; + + return $this; + } + + /** + * Delay between restart attempts. + */ + public function getDelay(): ?int + { + return $this->delay; + } + + /** + * Delay between restart attempts. + */ + public function setDelay(?int $delay): self + { + $this->initialized['delay'] = true; + $this->delay = $delay; + + return $this; + } + + /** + * Maximum attempts to restart a given container before giving up + * (default value is 0, which is ignored). + */ + public function getMaxAttempts(): ?int + { + return $this->maxAttempts; + } + + /** + * Maximum attempts to restart a given container before giving up + * (default value is 0, which is ignored). + */ + public function setMaxAttempts(?int $maxAttempts): self + { + $this->initialized['maxAttempts'] = true; + $this->maxAttempts = $maxAttempts; + + return $this; + } + + /** + * Windows is the time window used to evaluate the restart policy + * (default value is 0, which is unbounded). + */ + public function getWindow(): ?int + { + return $this->window; + } + + /** + * Windows is the time window used to evaluate the restart policy + * (default value is 0, which is unbounded). + */ + public function setWindow(?int $window): self + { + $this->initialized['window'] = true; + $this->window = $window; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/TaskStatus.php b/app/vendor/beluga-php/docker-php-api/src/Model/TaskStatus.php new file mode 100644 index 000000000..179633bfd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/TaskStatus.php @@ -0,0 +1,136 @@ +initialized); + } + /** + * @var string|null + */ + protected $timestamp; + /** + * @var string|null + */ + protected $state; + /** + * @var string|null + */ + protected $message; + /** + * @var string|null + */ + protected $err; + /** + * represents the status of a container. + * + * @var ContainerStatus|null + */ + protected $containerStatus; + /** + * represents the port status of a task's host ports whose service has published host ports. + * + * @var PortStatus|null + */ + protected $portStatus; + + public function getTimestamp(): ?string + { + return $this->timestamp; + } + + public function setTimestamp(?string $timestamp): self + { + $this->initialized['timestamp'] = true; + $this->timestamp = $timestamp; + + return $this; + } + + public function getState(): ?string + { + return $this->state; + } + + public function setState(?string $state): self + { + $this->initialized['state'] = true; + $this->state = $state; + + return $this; + } + + public function getMessage(): ?string + { + return $this->message; + } + + public function setMessage(?string $message): self + { + $this->initialized['message'] = true; + $this->message = $message; + + return $this; + } + + public function getErr(): ?string + { + return $this->err; + } + + public function setErr(?string $err): self + { + $this->initialized['err'] = true; + $this->err = $err; + + return $this; + } + + /** + * represents the status of a container. + */ + public function getContainerStatus(): ?ContainerStatus + { + return $this->containerStatus; + } + + /** + * represents the status of a container. + */ + public function setContainerStatus(?ContainerStatus $containerStatus): self + { + $this->initialized['containerStatus'] = true; + $this->containerStatus = $containerStatus; + + return $this; + } + + /** + * represents the port status of a task's host ports whose service has published host ports. + */ + public function getPortStatus(): ?PortStatus + { + return $this->portStatus; + } + + /** + * represents the port status of a task's host ports whose service has published host ports. + */ + public function setPortStatus(?PortStatus $portStatus): self + { + $this->initialized['portStatus'] = true; + $this->portStatus = $portStatus; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/ThrottleDevice.php b/app/vendor/beluga-php/docker-php-api/src/Model/ThrottleDevice.php new file mode 100644 index 000000000..693a22513 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/ThrottleDevice.php @@ -0,0 +1,68 @@ +initialized); + } + /** + * Device path. + * + * @var string|null + */ + protected $path; + /** + * Rate. + * + * @var int|null + */ + protected $rate; + + /** + * Device path. + */ + public function getPath(): ?string + { + return $this->path; + } + + /** + * Device path. + */ + public function setPath(?string $path): self + { + $this->initialized['path'] = true; + $this->path = $path; + + return $this; + } + + /** + * Rate. + */ + public function getRate(): ?int + { + return $this->rate; + } + + /** + * Rate. + */ + public function setRate(?int $rate): self + { + $this->initialized['rate'] = true; + $this->rate = $rate; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/Volume.php b/app/vendor/beluga-php/docker-php-api/src/Model/Volume.php new file mode 100644 index 000000000..b622c7b08 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/Volume.php @@ -0,0 +1,304 @@ +initialized); + } + /** + * Name of the volume. + * + * @var string|null + */ + protected $name; + /** + * Name of the volume driver used by the volume. + * + * @var string|null + */ + protected $driver; + /** + * Mount path of the volume on the host. + * + * @var string|null + */ + protected $mountpoint; + /** + * Date/Time the volume was created. + * + * @var string|null + */ + protected $createdAt; + /** + * Low-level details about the volume, provided by the volume driver. + * Details are returned as a map with key/value pairs: + * `{"key":"value","key2":"value2"}`. + * + * The `Status` field is optional, and is omitted if the volume driver + * does not support this feature. + * + * @var array|null + */ + protected $status; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * The level at which the volume exists. Either `global` for cluster-wide, + * or `local` for machine level. + * + * @var string|null + */ + protected $scope = 'local'; + /** + * Options and information specific to, and only present on, Swarm CSI + * cluster volumes. + * + * @var ClusterVolume|null + */ + protected $clusterVolume; + /** + * The driver specific options used when creating the volume. + * + * @var array|null + */ + protected $options; + /** + * Usage details about the volume. This information is used by the + * `GET /system/df` endpoint, and omitted in other endpoints. + * + * @var VolumeUsageData|null + */ + protected $usageData; + + /** + * Name of the volume. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * Name of the volume. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Name of the volume driver used by the volume. + */ + public function getDriver(): ?string + { + return $this->driver; + } + + /** + * Name of the volume driver used by the volume. + */ + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * Mount path of the volume on the host. + */ + public function getMountpoint(): ?string + { + return $this->mountpoint; + } + + /** + * Mount path of the volume on the host. + */ + public function setMountpoint(?string $mountpoint): self + { + $this->initialized['mountpoint'] = true; + $this->mountpoint = $mountpoint; + + return $this; + } + + /** + * Date/Time the volume was created. + */ + public function getCreatedAt(): ?string + { + return $this->createdAt; + } + + /** + * Date/Time the volume was created. + */ + public function setCreatedAt(?string $createdAt): self + { + $this->initialized['createdAt'] = true; + $this->createdAt = $createdAt; + + return $this; + } + + /** + * Low-level details about the volume, provided by the volume driver. + * Details are returned as a map with key/value pairs: + * `{"key":"value","key2":"value2"}`. + * + * The `Status` field is optional, and is omitted if the volume driver + * does not support this feature. + * + * @return array|null + */ + public function getStatus(): ?iterable + { + return $this->status; + } + + /** + * Low-level details about the volume, provided by the volume driver. + * Details are returned as a map with key/value pairs: + * `{"key":"value","key2":"value2"}`. + * + * The `Status` field is optional, and is omitted if the volume driver + * does not support this feature. + * + * @param array|null $status + */ + public function setStatus(?iterable $status): self + { + $this->initialized['status'] = true; + $this->status = $status; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * The level at which the volume exists. Either `global` for cluster-wide, + * or `local` for machine level. + */ + public function getScope(): ?string + { + return $this->scope; + } + + /** + * The level at which the volume exists. Either `global` for cluster-wide, + * or `local` for machine level. + */ + public function setScope(?string $scope): self + { + $this->initialized['scope'] = true; + $this->scope = $scope; + + return $this; + } + + /** + * Options and information specific to, and only present on, Swarm CSI + * cluster volumes. + */ + public function getClusterVolume(): ?ClusterVolume + { + return $this->clusterVolume; + } + + /** + * Options and information specific to, and only present on, Swarm CSI + * cluster volumes. + */ + public function setClusterVolume(?ClusterVolume $clusterVolume): self + { + $this->initialized['clusterVolume'] = true; + $this->clusterVolume = $clusterVolume; + + return $this; + } + + /** + * The driver specific options used when creating the volume. + * + * @return array|null + */ + public function getOptions(): ?iterable + { + return $this->options; + } + + /** + * The driver specific options used when creating the volume. + * + * @param array|null $options + */ + public function setOptions(?iterable $options): self + { + $this->initialized['options'] = true; + $this->options = $options; + + return $this; + } + + /** + * Usage details about the volume. This information is used by the + * `GET /system/df` endpoint, and omitted in other endpoints. + */ + public function getUsageData(): ?VolumeUsageData + { + return $this->usageData; + } + + /** + * Usage details about the volume. This information is used by the + * `GET /system/df` endpoint, and omitted in other endpoints. + */ + public function setUsageData(?VolumeUsageData $usageData): self + { + $this->initialized['usageData'] = true; + $this->usageData = $usageData; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/VolumeCreateOptions.php b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeCreateOptions.php new file mode 100644 index 000000000..0cc7ba34c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeCreateOptions.php @@ -0,0 +1,154 @@ +initialized); + } + /** + * The new volume's name. If not specified, Docker generates a name. + * + * @var string|null + */ + protected $name; + /** + * Name of the volume driver to use. + * + * @var string|null + */ + protected $driver = 'local'; + /** + * A mapping of driver options and values. These options are + * passed directly to the driver and are driver specific. + * + * @var array|null + */ + protected $driverOpts; + /** + * User-defined key/value metadata. + * + * @var array|null + */ + protected $labels; + /** + * Cluster-specific options used to create the volume. + * + * @var ClusterVolumeSpec|null + */ + protected $clusterVolumeSpec; + + /** + * The new volume's name. If not specified, Docker generates a name. + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * The new volume's name. If not specified, Docker generates a name. + */ + public function setName(?string $name): self + { + $this->initialized['name'] = true; + $this->name = $name; + + return $this; + } + + /** + * Name of the volume driver to use. + */ + public function getDriver(): ?string + { + return $this->driver; + } + + /** + * Name of the volume driver to use. + */ + public function setDriver(?string $driver): self + { + $this->initialized['driver'] = true; + $this->driver = $driver; + + return $this; + } + + /** + * A mapping of driver options and values. These options are + * passed directly to the driver and are driver specific. + * + * @return array|null + */ + public function getDriverOpts(): ?iterable + { + return $this->driverOpts; + } + + /** + * A mapping of driver options and values. These options are + * passed directly to the driver and are driver specific. + * + * @param array|null $driverOpts + */ + public function setDriverOpts(?iterable $driverOpts): self + { + $this->initialized['driverOpts'] = true; + $this->driverOpts = $driverOpts; + + return $this; + } + + /** + * User-defined key/value metadata. + * + * @return array|null + */ + public function getLabels(): ?iterable + { + return $this->labels; + } + + /** + * User-defined key/value metadata. + * + * @param array|null $labels + */ + public function setLabels(?iterable $labels): self + { + $this->initialized['labels'] = true; + $this->labels = $labels; + + return $this; + } + + /** + * Cluster-specific options used to create the volume. + */ + public function getClusterVolumeSpec(): ?ClusterVolumeSpec + { + return $this->clusterVolumeSpec; + } + + /** + * Cluster-specific options used to create the volume. + */ + public function setClusterVolumeSpec(?ClusterVolumeSpec $clusterVolumeSpec): self + { + $this->initialized['clusterVolumeSpec'] = true; + $this->clusterVolumeSpec = $clusterVolumeSpec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/VolumeListResponse.php b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeListResponse.php new file mode 100644 index 000000000..52f839529 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeListResponse.php @@ -0,0 +1,76 @@ +initialized); + } + /** + * List of volumes. + * + * @var list|null + */ + protected $volumes; + /** + * Warnings that occurred when fetching the list of volumes. + * + * @var list|null + */ + protected $warnings; + + /** + * List of volumes. + * + * @return list|null + */ + public function getVolumes(): ?array + { + return $this->volumes; + } + + /** + * List of volumes. + * + * @param list|null $volumes + */ + public function setVolumes(?array $volumes): self + { + $this->initialized['volumes'] = true; + $this->volumes = $volumes; + + return $this; + } + + /** + * Warnings that occurred when fetching the list of volumes. + * + * @return list|null + */ + public function getWarnings(): ?array + { + return $this->warnings; + } + + /** + * Warnings that occurred when fetching the list of volumes. + * + * @param list|null $warnings + */ + public function setWarnings(?array $warnings): self + { + $this->initialized['warnings'] = true; + $this->warnings = $warnings; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/VolumeStatusItem.php b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeStatusItem.php new file mode 100644 index 000000000..fbfd22120 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeStatusItem.php @@ -0,0 +1,18 @@ +initialized); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/VolumeUsageData.php b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeUsageData.php new file mode 100644 index 000000000..09fb2d8d9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/VolumeUsageData.php @@ -0,0 +1,80 @@ +initialized); + } + /** + * Amount of disk space used by the volume (in bytes). This information + * is only available for volumes created with the `"local"` volume + * driver. For volumes created with other volume drivers, this field + * is set to `-1` ("not available"). + * + * @var int|null + */ + protected $size = -1; + /** + * The number of containers referencing this volume. This field + * is set to `-1` if the reference-count is not available. + * + * @var int|null + */ + protected $refCount = -1; + + /** + * Amount of disk space used by the volume (in bytes). This information + * is only available for volumes created with the `"local"` volume + * driver. For volumes created with other volume drivers, this field + * is set to `-1` ("not available"). + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * Amount of disk space used by the volume (in bytes). This information + * is only available for volumes created with the `"local"` volume + * driver. For volumes created with other volume drivers, this field + * is set to `-1` ("not available"). + */ + public function setSize(?int $size): self + { + $this->initialized['size'] = true; + $this->size = $size; + + return $this; + } + + /** + * The number of containers referencing this volume. This field + * is set to `-1` if the reference-count is not available. + */ + public function getRefCount(): ?int + { + return $this->refCount; + } + + /** + * The number of containers referencing this volume. This field + * is set to `-1` if the reference-count is not available. + */ + public function setRefCount(?int $refCount): self + { + $this->initialized['refCount'] = true; + $this->refCount = $refCount; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/VolumesNamePutBody.php b/app/vendor/beluga-php/docker-php-api/src/Model/VolumesNamePutBody.php new file mode 100644 index 000000000..b4820e68c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/VolumesNamePutBody.php @@ -0,0 +1,43 @@ +initialized); + } + /** + * Cluster-specific options used to create the volume. + * + * @var ClusterVolumeSpec|null + */ + protected $spec; + + /** + * Cluster-specific options used to create the volume. + */ + public function getSpec(): ?ClusterVolumeSpec + { + return $this->spec; + } + + /** + * Cluster-specific options used to create the volume. + */ + public function setSpec(?ClusterVolumeSpec $spec): self + { + $this->initialized['spec'] = true; + $this->spec = $spec; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Model/VolumesPrunePostResponse200.php b/app/vendor/beluga-php/docker-php-api/src/Model/VolumesPrunePostResponse200.php new file mode 100644 index 000000000..46a8dc2a6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Model/VolumesPrunePostResponse200.php @@ -0,0 +1,72 @@ +initialized); + } + /** + * Volumes that were deleted. + * + * @var list|null + */ + protected $volumesDeleted; + /** + * Disk space reclaimed in bytes. + * + * @var int|null + */ + protected $spaceReclaimed; + + /** + * Volumes that were deleted. + * + * @return list|null + */ + public function getVolumesDeleted(): ?array + { + return $this->volumesDeleted; + } + + /** + * Volumes that were deleted. + * + * @param list|null $volumesDeleted + */ + public function setVolumesDeleted(?array $volumesDeleted): self + { + $this->initialized['volumesDeleted'] = true; + $this->volumesDeleted = $volumesDeleted; + + return $this; + } + + /** + * Disk space reclaimed in bytes. + */ + public function getSpaceReclaimed(): ?int + { + return $this->spaceReclaimed; + } + + /** + * Disk space reclaimed in bytes. + */ + public function setSpaceReclaimed(?int $spaceReclaimed): self + { + $this->initialized['spaceReclaimed'] = true; + $this->spaceReclaimed = $spaceReclaimed; + + return $this; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/AddressNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/AddressNormalizer.php new file mode 100644 index 000000000..6499fba89 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/AddressNormalizer.php @@ -0,0 +1,89 @@ +setAddr($data['Addr']); + unset($data['Addr']); + } elseif (\array_key_exists('Addr', $data) && null === $data['Addr']) { + $object->setAddr(null); + } + if (\array_key_exists('PrefixLen', $data) && null !== $data['PrefixLen']) { + $object->setPrefixLen($data['PrefixLen']); + unset($data['PrefixLen']); + } elseif (\array_key_exists('PrefixLen', $data) && null === $data['PrefixLen']) { + $object->setPrefixLen(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('addr') && null !== $data->getAddr()) { + $dataArray['Addr'] = $data->getAddr(); + } + if ($data->isInitialized('prefixLen') && null !== $data->getPrefixLen()) { + $dataArray['PrefixLen'] = $data->getPrefixLen(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Address::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/AuthConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/AuthConfigNormalizer.php new file mode 100644 index 000000000..882c6660d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/AuthConfigNormalizer.php @@ -0,0 +1,107 @@ +setUsername($data['username']); + unset($data['username']); + } elseif (\array_key_exists('username', $data) && null === $data['username']) { + $object->setUsername(null); + } + if (\array_key_exists('password', $data) && null !== $data['password']) { + $object->setPassword($data['password']); + unset($data['password']); + } elseif (\array_key_exists('password', $data) && null === $data['password']) { + $object->setPassword(null); + } + if (\array_key_exists('email', $data) && null !== $data['email']) { + $object->setEmail($data['email']); + unset($data['email']); + } elseif (\array_key_exists('email', $data) && null === $data['email']) { + $object->setEmail(null); + } + if (\array_key_exists('serveraddress', $data) && null !== $data['serveraddress']) { + $object->setServeraddress($data['serveraddress']); + unset($data['serveraddress']); + } elseif (\array_key_exists('serveraddress', $data) && null === $data['serveraddress']) { + $object->setServeraddress(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('username') && null !== $data->getUsername()) { + $dataArray['username'] = $data->getUsername(); + } + if ($data->isInitialized('password') && null !== $data->getPassword()) { + $dataArray['password'] = $data->getPassword(); + } + if ($data->isInitialized('email') && null !== $data->getEmail()) { + $dataArray['email'] = $data->getEmail(); + } + if ($data->isInitialized('serveraddress') && null !== $data->getServeraddress()) { + $dataArray['serveraddress'] = $data->getServeraddress(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\AuthConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/AuthPostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/AuthPostResponse200Normalizer.php new file mode 100644 index 000000000..69b2e4d2c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/AuthPostResponse200Normalizer.php @@ -0,0 +1,87 @@ +setStatus($data['Status']); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('IdentityToken', $data) && null !== $data['IdentityToken']) { + $object->setIdentityToken($data['IdentityToken']); + unset($data['IdentityToken']); + } elseif (\array_key_exists('IdentityToken', $data) && null === $data['IdentityToken']) { + $object->setIdentityToken(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Status'] = $data->getStatus(); + if ($data->isInitialized('identityToken') && null !== $data->getIdentityToken()) { + $dataArray['IdentityToken'] = $data->getIdentityToken(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\AuthPostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildCacheNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildCacheNormalizer.php new file mode 100644 index 000000000..cf83c4412 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildCacheNormalizer.php @@ -0,0 +1,184 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Parent', $data) && null !== $data['Parent']) { + $object->setParent($data['Parent']); + unset($data['Parent']); + } elseif (\array_key_exists('Parent', $data) && null === $data['Parent']) { + $object->setParent(null); + } + if (\array_key_exists('Parents', $data) && null !== $data['Parents']) { + $values = []; + foreach ($data['Parents'] as $value) { + $values[] = $value; + } + $object->setParents($values); + unset($data['Parents']); + } elseif (\array_key_exists('Parents', $data) && null === $data['Parents']) { + $object->setParents(null); + } + if (\array_key_exists('Type', $data) && null !== $data['Type']) { + $object->setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('InUse', $data) && null !== $data['InUse']) { + $object->setInUse($data['InUse']); + unset($data['InUse']); + } elseif (\array_key_exists('InUse', $data) && null === $data['InUse']) { + $object->setInUse(null); + } + if (\array_key_exists('Shared', $data) && null !== $data['Shared']) { + $object->setShared($data['Shared']); + unset($data['Shared']); + } elseif (\array_key_exists('Shared', $data) && null === $data['Shared']) { + $object->setShared(null); + } + if (\array_key_exists('Size', $data) && null !== $data['Size']) { + $object->setSize($data['Size']); + unset($data['Size']); + } elseif (\array_key_exists('Size', $data) && null === $data['Size']) { + $object->setSize(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('LastUsedAt', $data) && null !== $data['LastUsedAt']) { + $object->setLastUsedAt($data['LastUsedAt']); + unset($data['LastUsedAt']); + } elseif (\array_key_exists('LastUsedAt', $data) && null === $data['LastUsedAt']) { + $object->setLastUsedAt(null); + } + if (\array_key_exists('UsageCount', $data) && null !== $data['UsageCount']) { + $object->setUsageCount($data['UsageCount']); + unset($data['UsageCount']); + } elseif (\array_key_exists('UsageCount', $data) && null === $data['UsageCount']) { + $object->setUsageCount(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('parent') && null !== $data->getParent()) { + $dataArray['Parent'] = $data->getParent(); + } + if ($data->isInitialized('parents') && null !== $data->getParents()) { + $values = []; + foreach ($data->getParents() as $value) { + $values[] = $value; + } + $dataArray['Parents'] = $values; + } + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('description') && null !== $data->getDescription()) { + $dataArray['Description'] = $data->getDescription(); + } + if ($data->isInitialized('inUse') && null !== $data->getInUse()) { + $dataArray['InUse'] = $data->getInUse(); + } + if ($data->isInitialized('shared') && null !== $data->getShared()) { + $dataArray['Shared'] = $data->getShared(); + } + if ($data->isInitialized('size') && null !== $data->getSize()) { + $dataArray['Size'] = $data->getSize(); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('lastUsedAt') && null !== $data->getLastUsedAt()) { + $dataArray['LastUsedAt'] = $data->getLastUsedAt(); + } + if ($data->isInitialized('usageCount') && null !== $data->getUsageCount()) { + $dataArray['UsageCount'] = $data->getUsageCount(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\BuildCache::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildInfoNormalizer.php new file mode 100644 index 000000000..c902ed642 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildInfoNormalizer.php @@ -0,0 +1,143 @@ +setId($data['id']); + unset($data['id']); + } elseif (\array_key_exists('id', $data) && null === $data['id']) { + $object->setId(null); + } + if (\array_key_exists('stream', $data) && null !== $data['stream']) { + $object->setStream($data['stream']); + unset($data['stream']); + } elseif (\array_key_exists('stream', $data) && null === $data['stream']) { + $object->setStream(null); + } + if (\array_key_exists('error', $data) && null !== $data['error']) { + $object->setError($data['error']); + unset($data['error']); + } elseif (\array_key_exists('error', $data) && null === $data['error']) { + $object->setError(null); + } + if (\array_key_exists('errorDetail', $data) && null !== $data['errorDetail']) { + $object->setErrorDetail($this->denormalizer->denormalize($data['errorDetail'], \Docker\API\Model\ErrorDetail::class, 'json', $context)); + unset($data['errorDetail']); + } elseif (\array_key_exists('errorDetail', $data) && null === $data['errorDetail']) { + $object->setErrorDetail(null); + } + if (\array_key_exists('status', $data) && null !== $data['status']) { + $object->setStatus($data['status']); + unset($data['status']); + } elseif (\array_key_exists('status', $data) && null === $data['status']) { + $object->setStatus(null); + } + if (\array_key_exists('progress', $data) && null !== $data['progress']) { + $object->setProgress($data['progress']); + unset($data['progress']); + } elseif (\array_key_exists('progress', $data) && null === $data['progress']) { + $object->setProgress(null); + } + if (\array_key_exists('progressDetail', $data) && null !== $data['progressDetail']) { + $object->setProgressDetail($this->denormalizer->denormalize($data['progressDetail'], \Docker\API\Model\ProgressDetail::class, 'json', $context)); + unset($data['progressDetail']); + } elseif (\array_key_exists('progressDetail', $data) && null === $data['progressDetail']) { + $object->setProgressDetail(null); + } + if (\array_key_exists('aux', $data) && null !== $data['aux']) { + $object->setAux($this->denormalizer->denormalize($data['aux'], \Docker\API\Model\ImageID::class, 'json', $context)); + unset($data['aux']); + } elseif (\array_key_exists('aux', $data) && null === $data['aux']) { + $object->setAux(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['id'] = $data->getId(); + } + if ($data->isInitialized('stream') && null !== $data->getStream()) { + $dataArray['stream'] = $data->getStream(); + } + if ($data->isInitialized('error') && null !== $data->getError()) { + $dataArray['error'] = $data->getError(); + } + if ($data->isInitialized('errorDetail') && null !== $data->getErrorDetail()) { + $dataArray['errorDetail'] = $this->normalizer->normalize($data->getErrorDetail(), 'json', $context); + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['status'] = $data->getStatus(); + } + if ($data->isInitialized('progress') && null !== $data->getProgress()) { + $dataArray['progress'] = $data->getProgress(); + } + if ($data->isInitialized('progressDetail') && null !== $data->getProgressDetail()) { + $dataArray['progressDetail'] = $this->normalizer->normalize($data->getProgressDetail(), 'json', $context); + } + if ($data->isInitialized('aux') && null !== $data->getAux()) { + $dataArray['aux'] = $this->normalizer->normalize($data->getAux(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\BuildInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildPrunePostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildPrunePostResponse200Normalizer.php new file mode 100644 index 000000000..c3deb1026 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/BuildPrunePostResponse200Normalizer.php @@ -0,0 +1,97 @@ +setCachesDeleted($values); + unset($data['CachesDeleted']); + } elseif (\array_key_exists('CachesDeleted', $data) && null === $data['CachesDeleted']) { + $object->setCachesDeleted(null); + } + if (\array_key_exists('SpaceReclaimed', $data) && null !== $data['SpaceReclaimed']) { + $object->setSpaceReclaimed($data['SpaceReclaimed']); + unset($data['SpaceReclaimed']); + } elseif (\array_key_exists('SpaceReclaimed', $data) && null === $data['SpaceReclaimed']) { + $object->setSpaceReclaimed(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('cachesDeleted') && null !== $data->getCachesDeleted()) { + $values = []; + foreach ($data->getCachesDeleted() as $value) { + $values[] = $value; + } + $dataArray['CachesDeleted'] = $values; + } + if ($data->isInitialized('spaceReclaimed') && null !== $data->getSpaceReclaimed()) { + $dataArray['SpaceReclaimed'] = $data->getSpaceReclaimed(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\BuildPrunePostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterInfoNormalizer.php new file mode 100644 index 000000000..175673463 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterInfoNormalizer.php @@ -0,0 +1,172 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\SwarmSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('TLSInfo', $data) && null !== $data['TLSInfo']) { + $object->setTLSInfo($this->denormalizer->denormalize($data['TLSInfo'], \Docker\API\Model\TLSInfo::class, 'json', $context)); + unset($data['TLSInfo']); + } elseif (\array_key_exists('TLSInfo', $data) && null === $data['TLSInfo']) { + $object->setTLSInfo(null); + } + if (\array_key_exists('RootRotationInProgress', $data) && null !== $data['RootRotationInProgress']) { + $object->setRootRotationInProgress($data['RootRotationInProgress']); + unset($data['RootRotationInProgress']); + } elseif (\array_key_exists('RootRotationInProgress', $data) && null === $data['RootRotationInProgress']) { + $object->setRootRotationInProgress(null); + } + if (\array_key_exists('DataPathPort', $data) && null !== $data['DataPathPort']) { + $object->setDataPathPort($data['DataPathPort']); + unset($data['DataPathPort']); + } elseif (\array_key_exists('DataPathPort', $data) && null === $data['DataPathPort']) { + $object->setDataPathPort(null); + } + if (\array_key_exists('DefaultAddrPool', $data) && null !== $data['DefaultAddrPool']) { + $values = []; + foreach ($data['DefaultAddrPool'] as $value) { + $values[] = $value; + } + $object->setDefaultAddrPool($values); + unset($data['DefaultAddrPool']); + } elseif (\array_key_exists('DefaultAddrPool', $data) && null === $data['DefaultAddrPool']) { + $object->setDefaultAddrPool(null); + } + if (\array_key_exists('SubnetSize', $data) && null !== $data['SubnetSize']) { + $object->setSubnetSize($data['SubnetSize']); + unset($data['SubnetSize']); + } elseif (\array_key_exists('SubnetSize', $data) && null === $data['SubnetSize']) { + $object->setSubnetSize(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('tLSInfo') && null !== $data->getTLSInfo()) { + $dataArray['TLSInfo'] = $this->normalizer->normalize($data->getTLSInfo(), 'json', $context); + } + if ($data->isInitialized('rootRotationInProgress') && null !== $data->getRootRotationInProgress()) { + $dataArray['RootRotationInProgress'] = $data->getRootRotationInProgress(); + } + if ($data->isInitialized('dataPathPort') && null !== $data->getDataPathPort()) { + $dataArray['DataPathPort'] = $data->getDataPathPort(); + } + if ($data->isInitialized('defaultAddrPool') && null !== $data->getDefaultAddrPool()) { + $values = []; + foreach ($data->getDefaultAddrPool() as $value) { + $values[] = $value; + } + $dataArray['DefaultAddrPool'] = $values; + } + if ($data->isInitialized('subnetSize') && null !== $data->getSubnetSize()) { + $dataArray['SubnetSize'] = $data->getSubnetSize(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeInfoNormalizer.php new file mode 100644 index 000000000..53a4415f0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeInfoNormalizer.php @@ -0,0 +1,131 @@ +setCapacityBytes($data['CapacityBytes']); + unset($data['CapacityBytes']); + } elseif (\array_key_exists('CapacityBytes', $data) && null === $data['CapacityBytes']) { + $object->setCapacityBytes(null); + } + if (\array_key_exists('VolumeContext', $data) && null !== $data['VolumeContext']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['VolumeContext'] as $key => $value) { + $values[$key] = $value; + } + $object->setVolumeContext($values); + unset($data['VolumeContext']); + } elseif (\array_key_exists('VolumeContext', $data) && null === $data['VolumeContext']) { + $object->setVolumeContext(null); + } + if (\array_key_exists('VolumeID', $data) && null !== $data['VolumeID']) { + $object->setVolumeID($data['VolumeID']); + unset($data['VolumeID']); + } elseif (\array_key_exists('VolumeID', $data) && null === $data['VolumeID']) { + $object->setVolumeID(null); + } + if (\array_key_exists('AccessibleTopology', $data) && null !== $data['AccessibleTopology']) { + $values_1 = []; + foreach ($data['AccessibleTopology'] as $value_1) { + $values_2 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($value_1 as $key_1 => $value_2) { + $values_2[$key_1] = $value_2; + } + $values_1[] = $values_2; + } + $object->setAccessibleTopology($values_1); + unset($data['AccessibleTopology']); + } elseif (\array_key_exists('AccessibleTopology', $data) && null === $data['AccessibleTopology']) { + $object->setAccessibleTopology(null); + } + foreach ($data as $key_2 => $value_3) { + if (preg_match('/.*/', (string) $key_2)) { + $object[$key_2] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('capacityBytes') && null !== $data->getCapacityBytes()) { + $dataArray['CapacityBytes'] = $data->getCapacityBytes(); + } + if ($data->isInitialized('volumeContext') && null !== $data->getVolumeContext()) { + $values = []; + foreach ($data->getVolumeContext() as $key => $value) { + $values[$key] = $value; + } + $dataArray['VolumeContext'] = $values; + } + if ($data->isInitialized('volumeID') && null !== $data->getVolumeID()) { + $dataArray['VolumeID'] = $data->getVolumeID(); + } + if ($data->isInitialized('accessibleTopology') && null !== $data->getAccessibleTopology()) { + $values_1 = []; + foreach ($data->getAccessibleTopology() as $value_1) { + $values_2 = []; + foreach ($value_1 as $key_1 => $value_2) { + $values_2[$key_1] = $value_2; + } + $values_1[] = $values_2; + } + $dataArray['AccessibleTopology'] = $values_1; + } + foreach ($data as $key_2 => $value_3) { + if (preg_match('/.*/', (string) $key_2)) { + $dataArray[$key_2] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeNormalizer.php new file mode 100644 index 000000000..68ef1c763 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeNormalizer.php @@ -0,0 +1,142 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\ClusterVolumeSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('Info', $data) && null !== $data['Info']) { + $object->setInfo($this->denormalizer->denormalize($data['Info'], \Docker\API\Model\ClusterVolumeInfo::class, 'json', $context)); + unset($data['Info']); + } elseif (\array_key_exists('Info', $data) && null === $data['Info']) { + $object->setInfo(null); + } + if (\array_key_exists('PublishStatus', $data) && null !== $data['PublishStatus']) { + $values = []; + foreach ($data['PublishStatus'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ClusterVolumePublishStatusItem::class, 'json', $context); + } + $object->setPublishStatus($values); + unset($data['PublishStatus']); + } elseif (\array_key_exists('PublishStatus', $data) && null === $data['PublishStatus']) { + $object->setPublishStatus(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('info') && null !== $data->getInfo()) { + $dataArray['Info'] = $this->normalizer->normalize($data->getInfo(), 'json', $context); + } + if ($data->isInitialized('publishStatus') && null !== $data->getPublishStatus()) { + $values = []; + foreach ($data->getPublishStatus() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['PublishStatus'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolume::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumePublishStatusItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumePublishStatusItemNormalizer.php new file mode 100644 index 000000000..1acd5f6c0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumePublishStatusItemNormalizer.php @@ -0,0 +1,106 @@ +setNodeID($data['NodeID']); + unset($data['NodeID']); + } elseif (\array_key_exists('NodeID', $data) && null === $data['NodeID']) { + $object->setNodeID(null); + } + if (\array_key_exists('State', $data) && null !== $data['State']) { + $object->setState($data['State']); + unset($data['State']); + } elseif (\array_key_exists('State', $data) && null === $data['State']) { + $object->setState(null); + } + if (\array_key_exists('PublishContext', $data) && null !== $data['PublishContext']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['PublishContext'] as $key => $value) { + $values[$key] = $value; + } + $object->setPublishContext($values); + unset($data['PublishContext']); + } elseif (\array_key_exists('PublishContext', $data) && null === $data['PublishContext']) { + $object->setPublishContext(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nodeID') && null !== $data->getNodeID()) { + $dataArray['NodeID'] = $data->getNodeID(); + } + if ($data->isInitialized('state') && null !== $data->getState()) { + $dataArray['State'] = $data->getState(); + } + if ($data->isInitialized('publishContext') && null !== $data->getPublishContext()) { + $values = []; + foreach ($data->getPublishContext() as $key => $value) { + $values[$key] = $value; + } + $dataArray['PublishContext'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumePublishStatusItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeAccessibilityRequirementsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeAccessibilityRequirementsNormalizer.php new file mode 100644 index 000000000..d0f0f9c47 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeAccessibilityRequirementsNormalizer.php @@ -0,0 +1,121 @@ + $value_1) { + $values_1[$key] = $value_1; + } + $values[] = $values_1; + } + $object->setRequisite($values); + unset($data['Requisite']); + } elseif (\array_key_exists('Requisite', $data) && null === $data['Requisite']) { + $object->setRequisite(null); + } + if (\array_key_exists('Preferred', $data) && null !== $data['Preferred']) { + $values_2 = []; + foreach ($data['Preferred'] as $value_2) { + $values_3 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($value_2 as $key_1 => $value_3) { + $values_3[$key_1] = $value_3; + } + $values_2[] = $values_3; + } + $object->setPreferred($values_2); + unset($data['Preferred']); + } elseif (\array_key_exists('Preferred', $data) && null === $data['Preferred']) { + $object->setPreferred(null); + } + foreach ($data as $key_2 => $value_4) { + if (preg_match('/.*/', (string) $key_2)) { + $object[$key_2] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('requisite') && null !== $data->getRequisite()) { + $values = []; + foreach ($data->getRequisite() as $value) { + $values_1 = []; + foreach ($value as $key => $value_1) { + $values_1[$key] = $value_1; + } + $values[] = $values_1; + } + $dataArray['Requisite'] = $values; + } + if ($data->isInitialized('preferred') && null !== $data->getPreferred()) { + $values_2 = []; + foreach ($data->getPreferred() as $value_2) { + $values_3 = []; + foreach ($value_2 as $key_1 => $value_3) { + $values_3[$key_1] = $value_3; + } + $values_2[] = $values_3; + } + $dataArray['Preferred'] = $values_2; + } + foreach ($data as $key_2 => $value_4) { + if (preg_match('/.*/', (string) $key_2)) { + $dataArray[$key_2] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeSpecAccessModeAccessibilityRequirements::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeCapacityRangeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeCapacityRangeNormalizer.php new file mode 100644 index 000000000..420d14b6b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeCapacityRangeNormalizer.php @@ -0,0 +1,89 @@ +setRequiredBytes($data['RequiredBytes']); + unset($data['RequiredBytes']); + } elseif (\array_key_exists('RequiredBytes', $data) && null === $data['RequiredBytes']) { + $object->setRequiredBytes(null); + } + if (\array_key_exists('LimitBytes', $data) && null !== $data['LimitBytes']) { + $object->setLimitBytes($data['LimitBytes']); + unset($data['LimitBytes']); + } elseif (\array_key_exists('LimitBytes', $data) && null === $data['LimitBytes']) { + $object->setLimitBytes(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('requiredBytes') && null !== $data->getRequiredBytes()) { + $dataArray['RequiredBytes'] = $data->getRequiredBytes(); + } + if ($data->isInitialized('limitBytes') && null !== $data->getLimitBytes()) { + $dataArray['LimitBytes'] = $data->getLimitBytes(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeSpecAccessModeCapacityRange::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeMountVolumeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeMountVolumeNormalizer.php new file mode 100644 index 000000000..a008372b8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeMountVolumeNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeSpecAccessModeMountVolume::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeNormalizer.php new file mode 100644 index 000000000..8416948bc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeNormalizer.php @@ -0,0 +1,142 @@ +setScope($data['Scope']); + unset($data['Scope']); + } elseif (\array_key_exists('Scope', $data) && null === $data['Scope']) { + $object->setScope(null); + } + if (\array_key_exists('Sharing', $data) && null !== $data['Sharing']) { + $object->setSharing($data['Sharing']); + unset($data['Sharing']); + } elseif (\array_key_exists('Sharing', $data) && null === $data['Sharing']) { + $object->setSharing(null); + } + if (\array_key_exists('MountVolume', $data) && null !== $data['MountVolume']) { + $object->setMountVolume($this->denormalizer->denormalize($data['MountVolume'], \Docker\API\Model\ClusterVolumeSpecAccessModeMountVolume::class, 'json', $context)); + unset($data['MountVolume']); + } elseif (\array_key_exists('MountVolume', $data) && null === $data['MountVolume']) { + $object->setMountVolume(null); + } + if (\array_key_exists('Secrets', $data) && null !== $data['Secrets']) { + $values = []; + foreach ($data['Secrets'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ClusterVolumeSpecAccessModeSecretsItem::class, 'json', $context); + } + $object->setSecrets($values); + unset($data['Secrets']); + } elseif (\array_key_exists('Secrets', $data) && null === $data['Secrets']) { + $object->setSecrets(null); + } + if (\array_key_exists('AccessibilityRequirements', $data) && null !== $data['AccessibilityRequirements']) { + $object->setAccessibilityRequirements($this->denormalizer->denormalize($data['AccessibilityRequirements'], \Docker\API\Model\ClusterVolumeSpecAccessModeAccessibilityRequirements::class, 'json', $context)); + unset($data['AccessibilityRequirements']); + } elseif (\array_key_exists('AccessibilityRequirements', $data) && null === $data['AccessibilityRequirements']) { + $object->setAccessibilityRequirements(null); + } + if (\array_key_exists('CapacityRange', $data) && null !== $data['CapacityRange']) { + $object->setCapacityRange($this->denormalizer->denormalize($data['CapacityRange'], \Docker\API\Model\ClusterVolumeSpecAccessModeCapacityRange::class, 'json', $context)); + unset($data['CapacityRange']); + } elseif (\array_key_exists('CapacityRange', $data) && null === $data['CapacityRange']) { + $object->setCapacityRange(null); + } + if (\array_key_exists('Availability', $data) && null !== $data['Availability']) { + $object->setAvailability($data['Availability']); + unset($data['Availability']); + } elseif (\array_key_exists('Availability', $data) && null === $data['Availability']) { + $object->setAvailability(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('scope') && null !== $data->getScope()) { + $dataArray['Scope'] = $data->getScope(); + } + if ($data->isInitialized('sharing') && null !== $data->getSharing()) { + $dataArray['Sharing'] = $data->getSharing(); + } + if ($data->isInitialized('mountVolume') && null !== $data->getMountVolume()) { + $dataArray['MountVolume'] = $this->normalizer->normalize($data->getMountVolume(), 'json', $context); + } + if ($data->isInitialized('secrets') && null !== $data->getSecrets()) { + $values = []; + foreach ($data->getSecrets() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Secrets'] = $values; + } + if ($data->isInitialized('accessibilityRequirements') && null !== $data->getAccessibilityRequirements()) { + $dataArray['AccessibilityRequirements'] = $this->normalizer->normalize($data->getAccessibilityRequirements(), 'json', $context); + } + if ($data->isInitialized('capacityRange') && null !== $data->getCapacityRange()) { + $dataArray['CapacityRange'] = $this->normalizer->normalize($data->getCapacityRange(), 'json', $context); + } + if ($data->isInitialized('availability') && null !== $data->getAvailability()) { + $dataArray['Availability'] = $data->getAvailability(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeSpecAccessMode::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeSecretsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeSecretsItemNormalizer.php new file mode 100644 index 000000000..99e6a5e2e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecAccessModeSecretsItemNormalizer.php @@ -0,0 +1,89 @@ +setKey($data['Key']); + unset($data['Key']); + } elseif (\array_key_exists('Key', $data) && null === $data['Key']) { + $object->setKey(null); + } + if (\array_key_exists('Secret', $data) && null !== $data['Secret']) { + $object->setSecret($data['Secret']); + unset($data['Secret']); + } elseif (\array_key_exists('Secret', $data) && null === $data['Secret']) { + $object->setSecret(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('key') && null !== $data->getKey()) { + $dataArray['Key'] = $data->getKey(); + } + if ($data->isInitialized('secret') && null !== $data->getSecret()) { + $dataArray['Secret'] = $data->getSecret(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeSpecAccessModeSecretsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecNormalizer.php new file mode 100644 index 000000000..ea1ddea43 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ClusterVolumeSpecNormalizer.php @@ -0,0 +1,89 @@ +setGroup($data['Group']); + unset($data['Group']); + } elseif (\array_key_exists('Group', $data) && null === $data['Group']) { + $object->setGroup(null); + } + if (\array_key_exists('AccessMode', $data) && null !== $data['AccessMode']) { + $object->setAccessMode($this->denormalizer->denormalize($data['AccessMode'], \Docker\API\Model\ClusterVolumeSpecAccessMode::class, 'json', $context)); + unset($data['AccessMode']); + } elseif (\array_key_exists('AccessMode', $data) && null === $data['AccessMode']) { + $object->setAccessMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('group') && null !== $data->getGroup()) { + $dataArray['Group'] = $data->getGroup(); + } + if ($data->isInitialized('accessMode') && null !== $data->getAccessMode()) { + $dataArray['AccessMode'] = $this->normalizer->normalize($data->getAccessMode(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ClusterVolumeSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/CommitNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/CommitNormalizer.php new file mode 100644 index 000000000..2d51a9bb7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/CommitNormalizer.php @@ -0,0 +1,89 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Expected', $data) && null !== $data['Expected']) { + $object->setExpected($data['Expected']); + unset($data['Expected']); + } elseif (\array_key_exists('Expected', $data) && null === $data['Expected']) { + $object->setExpected(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('expected') && null !== $data->getExpected()) { + $dataArray['Expected'] = $data->getExpected(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Commit::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigNormalizer.php new file mode 100644 index 000000000..7f5620f2e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigNormalizer.php @@ -0,0 +1,116 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\ConfigSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Config::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigSpecNormalizer.php new file mode 100644 index 000000000..e41c10a6e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigSpecNormalizer.php @@ -0,0 +1,115 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Data', $data) && null !== $data['Data']) { + $object->setData($data['Data']); + unset($data['Data']); + } elseif (\array_key_exists('Data', $data) && null === $data['Data']) { + $object->setData(null); + } + if (\array_key_exists('Templating', $data) && null !== $data['Templating']) { + $object->setTemplating($this->denormalizer->denormalize($data['Templating'], \Docker\API\Model\Driver::class, 'json', $context)); + unset($data['Templating']); + } elseif (\array_key_exists('Templating', $data) && null === $data['Templating']) { + $object->setTemplating(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('data') && null !== $data->getData()) { + $dataArray['Data'] = $data->getData(); + } + if ($data->isInitialized('templating') && null !== $data->getTemplating()) { + $dataArray['Templating'] = $this->normalizer->normalize($data->getTemplating(), 'json', $context); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ConfigSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigsCreatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigsCreatePostBodyNormalizer.php new file mode 100644 index 000000000..575ebc610 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ConfigsCreatePostBodyNormalizer.php @@ -0,0 +1,115 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Data', $data) && null !== $data['Data']) { + $object->setData($data['Data']); + unset($data['Data']); + } elseif (\array_key_exists('Data', $data) && null === $data['Data']) { + $object->setData(null); + } + if (\array_key_exists('Templating', $data) && null !== $data['Templating']) { + $object->setTemplating($this->denormalizer->denormalize($data['Templating'], \Docker\API\Model\Driver::class, 'json', $context)); + unset($data['Templating']); + } elseif (\array_key_exists('Templating', $data) && null === $data['Templating']) { + $object->setTemplating(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('data') && null !== $data->getData()) { + $dataArray['Data'] = $data->getData(); + } + if ($data->isInitialized('templating') && null !== $data->getTemplating()) { + $dataArray['Templating'] = $this->normalizer->normalize($data->getTemplating(), 'json', $context); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ConfigsCreatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigExposedPortsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigExposedPortsItemNormalizer.php new file mode 100644 index 000000000..e67f7f087 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigExposedPortsItemNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerConfigExposedPortsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigNormalizer.php new file mode 100644 index 000000000..ab299e955 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigNormalizer.php @@ -0,0 +1,384 @@ +setHostname($data['Hostname']); + unset($data['Hostname']); + } elseif (\array_key_exists('Hostname', $data) && null === $data['Hostname']) { + $object->setHostname(null); + } + if (\array_key_exists('Domainname', $data) && null !== $data['Domainname']) { + $object->setDomainname($data['Domainname']); + unset($data['Domainname']); + } elseif (\array_key_exists('Domainname', $data) && null === $data['Domainname']) { + $object->setDomainname(null); + } + if (\array_key_exists('User', $data) && null !== $data['User']) { + $object->setUser($data['User']); + unset($data['User']); + } elseif (\array_key_exists('User', $data) && null === $data['User']) { + $object->setUser(null); + } + if (\array_key_exists('AttachStdin', $data) && null !== $data['AttachStdin']) { + $object->setAttachStdin($data['AttachStdin']); + unset($data['AttachStdin']); + } elseif (\array_key_exists('AttachStdin', $data) && null === $data['AttachStdin']) { + $object->setAttachStdin(null); + } + if (\array_key_exists('AttachStdout', $data) && null !== $data['AttachStdout']) { + $object->setAttachStdout($data['AttachStdout']); + unset($data['AttachStdout']); + } elseif (\array_key_exists('AttachStdout', $data) && null === $data['AttachStdout']) { + $object->setAttachStdout(null); + } + if (\array_key_exists('AttachStderr', $data) && null !== $data['AttachStderr']) { + $object->setAttachStderr($data['AttachStderr']); + unset($data['AttachStderr']); + } elseif (\array_key_exists('AttachStderr', $data) && null === $data['AttachStderr']) { + $object->setAttachStderr(null); + } + if (\array_key_exists('ExposedPorts', $data) && null !== $data['ExposedPorts']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['ExposedPorts'] as $key => $value) { + $values[$key] = $this->denormalizer->denormalize($value, \Docker\API\Model\ContainerConfigExposedPortsItem::class, 'json', $context); + } + $object->setExposedPorts($values); + unset($data['ExposedPorts']); + } elseif (\array_key_exists('ExposedPorts', $data) && null === $data['ExposedPorts']) { + $object->setExposedPorts(null); + } + if (\array_key_exists('Tty', $data) && null !== $data['Tty']) { + $object->setTty($data['Tty']); + unset($data['Tty']); + } elseif (\array_key_exists('Tty', $data) && null === $data['Tty']) { + $object->setTty(null); + } + if (\array_key_exists('OpenStdin', $data) && null !== $data['OpenStdin']) { + $object->setOpenStdin($data['OpenStdin']); + unset($data['OpenStdin']); + } elseif (\array_key_exists('OpenStdin', $data) && null === $data['OpenStdin']) { + $object->setOpenStdin(null); + } + if (\array_key_exists('StdinOnce', $data) && null !== $data['StdinOnce']) { + $object->setStdinOnce($data['StdinOnce']); + unset($data['StdinOnce']); + } elseif (\array_key_exists('StdinOnce', $data) && null === $data['StdinOnce']) { + $object->setStdinOnce(null); + } + if (\array_key_exists('Env', $data) && null !== $data['Env']) { + $values_1 = []; + foreach ($data['Env'] as $value_1) { + $values_1[] = $value_1; + } + $object->setEnv($values_1); + unset($data['Env']); + } elseif (\array_key_exists('Env', $data) && null === $data['Env']) { + $object->setEnv(null); + } + if (\array_key_exists('Cmd', $data) && null !== $data['Cmd']) { + $values_2 = []; + foreach ($data['Cmd'] as $value_2) { + $values_2[] = $value_2; + } + $object->setCmd($values_2); + unset($data['Cmd']); + } elseif (\array_key_exists('Cmd', $data) && null === $data['Cmd']) { + $object->setCmd(null); + } + if (\array_key_exists('Healthcheck', $data) && null !== $data['Healthcheck']) { + $object->setHealthcheck($this->denormalizer->denormalize($data['Healthcheck'], \Docker\API\Model\HealthConfig::class, 'json', $context)); + unset($data['Healthcheck']); + } elseif (\array_key_exists('Healthcheck', $data) && null === $data['Healthcheck']) { + $object->setHealthcheck(null); + } + if (\array_key_exists('ArgsEscaped', $data) && null !== $data['ArgsEscaped']) { + $object->setArgsEscaped($data['ArgsEscaped']); + unset($data['ArgsEscaped']); + } elseif (\array_key_exists('ArgsEscaped', $data) && null === $data['ArgsEscaped']) { + $object->setArgsEscaped(null); + } + if (\array_key_exists('Image', $data) && null !== $data['Image']) { + $object->setImage($data['Image']); + unset($data['Image']); + } elseif (\array_key_exists('Image', $data) && null === $data['Image']) { + $object->setImage(null); + } + if (\array_key_exists('Volumes', $data) && null !== $data['Volumes']) { + $values_3 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Volumes'] as $key_1 => $value_3) { + $values_3[$key_1] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\ContainerConfigVolumesItem::class, 'json', $context); + } + $object->setVolumes($values_3); + unset($data['Volumes']); + } elseif (\array_key_exists('Volumes', $data) && null === $data['Volumes']) { + $object->setVolumes(null); + } + if (\array_key_exists('WorkingDir', $data) && null !== $data['WorkingDir']) { + $object->setWorkingDir($data['WorkingDir']); + unset($data['WorkingDir']); + } elseif (\array_key_exists('WorkingDir', $data) && null === $data['WorkingDir']) { + $object->setWorkingDir(null); + } + if (\array_key_exists('Entrypoint', $data) && null !== $data['Entrypoint']) { + $values_4 = []; + foreach ($data['Entrypoint'] as $value_4) { + $values_4[] = $value_4; + } + $object->setEntrypoint($values_4); + unset($data['Entrypoint']); + } elseif (\array_key_exists('Entrypoint', $data) && null === $data['Entrypoint']) { + $object->setEntrypoint(null); + } + if (\array_key_exists('NetworkDisabled', $data) && null !== $data['NetworkDisabled']) { + $object->setNetworkDisabled($data['NetworkDisabled']); + unset($data['NetworkDisabled']); + } elseif (\array_key_exists('NetworkDisabled', $data) && null === $data['NetworkDisabled']) { + $object->setNetworkDisabled(null); + } + if (\array_key_exists('MacAddress', $data) && null !== $data['MacAddress']) { + $object->setMacAddress($data['MacAddress']); + unset($data['MacAddress']); + } elseif (\array_key_exists('MacAddress', $data) && null === $data['MacAddress']) { + $object->setMacAddress(null); + } + if (\array_key_exists('OnBuild', $data) && null !== $data['OnBuild']) { + $values_5 = []; + foreach ($data['OnBuild'] as $value_5) { + $values_5[] = $value_5; + } + $object->setOnBuild($values_5); + unset($data['OnBuild']); + } elseif (\array_key_exists('OnBuild', $data) && null === $data['OnBuild']) { + $object->setOnBuild(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_6 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key_2 => $value_6) { + $values_6[$key_2] = $value_6; + } + $object->setLabels($values_6); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('StopSignal', $data) && null !== $data['StopSignal']) { + $object->setStopSignal($data['StopSignal']); + unset($data['StopSignal']); + } elseif (\array_key_exists('StopSignal', $data) && null === $data['StopSignal']) { + $object->setStopSignal(null); + } + if (\array_key_exists('StopTimeout', $data) && null !== $data['StopTimeout']) { + $object->setStopTimeout($data['StopTimeout']); + unset($data['StopTimeout']); + } elseif (\array_key_exists('StopTimeout', $data) && null === $data['StopTimeout']) { + $object->setStopTimeout(null); + } + if (\array_key_exists('Shell', $data) && null !== $data['Shell']) { + $values_7 = []; + foreach ($data['Shell'] as $value_7) { + $values_7[] = $value_7; + } + $object->setShell($values_7); + unset($data['Shell']); + } elseif (\array_key_exists('Shell', $data) && null === $data['Shell']) { + $object->setShell(null); + } + foreach ($data as $key_3 => $value_8) { + if (preg_match('/.*/', (string) $key_3)) { + $object[$key_3] = $value_8; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('hostname') && null !== $data->getHostname()) { + $dataArray['Hostname'] = $data->getHostname(); + } + if ($data->isInitialized('domainname') && null !== $data->getDomainname()) { + $dataArray['Domainname'] = $data->getDomainname(); + } + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['User'] = $data->getUser(); + } + if ($data->isInitialized('attachStdin') && null !== $data->getAttachStdin()) { + $dataArray['AttachStdin'] = $data->getAttachStdin(); + } + if ($data->isInitialized('attachStdout') && null !== $data->getAttachStdout()) { + $dataArray['AttachStdout'] = $data->getAttachStdout(); + } + if ($data->isInitialized('attachStderr') && null !== $data->getAttachStderr()) { + $dataArray['AttachStderr'] = $data->getAttachStderr(); + } + if ($data->isInitialized('exposedPorts') && null !== $data->getExposedPorts()) { + $values = []; + foreach ($data->getExposedPorts() as $key => $value) { + $values[$key] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['ExposedPorts'] = $values; + } + if ($data->isInitialized('tty') && null !== $data->getTty()) { + $dataArray['Tty'] = $data->getTty(); + } + if ($data->isInitialized('openStdin') && null !== $data->getOpenStdin()) { + $dataArray['OpenStdin'] = $data->getOpenStdin(); + } + if ($data->isInitialized('stdinOnce') && null !== $data->getStdinOnce()) { + $dataArray['StdinOnce'] = $data->getStdinOnce(); + } + if ($data->isInitialized('env') && null !== $data->getEnv()) { + $values_1 = []; + foreach ($data->getEnv() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Env'] = $values_1; + } + if ($data->isInitialized('cmd') && null !== $data->getCmd()) { + $values_2 = []; + foreach ($data->getCmd() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Cmd'] = $values_2; + } + if ($data->isInitialized('healthcheck') && null !== $data->getHealthcheck()) { + $dataArray['Healthcheck'] = $this->normalizer->normalize($data->getHealthcheck(), 'json', $context); + } + if ($data->isInitialized('argsEscaped') && null !== $data->getArgsEscaped()) { + $dataArray['ArgsEscaped'] = $data->getArgsEscaped(); + } + if ($data->isInitialized('image') && null !== $data->getImage()) { + $dataArray['Image'] = $data->getImage(); + } + if ($data->isInitialized('volumes') && null !== $data->getVolumes()) { + $values_3 = []; + foreach ($data->getVolumes() as $key_1 => $value_3) { + $values_3[$key_1] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['Volumes'] = $values_3; + } + if ($data->isInitialized('workingDir') && null !== $data->getWorkingDir()) { + $dataArray['WorkingDir'] = $data->getWorkingDir(); + } + if ($data->isInitialized('entrypoint') && null !== $data->getEntrypoint()) { + $values_4 = []; + foreach ($data->getEntrypoint() as $value_4) { + $values_4[] = $value_4; + } + $dataArray['Entrypoint'] = $values_4; + } + if ($data->isInitialized('networkDisabled') && null !== $data->getNetworkDisabled()) { + $dataArray['NetworkDisabled'] = $data->getNetworkDisabled(); + } + if ($data->isInitialized('macAddress') && null !== $data->getMacAddress()) { + $dataArray['MacAddress'] = $data->getMacAddress(); + } + if ($data->isInitialized('onBuild') && null !== $data->getOnBuild()) { + $values_5 = []; + foreach ($data->getOnBuild() as $value_5) { + $values_5[] = $value_5; + } + $dataArray['OnBuild'] = $values_5; + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_6 = []; + foreach ($data->getLabels() as $key_2 => $value_6) { + $values_6[$key_2] = $value_6; + } + $dataArray['Labels'] = $values_6; + } + if ($data->isInitialized('stopSignal') && null !== $data->getStopSignal()) { + $dataArray['StopSignal'] = $data->getStopSignal(); + } + if ($data->isInitialized('stopTimeout') && null !== $data->getStopTimeout()) { + $dataArray['StopTimeout'] = $data->getStopTimeout(); + } + if ($data->isInitialized('shell') && null !== $data->getShell()) { + $values_7 = []; + foreach ($data->getShell() as $value_7) { + $values_7[] = $value_7; + } + $dataArray['Shell'] = $values_7; + } + foreach ($data as $key_3 => $value_8) { + if (preg_match('/.*/', (string) $key_3)) { + $dataArray[$key_3] = $value_8; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigVolumesItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigVolumesItemNormalizer.php new file mode 100644 index 000000000..260757b60 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerConfigVolumesItemNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerConfigVolumesItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerCreateResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerCreateResponseNormalizer.php new file mode 100644 index 000000000..d459ed316 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerCreateResponseNormalizer.php @@ -0,0 +1,93 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Warnings', $data) && null !== $data['Warnings']) { + $values = []; + foreach ($data['Warnings'] as $value) { + $values[] = $value; + } + $object->setWarnings($values); + unset($data['Warnings']); + } elseif (\array_key_exists('Warnings', $data) && null === $data['Warnings']) { + $object->setWarnings(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Id'] = $data->getId(); + $values = []; + foreach ($data->getWarnings() as $value) { + $values[] = $value; + } + $dataArray['Warnings'] = $values; + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerCreateResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerStateNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerStateNormalizer.php new file mode 100644 index 000000000..f2e60922e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerStateNormalizer.php @@ -0,0 +1,194 @@ +setStatus($data['Status']); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('Running', $data) && null !== $data['Running']) { + $object->setRunning($data['Running']); + unset($data['Running']); + } elseif (\array_key_exists('Running', $data) && null === $data['Running']) { + $object->setRunning(null); + } + if (\array_key_exists('Paused', $data) && null !== $data['Paused']) { + $object->setPaused($data['Paused']); + unset($data['Paused']); + } elseif (\array_key_exists('Paused', $data) && null === $data['Paused']) { + $object->setPaused(null); + } + if (\array_key_exists('Restarting', $data) && null !== $data['Restarting']) { + $object->setRestarting($data['Restarting']); + unset($data['Restarting']); + } elseif (\array_key_exists('Restarting', $data) && null === $data['Restarting']) { + $object->setRestarting(null); + } + if (\array_key_exists('OOMKilled', $data) && null !== $data['OOMKilled']) { + $object->setOOMKilled($data['OOMKilled']); + unset($data['OOMKilled']); + } elseif (\array_key_exists('OOMKilled', $data) && null === $data['OOMKilled']) { + $object->setOOMKilled(null); + } + if (\array_key_exists('Dead', $data) && null !== $data['Dead']) { + $object->setDead($data['Dead']); + unset($data['Dead']); + } elseif (\array_key_exists('Dead', $data) && null === $data['Dead']) { + $object->setDead(null); + } + if (\array_key_exists('Pid', $data) && null !== $data['Pid']) { + $object->setPid($data['Pid']); + unset($data['Pid']); + } elseif (\array_key_exists('Pid', $data) && null === $data['Pid']) { + $object->setPid(null); + } + if (\array_key_exists('ExitCode', $data) && null !== $data['ExitCode']) { + $object->setExitCode($data['ExitCode']); + unset($data['ExitCode']); + } elseif (\array_key_exists('ExitCode', $data) && null === $data['ExitCode']) { + $object->setExitCode(null); + } + if (\array_key_exists('Error', $data) && null !== $data['Error']) { + $object->setError($data['Error']); + unset($data['Error']); + } elseif (\array_key_exists('Error', $data) && null === $data['Error']) { + $object->setError(null); + } + if (\array_key_exists('StartedAt', $data) && null !== $data['StartedAt']) { + $object->setStartedAt($data['StartedAt']); + unset($data['StartedAt']); + } elseif (\array_key_exists('StartedAt', $data) && null === $data['StartedAt']) { + $object->setStartedAt(null); + } + if (\array_key_exists('FinishedAt', $data) && null !== $data['FinishedAt']) { + $object->setFinishedAt($data['FinishedAt']); + unset($data['FinishedAt']); + } elseif (\array_key_exists('FinishedAt', $data) && null === $data['FinishedAt']) { + $object->setFinishedAt(null); + } + if (\array_key_exists('Health', $data) && null !== $data['Health']) { + $object->setHealth($this->denormalizer->denormalize($data['Health'], \Docker\API\Model\Health::class, 'json', $context)); + unset($data['Health']); + } elseif (\array_key_exists('Health', $data) && null === $data['Health']) { + $object->setHealth(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['Status'] = $data->getStatus(); + } + if ($data->isInitialized('running') && null !== $data->getRunning()) { + $dataArray['Running'] = $data->getRunning(); + } + if ($data->isInitialized('paused') && null !== $data->getPaused()) { + $dataArray['Paused'] = $data->getPaused(); + } + if ($data->isInitialized('restarting') && null !== $data->getRestarting()) { + $dataArray['Restarting'] = $data->getRestarting(); + } + if ($data->isInitialized('oOMKilled') && null !== $data->getOOMKilled()) { + $dataArray['OOMKilled'] = $data->getOOMKilled(); + } + if ($data->isInitialized('dead') && null !== $data->getDead()) { + $dataArray['Dead'] = $data->getDead(); + } + if ($data->isInitialized('pid') && null !== $data->getPid()) { + $dataArray['Pid'] = $data->getPid(); + } + if ($data->isInitialized('exitCode') && null !== $data->getExitCode()) { + $dataArray['ExitCode'] = $data->getExitCode(); + } + if ($data->isInitialized('error') && null !== $data->getError()) { + $dataArray['Error'] = $data->getError(); + } + if ($data->isInitialized('startedAt') && null !== $data->getStartedAt()) { + $dataArray['StartedAt'] = $data->getStartedAt(); + } + if ($data->isInitialized('finishedAt') && null !== $data->getFinishedAt()) { + $dataArray['FinishedAt'] = $data->getFinishedAt(); + } + if ($data->isInitialized('health') && null !== $data->getHealth()) { + $dataArray['Health'] = $this->normalizer->normalize($data->getHealth(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerState::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerStatusNormalizer.php new file mode 100644 index 000000000..c7b81c3ae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerStatusNormalizer.php @@ -0,0 +1,98 @@ +setContainerID($data['ContainerID']); + unset($data['ContainerID']); + } elseif (\array_key_exists('ContainerID', $data) && null === $data['ContainerID']) { + $object->setContainerID(null); + } + if (\array_key_exists('PID', $data) && null !== $data['PID']) { + $object->setPID($data['PID']); + unset($data['PID']); + } elseif (\array_key_exists('PID', $data) && null === $data['PID']) { + $object->setPID(null); + } + if (\array_key_exists('ExitCode', $data) && null !== $data['ExitCode']) { + $object->setExitCode($data['ExitCode']); + unset($data['ExitCode']); + } elseif (\array_key_exists('ExitCode', $data) && null === $data['ExitCode']) { + $object->setExitCode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('containerID') && null !== $data->getContainerID()) { + $dataArray['ContainerID'] = $data->getContainerID(); + } + if ($data->isInitialized('pID') && null !== $data->getPID()) { + $dataArray['PID'] = $data->getPID(); + } + if ($data->isInitialized('exitCode') && null !== $data->getExitCode()) { + $dataArray['ExitCode'] = $data->getExitCode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryHostConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryHostConfigNormalizer.php new file mode 100644 index 000000000..a98a873eb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryHostConfigNormalizer.php @@ -0,0 +1,80 @@ +setNetworkMode($data['NetworkMode']); + unset($data['NetworkMode']); + } elseif (\array_key_exists('NetworkMode', $data) && null === $data['NetworkMode']) { + $object->setNetworkMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('networkMode') && null !== $data->getNetworkMode()) { + $dataArray['NetworkMode'] = $data->getNetworkMode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerSummaryHostConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryNetworkSettingsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryNetworkSettingsNormalizer.php new file mode 100644 index 000000000..f10dc4dba --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryNetworkSettingsNormalizer.php @@ -0,0 +1,88 @@ + $value) { + $values[$key] = $this->denormalizer->denormalize($value, \Docker\API\Model\EndpointSettings::class, 'json', $context); + } + $object->setNetworks($values); + unset($data['Networks']); + } elseif (\array_key_exists('Networks', $data) && null === $data['Networks']) { + $object->setNetworks(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('networks') && null !== $data->getNetworks()) { + $values = []; + foreach ($data->getNetworks() as $key => $value) { + $values[$key] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Networks'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerSummaryNetworkSettings::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryNormalizer.php new file mode 100644 index 000000000..1eb0fdb6f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerSummaryNormalizer.php @@ -0,0 +1,238 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Names', $data) && null !== $data['Names']) { + $values = []; + foreach ($data['Names'] as $value) { + $values[] = $value; + } + $object->setNames($values); + unset($data['Names']); + } elseif (\array_key_exists('Names', $data) && null === $data['Names']) { + $object->setNames(null); + } + if (\array_key_exists('Image', $data) && null !== $data['Image']) { + $object->setImage($data['Image']); + unset($data['Image']); + } elseif (\array_key_exists('Image', $data) && null === $data['Image']) { + $object->setImage(null); + } + if (\array_key_exists('ImageID', $data) && null !== $data['ImageID']) { + $object->setImageID($data['ImageID']); + unset($data['ImageID']); + } elseif (\array_key_exists('ImageID', $data) && null === $data['ImageID']) { + $object->setImageID(null); + } + if (\array_key_exists('Command', $data) && null !== $data['Command']) { + $object->setCommand($data['Command']); + unset($data['Command']); + } elseif (\array_key_exists('Command', $data) && null === $data['Command']) { + $object->setCommand(null); + } + if (\array_key_exists('Created', $data) && null !== $data['Created']) { + $object->setCreated($data['Created']); + unset($data['Created']); + } elseif (\array_key_exists('Created', $data) && null === $data['Created']) { + $object->setCreated(null); + } + if (\array_key_exists('Ports', $data) && null !== $data['Ports']) { + $values_1 = []; + foreach ($data['Ports'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\Port::class, 'json', $context); + } + $object->setPorts($values_1); + unset($data['Ports']); + } elseif (\array_key_exists('Ports', $data) && null === $data['Ports']) { + $object->setPorts(null); + } + if (\array_key_exists('SizeRw', $data) && null !== $data['SizeRw']) { + $object->setSizeRw($data['SizeRw']); + unset($data['SizeRw']); + } elseif (\array_key_exists('SizeRw', $data) && null === $data['SizeRw']) { + $object->setSizeRw(null); + } + if (\array_key_exists('SizeRootFs', $data) && null !== $data['SizeRootFs']) { + $object->setSizeRootFs($data['SizeRootFs']); + unset($data['SizeRootFs']); + } elseif (\array_key_exists('SizeRootFs', $data) && null === $data['SizeRootFs']) { + $object->setSizeRootFs(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_2 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value_2) { + $values_2[$key] = $value_2; + } + $object->setLabels($values_2); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('State', $data) && null !== $data['State']) { + $object->setState($data['State']); + unset($data['State']); + } elseif (\array_key_exists('State', $data) && null === $data['State']) { + $object->setState(null); + } + if (\array_key_exists('Status', $data) && null !== $data['Status']) { + $object->setStatus($data['Status']); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('HostConfig', $data) && null !== $data['HostConfig']) { + $object->setHostConfig($this->denormalizer->denormalize($data['HostConfig'], \Docker\API\Model\ContainerSummaryHostConfig::class, 'json', $context)); + unset($data['HostConfig']); + } elseif (\array_key_exists('HostConfig', $data) && null === $data['HostConfig']) { + $object->setHostConfig(null); + } + if (\array_key_exists('NetworkSettings', $data) && null !== $data['NetworkSettings']) { + $object->setNetworkSettings($this->denormalizer->denormalize($data['NetworkSettings'], \Docker\API\Model\ContainerSummaryNetworkSettings::class, 'json', $context)); + unset($data['NetworkSettings']); + } elseif (\array_key_exists('NetworkSettings', $data) && null === $data['NetworkSettings']) { + $object->setNetworkSettings(null); + } + if (\array_key_exists('Mounts', $data) && null !== $data['Mounts']) { + $values_3 = []; + foreach ($data['Mounts'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\MountPoint::class, 'json', $context); + } + $object->setMounts($values_3); + unset($data['Mounts']); + } elseif (\array_key_exists('Mounts', $data) && null === $data['Mounts']) { + $object->setMounts(null); + } + foreach ($data as $key_1 => $value_4) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['Id'] = $data->getId(); + } + if ($data->isInitialized('names') && null !== $data->getNames()) { + $values = []; + foreach ($data->getNames() as $value) { + $values[] = $value; + } + $dataArray['Names'] = $values; + } + if ($data->isInitialized('image') && null !== $data->getImage()) { + $dataArray['Image'] = $data->getImage(); + } + if ($data->isInitialized('imageID') && null !== $data->getImageID()) { + $dataArray['ImageID'] = $data->getImageID(); + } + if ($data->isInitialized('command') && null !== $data->getCommand()) { + $dataArray['Command'] = $data->getCommand(); + } + if ($data->isInitialized('created') && null !== $data->getCreated()) { + $dataArray['Created'] = $data->getCreated(); + } + if ($data->isInitialized('ports') && null !== $data->getPorts()) { + $values_1 = []; + foreach ($data->getPorts() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Ports'] = $values_1; + } + if ($data->isInitialized('sizeRw') && null !== $data->getSizeRw()) { + $dataArray['SizeRw'] = $data->getSizeRw(); + } + if ($data->isInitialized('sizeRootFs') && null !== $data->getSizeRootFs()) { + $dataArray['SizeRootFs'] = $data->getSizeRootFs(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_2 = []; + foreach ($data->getLabels() as $key => $value_2) { + $values_2[$key] = $value_2; + } + $dataArray['Labels'] = $values_2; + } + if ($data->isInitialized('state') && null !== $data->getState()) { + $dataArray['State'] = $data->getState(); + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['Status'] = $data->getStatus(); + } + if ($data->isInitialized('hostConfig') && null !== $data->getHostConfig()) { + $dataArray['HostConfig'] = $this->normalizer->normalize($data->getHostConfig(), 'json', $context); + } + if ($data->isInitialized('networkSettings') && null !== $data->getNetworkSettings()) { + $dataArray['NetworkSettings'] = $this->normalizer->normalize($data->getNetworkSettings(), 'json', $context); + } + if ($data->isInitialized('mounts') && null !== $data->getMounts()) { + $values_3 = []; + foreach ($data->getMounts() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['Mounts'] = $values_3; + } + foreach ($data as $key_1 => $value_4) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerSummary::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerWaitExitErrorNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerWaitExitErrorNormalizer.php new file mode 100644 index 000000000..bc33a5bf7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerWaitExitErrorNormalizer.php @@ -0,0 +1,80 @@ +setMessage($data['Message']); + unset($data['Message']); + } elseif (\array_key_exists('Message', $data) && null === $data['Message']) { + $object->setMessage(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('message') && null !== $data->getMessage()) { + $dataArray['Message'] = $data->getMessage(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerWaitExitError::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerWaitResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerWaitResponseNormalizer.php new file mode 100644 index 000000000..5fda7d679 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainerWaitResponseNormalizer.php @@ -0,0 +1,87 @@ +setStatusCode($data['StatusCode']); + unset($data['StatusCode']); + } elseif (\array_key_exists('StatusCode', $data) && null === $data['StatusCode']) { + $object->setStatusCode(null); + } + if (\array_key_exists('Error', $data) && null !== $data['Error']) { + $object->setError($this->denormalizer->denormalize($data['Error'], \Docker\API\Model\ContainerWaitExitError::class, 'json', $context)); + unset($data['Error']); + } elseif (\array_key_exists('Error', $data) && null === $data['Error']) { + $object->setError(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['StatusCode'] = $data->getStatusCode(); + if ($data->isInitialized('error') && null !== $data->getError()) { + $dataArray['Error'] = $this->normalizer->normalize($data->getError(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainerWaitResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersCreatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersCreatePostBodyNormalizer.php new file mode 100644 index 000000000..279678d30 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersCreatePostBodyNormalizer.php @@ -0,0 +1,402 @@ +setHostname($data['Hostname']); + unset($data['Hostname']); + } elseif (\array_key_exists('Hostname', $data) && null === $data['Hostname']) { + $object->setHostname(null); + } + if (\array_key_exists('Domainname', $data) && null !== $data['Domainname']) { + $object->setDomainname($data['Domainname']); + unset($data['Domainname']); + } elseif (\array_key_exists('Domainname', $data) && null === $data['Domainname']) { + $object->setDomainname(null); + } + if (\array_key_exists('User', $data) && null !== $data['User']) { + $object->setUser($data['User']); + unset($data['User']); + } elseif (\array_key_exists('User', $data) && null === $data['User']) { + $object->setUser(null); + } + if (\array_key_exists('AttachStdin', $data) && null !== $data['AttachStdin']) { + $object->setAttachStdin($data['AttachStdin']); + unset($data['AttachStdin']); + } elseif (\array_key_exists('AttachStdin', $data) && null === $data['AttachStdin']) { + $object->setAttachStdin(null); + } + if (\array_key_exists('AttachStdout', $data) && null !== $data['AttachStdout']) { + $object->setAttachStdout($data['AttachStdout']); + unset($data['AttachStdout']); + } elseif (\array_key_exists('AttachStdout', $data) && null === $data['AttachStdout']) { + $object->setAttachStdout(null); + } + if (\array_key_exists('AttachStderr', $data) && null !== $data['AttachStderr']) { + $object->setAttachStderr($data['AttachStderr']); + unset($data['AttachStderr']); + } elseif (\array_key_exists('AttachStderr', $data) && null === $data['AttachStderr']) { + $object->setAttachStderr(null); + } + if (\array_key_exists('ExposedPorts', $data) && null !== $data['ExposedPorts']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['ExposedPorts'] as $key => $value) { + $values[$key] = $this->denormalizer->denormalize($value, \Docker\API\Model\ContainerConfigExposedPortsItem::class, 'json', $context); + } + $object->setExposedPorts($values); + unset($data['ExposedPorts']); + } elseif (\array_key_exists('ExposedPorts', $data) && null === $data['ExposedPorts']) { + $object->setExposedPorts(null); + } + if (\array_key_exists('Tty', $data) && null !== $data['Tty']) { + $object->setTty($data['Tty']); + unset($data['Tty']); + } elseif (\array_key_exists('Tty', $data) && null === $data['Tty']) { + $object->setTty(null); + } + if (\array_key_exists('OpenStdin', $data) && null !== $data['OpenStdin']) { + $object->setOpenStdin($data['OpenStdin']); + unset($data['OpenStdin']); + } elseif (\array_key_exists('OpenStdin', $data) && null === $data['OpenStdin']) { + $object->setOpenStdin(null); + } + if (\array_key_exists('StdinOnce', $data) && null !== $data['StdinOnce']) { + $object->setStdinOnce($data['StdinOnce']); + unset($data['StdinOnce']); + } elseif (\array_key_exists('StdinOnce', $data) && null === $data['StdinOnce']) { + $object->setStdinOnce(null); + } + if (\array_key_exists('Env', $data) && null !== $data['Env']) { + $values_1 = []; + foreach ($data['Env'] as $value_1) { + $values_1[] = $value_1; + } + $object->setEnv($values_1); + unset($data['Env']); + } elseif (\array_key_exists('Env', $data) && null === $data['Env']) { + $object->setEnv(null); + } + if (\array_key_exists('Cmd', $data) && null !== $data['Cmd']) { + $values_2 = []; + foreach ($data['Cmd'] as $value_2) { + $values_2[] = $value_2; + } + $object->setCmd($values_2); + unset($data['Cmd']); + } elseif (\array_key_exists('Cmd', $data) && null === $data['Cmd']) { + $object->setCmd(null); + } + if (\array_key_exists('Healthcheck', $data) && null !== $data['Healthcheck']) { + $object->setHealthcheck($this->denormalizer->denormalize($data['Healthcheck'], \Docker\API\Model\HealthConfig::class, 'json', $context)); + unset($data['Healthcheck']); + } elseif (\array_key_exists('Healthcheck', $data) && null === $data['Healthcheck']) { + $object->setHealthcheck(null); + } + if (\array_key_exists('ArgsEscaped', $data) && null !== $data['ArgsEscaped']) { + $object->setArgsEscaped($data['ArgsEscaped']); + unset($data['ArgsEscaped']); + } elseif (\array_key_exists('ArgsEscaped', $data) && null === $data['ArgsEscaped']) { + $object->setArgsEscaped(null); + } + if (\array_key_exists('Image', $data) && null !== $data['Image']) { + $object->setImage($data['Image']); + unset($data['Image']); + } elseif (\array_key_exists('Image', $data) && null === $data['Image']) { + $object->setImage(null); + } + if (\array_key_exists('Volumes', $data) && null !== $data['Volumes']) { + $values_3 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Volumes'] as $key_1 => $value_3) { + $values_3[$key_1] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\ContainerConfigVolumesItem::class, 'json', $context); + } + $object->setVolumes($values_3); + unset($data['Volumes']); + } elseif (\array_key_exists('Volumes', $data) && null === $data['Volumes']) { + $object->setVolumes(null); + } + if (\array_key_exists('WorkingDir', $data) && null !== $data['WorkingDir']) { + $object->setWorkingDir($data['WorkingDir']); + unset($data['WorkingDir']); + } elseif (\array_key_exists('WorkingDir', $data) && null === $data['WorkingDir']) { + $object->setWorkingDir(null); + } + if (\array_key_exists('Entrypoint', $data) && null !== $data['Entrypoint']) { + $values_4 = []; + foreach ($data['Entrypoint'] as $value_4) { + $values_4[] = $value_4; + } + $object->setEntrypoint($values_4); + unset($data['Entrypoint']); + } elseif (\array_key_exists('Entrypoint', $data) && null === $data['Entrypoint']) { + $object->setEntrypoint(null); + } + if (\array_key_exists('NetworkDisabled', $data) && null !== $data['NetworkDisabled']) { + $object->setNetworkDisabled($data['NetworkDisabled']); + unset($data['NetworkDisabled']); + } elseif (\array_key_exists('NetworkDisabled', $data) && null === $data['NetworkDisabled']) { + $object->setNetworkDisabled(null); + } + if (\array_key_exists('MacAddress', $data) && null !== $data['MacAddress']) { + $object->setMacAddress($data['MacAddress']); + unset($data['MacAddress']); + } elseif (\array_key_exists('MacAddress', $data) && null === $data['MacAddress']) { + $object->setMacAddress(null); + } + if (\array_key_exists('OnBuild', $data) && null !== $data['OnBuild']) { + $values_5 = []; + foreach ($data['OnBuild'] as $value_5) { + $values_5[] = $value_5; + } + $object->setOnBuild($values_5); + unset($data['OnBuild']); + } elseif (\array_key_exists('OnBuild', $data) && null === $data['OnBuild']) { + $object->setOnBuild(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_6 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key_2 => $value_6) { + $values_6[$key_2] = $value_6; + } + $object->setLabels($values_6); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('StopSignal', $data) && null !== $data['StopSignal']) { + $object->setStopSignal($data['StopSignal']); + unset($data['StopSignal']); + } elseif (\array_key_exists('StopSignal', $data) && null === $data['StopSignal']) { + $object->setStopSignal(null); + } + if (\array_key_exists('StopTimeout', $data) && null !== $data['StopTimeout']) { + $object->setStopTimeout($data['StopTimeout']); + unset($data['StopTimeout']); + } elseif (\array_key_exists('StopTimeout', $data) && null === $data['StopTimeout']) { + $object->setStopTimeout(null); + } + if (\array_key_exists('Shell', $data) && null !== $data['Shell']) { + $values_7 = []; + foreach ($data['Shell'] as $value_7) { + $values_7[] = $value_7; + } + $object->setShell($values_7); + unset($data['Shell']); + } elseif (\array_key_exists('Shell', $data) && null === $data['Shell']) { + $object->setShell(null); + } + if (\array_key_exists('HostConfig', $data) && null !== $data['HostConfig']) { + $object->setHostConfig($this->denormalizer->denormalize($data['HostConfig'], \Docker\API\Model\HostConfig::class, 'json', $context)); + unset($data['HostConfig']); + } elseif (\array_key_exists('HostConfig', $data) && null === $data['HostConfig']) { + $object->setHostConfig(null); + } + if (\array_key_exists('NetworkingConfig', $data) && null !== $data['NetworkingConfig']) { + $object->setNetworkingConfig($this->denormalizer->denormalize($data['NetworkingConfig'], \Docker\API\Model\NetworkingConfig::class, 'json', $context)); + unset($data['NetworkingConfig']); + } elseif (\array_key_exists('NetworkingConfig', $data) && null === $data['NetworkingConfig']) { + $object->setNetworkingConfig(null); + } + foreach ($data as $key_3 => $value_8) { + if (preg_match('/.*/', (string) $key_3)) { + $object[$key_3] = $value_8; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('hostname') && null !== $data->getHostname()) { + $dataArray['Hostname'] = $data->getHostname(); + } + if ($data->isInitialized('domainname') && null !== $data->getDomainname()) { + $dataArray['Domainname'] = $data->getDomainname(); + } + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['User'] = $data->getUser(); + } + if ($data->isInitialized('attachStdin') && null !== $data->getAttachStdin()) { + $dataArray['AttachStdin'] = $data->getAttachStdin(); + } + if ($data->isInitialized('attachStdout') && null !== $data->getAttachStdout()) { + $dataArray['AttachStdout'] = $data->getAttachStdout(); + } + if ($data->isInitialized('attachStderr') && null !== $data->getAttachStderr()) { + $dataArray['AttachStderr'] = $data->getAttachStderr(); + } + if ($data->isInitialized('exposedPorts') && null !== $data->getExposedPorts()) { + $values = []; + foreach ($data->getExposedPorts() as $key => $value) { + $values[$key] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['ExposedPorts'] = $values; + } + if ($data->isInitialized('tty') && null !== $data->getTty()) { + $dataArray['Tty'] = $data->getTty(); + } + if ($data->isInitialized('openStdin') && null !== $data->getOpenStdin()) { + $dataArray['OpenStdin'] = $data->getOpenStdin(); + } + if ($data->isInitialized('stdinOnce') && null !== $data->getStdinOnce()) { + $dataArray['StdinOnce'] = $data->getStdinOnce(); + } + if ($data->isInitialized('env') && null !== $data->getEnv()) { + $values_1 = []; + foreach ($data->getEnv() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Env'] = $values_1; + } + if ($data->isInitialized('cmd') && null !== $data->getCmd()) { + $values_2 = []; + foreach ($data->getCmd() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Cmd'] = $values_2; + } + if ($data->isInitialized('healthcheck') && null !== $data->getHealthcheck()) { + $dataArray['Healthcheck'] = $this->normalizer->normalize($data->getHealthcheck(), 'json', $context); + } + if ($data->isInitialized('argsEscaped') && null !== $data->getArgsEscaped()) { + $dataArray['ArgsEscaped'] = $data->getArgsEscaped(); + } + if ($data->isInitialized('image') && null !== $data->getImage()) { + $dataArray['Image'] = $data->getImage(); + } + if ($data->isInitialized('volumes') && null !== $data->getVolumes()) { + $values_3 = []; + foreach ($data->getVolumes() as $key_1 => $value_3) { + $values_3[$key_1] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['Volumes'] = $values_3; + } + if ($data->isInitialized('workingDir') && null !== $data->getWorkingDir()) { + $dataArray['WorkingDir'] = $data->getWorkingDir(); + } + if ($data->isInitialized('entrypoint') && null !== $data->getEntrypoint()) { + $values_4 = []; + foreach ($data->getEntrypoint() as $value_4) { + $values_4[] = $value_4; + } + $dataArray['Entrypoint'] = $values_4; + } + if ($data->isInitialized('networkDisabled') && null !== $data->getNetworkDisabled()) { + $dataArray['NetworkDisabled'] = $data->getNetworkDisabled(); + } + if ($data->isInitialized('macAddress') && null !== $data->getMacAddress()) { + $dataArray['MacAddress'] = $data->getMacAddress(); + } + if ($data->isInitialized('onBuild') && null !== $data->getOnBuild()) { + $values_5 = []; + foreach ($data->getOnBuild() as $value_5) { + $values_5[] = $value_5; + } + $dataArray['OnBuild'] = $values_5; + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_6 = []; + foreach ($data->getLabels() as $key_2 => $value_6) { + $values_6[$key_2] = $value_6; + } + $dataArray['Labels'] = $values_6; + } + if ($data->isInitialized('stopSignal') && null !== $data->getStopSignal()) { + $dataArray['StopSignal'] = $data->getStopSignal(); + } + if ($data->isInitialized('stopTimeout') && null !== $data->getStopTimeout()) { + $dataArray['StopTimeout'] = $data->getStopTimeout(); + } + if ($data->isInitialized('shell') && null !== $data->getShell()) { + $values_7 = []; + foreach ($data->getShell() as $value_7) { + $values_7[] = $value_7; + } + $dataArray['Shell'] = $values_7; + } + if ($data->isInitialized('hostConfig') && null !== $data->getHostConfig()) { + $dataArray['HostConfig'] = $this->normalizer->normalize($data->getHostConfig(), 'json', $context); + } + if ($data->isInitialized('networkingConfig') && null !== $data->getNetworkingConfig()) { + $dataArray['NetworkingConfig'] = $this->normalizer->normalize($data->getNetworkingConfig(), 'json', $context); + } + foreach ($data as $key_3 => $value_8) { + if (preg_match('/.*/', (string) $key_3)) { + $dataArray[$key_3] = $value_8; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersCreatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdExecPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdExecPostBodyNormalizer.php new file mode 100644 index 000000000..d1a8cb8de --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdExecPostBodyNormalizer.php @@ -0,0 +1,209 @@ +setAttachStdin($data['AttachStdin']); + unset($data['AttachStdin']); + } elseif (\array_key_exists('AttachStdin', $data) && null === $data['AttachStdin']) { + $object->setAttachStdin(null); + } + if (\array_key_exists('AttachStdout', $data) && null !== $data['AttachStdout']) { + $object->setAttachStdout($data['AttachStdout']); + unset($data['AttachStdout']); + } elseif (\array_key_exists('AttachStdout', $data) && null === $data['AttachStdout']) { + $object->setAttachStdout(null); + } + if (\array_key_exists('AttachStderr', $data) && null !== $data['AttachStderr']) { + $object->setAttachStderr($data['AttachStderr']); + unset($data['AttachStderr']); + } elseif (\array_key_exists('AttachStderr', $data) && null === $data['AttachStderr']) { + $object->setAttachStderr(null); + } + if (\array_key_exists('ConsoleSize', $data) && null !== $data['ConsoleSize']) { + $values = []; + foreach ($data['ConsoleSize'] as $value) { + $values[] = $value; + } + $object->setConsoleSize($values); + unset($data['ConsoleSize']); + } elseif (\array_key_exists('ConsoleSize', $data) && null === $data['ConsoleSize']) { + $object->setConsoleSize(null); + } + if (\array_key_exists('DetachKeys', $data) && null !== $data['DetachKeys']) { + $object->setDetachKeys($data['DetachKeys']); + unset($data['DetachKeys']); + } elseif (\array_key_exists('DetachKeys', $data) && null === $data['DetachKeys']) { + $object->setDetachKeys(null); + } + if (\array_key_exists('Tty', $data) && null !== $data['Tty']) { + $object->setTty($data['Tty']); + unset($data['Tty']); + } elseif (\array_key_exists('Tty', $data) && null === $data['Tty']) { + $object->setTty(null); + } + if (\array_key_exists('Env', $data) && null !== $data['Env']) { + $values_1 = []; + foreach ($data['Env'] as $value_1) { + $values_1[] = $value_1; + } + $object->setEnv($values_1); + unset($data['Env']); + } elseif (\array_key_exists('Env', $data) && null === $data['Env']) { + $object->setEnv(null); + } + if (\array_key_exists('Cmd', $data) && null !== $data['Cmd']) { + $values_2 = []; + foreach ($data['Cmd'] as $value_2) { + $values_2[] = $value_2; + } + $object->setCmd($values_2); + unset($data['Cmd']); + } elseif (\array_key_exists('Cmd', $data) && null === $data['Cmd']) { + $object->setCmd(null); + } + if (\array_key_exists('Privileged', $data) && null !== $data['Privileged']) { + $object->setPrivileged($data['Privileged']); + unset($data['Privileged']); + } elseif (\array_key_exists('Privileged', $data) && null === $data['Privileged']) { + $object->setPrivileged(null); + } + if (\array_key_exists('User', $data) && null !== $data['User']) { + $object->setUser($data['User']); + unset($data['User']); + } elseif (\array_key_exists('User', $data) && null === $data['User']) { + $object->setUser(null); + } + if (\array_key_exists('WorkingDir', $data) && null !== $data['WorkingDir']) { + $object->setWorkingDir($data['WorkingDir']); + unset($data['WorkingDir']); + } elseif (\array_key_exists('WorkingDir', $data) && null === $data['WorkingDir']) { + $object->setWorkingDir(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('attachStdin') && null !== $data->getAttachStdin()) { + $dataArray['AttachStdin'] = $data->getAttachStdin(); + } + if ($data->isInitialized('attachStdout') && null !== $data->getAttachStdout()) { + $dataArray['AttachStdout'] = $data->getAttachStdout(); + } + if ($data->isInitialized('attachStderr') && null !== $data->getAttachStderr()) { + $dataArray['AttachStderr'] = $data->getAttachStderr(); + } + if ($data->isInitialized('consoleSize') && null !== $data->getConsoleSize()) { + $values = []; + foreach ($data->getConsoleSize() as $value) { + $values[] = $value; + } + $dataArray['ConsoleSize'] = $values; + } + if ($data->isInitialized('detachKeys') && null !== $data->getDetachKeys()) { + $dataArray['DetachKeys'] = $data->getDetachKeys(); + } + if ($data->isInitialized('tty') && null !== $data->getTty()) { + $dataArray['Tty'] = $data->getTty(); + } + if ($data->isInitialized('env') && null !== $data->getEnv()) { + $values_1 = []; + foreach ($data->getEnv() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Env'] = $values_1; + } + if ($data->isInitialized('cmd') && null !== $data->getCmd()) { + $values_2 = []; + foreach ($data->getCmd() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Cmd'] = $values_2; + } + if ($data->isInitialized('privileged') && null !== $data->getPrivileged()) { + $dataArray['Privileged'] = $data->getPrivileged(); + } + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['User'] = $data->getUser(); + } + if ($data->isInitialized('workingDir') && null !== $data->getWorkingDir()) { + $dataArray['WorkingDir'] = $data->getWorkingDir(); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersIdExecPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdJsonGetResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdJsonGetResponse200Normalizer.php new file mode 100644 index 000000000..d1ba4f175 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdJsonGetResponse200Normalizer.php @@ -0,0 +1,320 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Created', $data) && null !== $data['Created']) { + $object->setCreated($data['Created']); + unset($data['Created']); + } elseif (\array_key_exists('Created', $data) && null === $data['Created']) { + $object->setCreated(null); + } + if (\array_key_exists('Path', $data) && null !== $data['Path']) { + $object->setPath($data['Path']); + unset($data['Path']); + } elseif (\array_key_exists('Path', $data) && null === $data['Path']) { + $object->setPath(null); + } + if (\array_key_exists('Args', $data) && null !== $data['Args']) { + $values = []; + foreach ($data['Args'] as $value) { + $values[] = $value; + } + $object->setArgs($values); + unset($data['Args']); + } elseif (\array_key_exists('Args', $data) && null === $data['Args']) { + $object->setArgs(null); + } + if (\array_key_exists('State', $data) && null !== $data['State']) { + $object->setState($this->denormalizer->denormalize($data['State'], \Docker\API\Model\ContainerState::class, 'json', $context)); + unset($data['State']); + } elseif (\array_key_exists('State', $data) && null === $data['State']) { + $object->setState(null); + } + if (\array_key_exists('Image', $data) && null !== $data['Image']) { + $object->setImage($data['Image']); + unset($data['Image']); + } elseif (\array_key_exists('Image', $data) && null === $data['Image']) { + $object->setImage(null); + } + if (\array_key_exists('ResolvConfPath', $data) && null !== $data['ResolvConfPath']) { + $object->setResolvConfPath($data['ResolvConfPath']); + unset($data['ResolvConfPath']); + } elseif (\array_key_exists('ResolvConfPath', $data) && null === $data['ResolvConfPath']) { + $object->setResolvConfPath(null); + } + if (\array_key_exists('HostnamePath', $data) && null !== $data['HostnamePath']) { + $object->setHostnamePath($data['HostnamePath']); + unset($data['HostnamePath']); + } elseif (\array_key_exists('HostnamePath', $data) && null === $data['HostnamePath']) { + $object->setHostnamePath(null); + } + if (\array_key_exists('HostsPath', $data) && null !== $data['HostsPath']) { + $object->setHostsPath($data['HostsPath']); + unset($data['HostsPath']); + } elseif (\array_key_exists('HostsPath', $data) && null === $data['HostsPath']) { + $object->setHostsPath(null); + } + if (\array_key_exists('LogPath', $data) && null !== $data['LogPath']) { + $object->setLogPath($data['LogPath']); + unset($data['LogPath']); + } elseif (\array_key_exists('LogPath', $data) && null === $data['LogPath']) { + $object->setLogPath(null); + } + if (\array_key_exists('Name', $data) && null !== $data['Name']) { + $object->setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('RestartCount', $data) && null !== $data['RestartCount']) { + $object->setRestartCount($data['RestartCount']); + unset($data['RestartCount']); + } elseif (\array_key_exists('RestartCount', $data) && null === $data['RestartCount']) { + $object->setRestartCount(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Platform', $data) && null !== $data['Platform']) { + $object->setPlatform($data['Platform']); + unset($data['Platform']); + } elseif (\array_key_exists('Platform', $data) && null === $data['Platform']) { + $object->setPlatform(null); + } + if (\array_key_exists('MountLabel', $data) && null !== $data['MountLabel']) { + $object->setMountLabel($data['MountLabel']); + unset($data['MountLabel']); + } elseif (\array_key_exists('MountLabel', $data) && null === $data['MountLabel']) { + $object->setMountLabel(null); + } + if (\array_key_exists('ProcessLabel', $data) && null !== $data['ProcessLabel']) { + $object->setProcessLabel($data['ProcessLabel']); + unset($data['ProcessLabel']); + } elseif (\array_key_exists('ProcessLabel', $data) && null === $data['ProcessLabel']) { + $object->setProcessLabel(null); + } + if (\array_key_exists('AppArmorProfile', $data) && null !== $data['AppArmorProfile']) { + $object->setAppArmorProfile($data['AppArmorProfile']); + unset($data['AppArmorProfile']); + } elseif (\array_key_exists('AppArmorProfile', $data) && null === $data['AppArmorProfile']) { + $object->setAppArmorProfile(null); + } + if (\array_key_exists('ExecIDs', $data) && null !== $data['ExecIDs']) { + $values_1 = []; + foreach ($data['ExecIDs'] as $value_1) { + $values_1[] = $value_1; + } + $object->setExecIDs($values_1); + unset($data['ExecIDs']); + } elseif (\array_key_exists('ExecIDs', $data) && null === $data['ExecIDs']) { + $object->setExecIDs(null); + } + if (\array_key_exists('HostConfig', $data) && null !== $data['HostConfig']) { + $object->setHostConfig($this->denormalizer->denormalize($data['HostConfig'], \Docker\API\Model\HostConfig::class, 'json', $context)); + unset($data['HostConfig']); + } elseif (\array_key_exists('HostConfig', $data) && null === $data['HostConfig']) { + $object->setHostConfig(null); + } + if (\array_key_exists('GraphDriver', $data) && null !== $data['GraphDriver']) { + $object->setGraphDriver($this->denormalizer->denormalize($data['GraphDriver'], \Docker\API\Model\GraphDriverData::class, 'json', $context)); + unset($data['GraphDriver']); + } elseif (\array_key_exists('GraphDriver', $data) && null === $data['GraphDriver']) { + $object->setGraphDriver(null); + } + if (\array_key_exists('SizeRw', $data) && null !== $data['SizeRw']) { + $object->setSizeRw($data['SizeRw']); + unset($data['SizeRw']); + } elseif (\array_key_exists('SizeRw', $data) && null === $data['SizeRw']) { + $object->setSizeRw(null); + } + if (\array_key_exists('SizeRootFs', $data) && null !== $data['SizeRootFs']) { + $object->setSizeRootFs($data['SizeRootFs']); + unset($data['SizeRootFs']); + } elseif (\array_key_exists('SizeRootFs', $data) && null === $data['SizeRootFs']) { + $object->setSizeRootFs(null); + } + if (\array_key_exists('Mounts', $data) && null !== $data['Mounts']) { + $values_2 = []; + foreach ($data['Mounts'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\MountPoint::class, 'json', $context); + } + $object->setMounts($values_2); + unset($data['Mounts']); + } elseif (\array_key_exists('Mounts', $data) && null === $data['Mounts']) { + $object->setMounts(null); + } + if (\array_key_exists('Config', $data) && null !== $data['Config']) { + $object->setConfig($this->denormalizer->denormalize($data['Config'], \Docker\API\Model\ContainerConfig::class, 'json', $context)); + unset($data['Config']); + } elseif (\array_key_exists('Config', $data) && null === $data['Config']) { + $object->setConfig(null); + } + if (\array_key_exists('NetworkSettings', $data) && null !== $data['NetworkSettings']) { + $object->setNetworkSettings($this->denormalizer->denormalize($data['NetworkSettings'], \Docker\API\Model\NetworkSettings::class, 'json', $context)); + unset($data['NetworkSettings']); + } elseif (\array_key_exists('NetworkSettings', $data) && null === $data['NetworkSettings']) { + $object->setNetworkSettings(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['Id'] = $data->getId(); + } + if ($data->isInitialized('created') && null !== $data->getCreated()) { + $dataArray['Created'] = $data->getCreated(); + } + if ($data->isInitialized('path') && null !== $data->getPath()) { + $dataArray['Path'] = $data->getPath(); + } + if ($data->isInitialized('args') && null !== $data->getArgs()) { + $values = []; + foreach ($data->getArgs() as $value) { + $values[] = $value; + } + $dataArray['Args'] = $values; + } + if ($data->isInitialized('state') && null !== $data->getState()) { + $dataArray['State'] = $this->normalizer->normalize($data->getState(), 'json', $context); + } + if ($data->isInitialized('image') && null !== $data->getImage()) { + $dataArray['Image'] = $data->getImage(); + } + if ($data->isInitialized('resolvConfPath') && null !== $data->getResolvConfPath()) { + $dataArray['ResolvConfPath'] = $data->getResolvConfPath(); + } + if ($data->isInitialized('hostnamePath') && null !== $data->getHostnamePath()) { + $dataArray['HostnamePath'] = $data->getHostnamePath(); + } + if ($data->isInitialized('hostsPath') && null !== $data->getHostsPath()) { + $dataArray['HostsPath'] = $data->getHostsPath(); + } + if ($data->isInitialized('logPath') && null !== $data->getLogPath()) { + $dataArray['LogPath'] = $data->getLogPath(); + } + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('restartCount') && null !== $data->getRestartCount()) { + $dataArray['RestartCount'] = $data->getRestartCount(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('platform') && null !== $data->getPlatform()) { + $dataArray['Platform'] = $data->getPlatform(); + } + if ($data->isInitialized('mountLabel') && null !== $data->getMountLabel()) { + $dataArray['MountLabel'] = $data->getMountLabel(); + } + if ($data->isInitialized('processLabel') && null !== $data->getProcessLabel()) { + $dataArray['ProcessLabel'] = $data->getProcessLabel(); + } + if ($data->isInitialized('appArmorProfile') && null !== $data->getAppArmorProfile()) { + $dataArray['AppArmorProfile'] = $data->getAppArmorProfile(); + } + if ($data->isInitialized('execIDs') && null !== $data->getExecIDs()) { + $values_1 = []; + foreach ($data->getExecIDs() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['ExecIDs'] = $values_1; + } + if ($data->isInitialized('hostConfig') && null !== $data->getHostConfig()) { + $dataArray['HostConfig'] = $this->normalizer->normalize($data->getHostConfig(), 'json', $context); + } + if ($data->isInitialized('graphDriver') && null !== $data->getGraphDriver()) { + $dataArray['GraphDriver'] = $this->normalizer->normalize($data->getGraphDriver(), 'json', $context); + } + if ($data->isInitialized('sizeRw') && null !== $data->getSizeRw()) { + $dataArray['SizeRw'] = $data->getSizeRw(); + } + if ($data->isInitialized('sizeRootFs') && null !== $data->getSizeRootFs()) { + $dataArray['SizeRootFs'] = $data->getSizeRootFs(); + } + if ($data->isInitialized('mounts') && null !== $data->getMounts()) { + $values_2 = []; + foreach ($data->getMounts() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['Mounts'] = $values_2; + } + if ($data->isInitialized('config') && null !== $data->getConfig()) { + $dataArray['Config'] = $this->normalizer->normalize($data->getConfig(), 'json', $context); + } + if ($data->isInitialized('networkSettings') && null !== $data->getNetworkSettings()) { + $dataArray['NetworkSettings'] = $this->normalizer->normalize($data->getNetworkSettings(), 'json', $context); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersIdJsonGetResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdTopGetJsonResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdTopGetJsonResponse200Normalizer.php new file mode 100644 index 000000000..2ca0049d1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdTopGetJsonResponse200Normalizer.php @@ -0,0 +1,113 @@ +setTitles($values); + unset($data['Titles']); + } elseif (\array_key_exists('Titles', $data) && null === $data['Titles']) { + $object->setTitles(null); + } + if (\array_key_exists('Processes', $data) && null !== $data['Processes']) { + $values_1 = []; + foreach ($data['Processes'] as $value_1) { + $values_2 = []; + foreach ($value_1 as $value_2) { + $values_2[] = $value_2; + } + $values_1[] = $values_2; + } + $object->setProcesses($values_1); + unset($data['Processes']); + } elseif (\array_key_exists('Processes', $data) && null === $data['Processes']) { + $object->setProcesses(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('titles') && null !== $data->getTitles()) { + $values = []; + foreach ($data->getTitles() as $value) { + $values[] = $value; + } + $dataArray['Titles'] = $values; + } + if ($data->isInitialized('processes') && null !== $data->getProcesses()) { + $values_1 = []; + foreach ($data->getProcesses() as $value_1) { + $values_2 = []; + foreach ($value_1 as $value_2) { + $values_2[] = $value_2; + } + $values_1[] = $values_2; + } + $dataArray['Processes'] = $values_1; + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersIdTopGetJsonResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdTopGetTextplainResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdTopGetTextplainResponse200Normalizer.php new file mode 100644 index 000000000..c5dda2af0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdTopGetTextplainResponse200Normalizer.php @@ -0,0 +1,113 @@ +setTitles($values); + unset($data['Titles']); + } elseif (\array_key_exists('Titles', $data) && null === $data['Titles']) { + $object->setTitles(null); + } + if (\array_key_exists('Processes', $data) && null !== $data['Processes']) { + $values_1 = []; + foreach ($data['Processes'] as $value_1) { + $values_2 = []; + foreach ($value_1 as $value_2) { + $values_2[] = $value_2; + } + $values_1[] = $values_2; + } + $object->setProcesses($values_1); + unset($data['Processes']); + } elseif (\array_key_exists('Processes', $data) && null === $data['Processes']) { + $object->setProcesses(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('titles') && null !== $data->getTitles()) { + $values = []; + foreach ($data->getTitles() as $value) { + $values[] = $value; + } + $dataArray['Titles'] = $values; + } + if ($data->isInitialized('processes') && null !== $data->getProcesses()) { + $values_1 = []; + foreach ($data->getProcesses() as $value_1) { + $values_2 = []; + foreach ($value_1 as $value_2) { + $values_2[] = $value_2; + } + $values_1[] = $values_2; + } + $dataArray['Processes'] = $values_1; + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersIdTopGetTextplainResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdUpdatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdUpdatePostBodyNormalizer.php new file mode 100644 index 000000000..9ba353188 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdUpdatePostBodyNormalizer.php @@ -0,0 +1,437 @@ +setCpuShares($data['CpuShares']); + unset($data['CpuShares']); + } elseif (\array_key_exists('CpuShares', $data) && null === $data['CpuShares']) { + $object->setCpuShares(null); + } + if (\array_key_exists('Memory', $data) && null !== $data['Memory']) { + $object->setMemory($data['Memory']); + unset($data['Memory']); + } elseif (\array_key_exists('Memory', $data) && null === $data['Memory']) { + $object->setMemory(null); + } + if (\array_key_exists('CgroupParent', $data) && null !== $data['CgroupParent']) { + $object->setCgroupParent($data['CgroupParent']); + unset($data['CgroupParent']); + } elseif (\array_key_exists('CgroupParent', $data) && null === $data['CgroupParent']) { + $object->setCgroupParent(null); + } + if (\array_key_exists('BlkioWeight', $data) && null !== $data['BlkioWeight']) { + $object->setBlkioWeight($data['BlkioWeight']); + unset($data['BlkioWeight']); + } elseif (\array_key_exists('BlkioWeight', $data) && null === $data['BlkioWeight']) { + $object->setBlkioWeight(null); + } + if (\array_key_exists('BlkioWeightDevice', $data) && null !== $data['BlkioWeightDevice']) { + $values = []; + foreach ($data['BlkioWeightDevice'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ResourcesBlkioWeightDeviceItem::class, 'json', $context); + } + $object->setBlkioWeightDevice($values); + unset($data['BlkioWeightDevice']); + } elseif (\array_key_exists('BlkioWeightDevice', $data) && null === $data['BlkioWeightDevice']) { + $object->setBlkioWeightDevice(null); + } + if (\array_key_exists('BlkioDeviceReadBps', $data) && null !== $data['BlkioDeviceReadBps']) { + $values_1 = []; + foreach ($data['BlkioDeviceReadBps'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceReadBps($values_1); + unset($data['BlkioDeviceReadBps']); + } elseif (\array_key_exists('BlkioDeviceReadBps', $data) && null === $data['BlkioDeviceReadBps']) { + $object->setBlkioDeviceReadBps(null); + } + if (\array_key_exists('BlkioDeviceWriteBps', $data) && null !== $data['BlkioDeviceWriteBps']) { + $values_2 = []; + foreach ($data['BlkioDeviceWriteBps'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceWriteBps($values_2); + unset($data['BlkioDeviceWriteBps']); + } elseif (\array_key_exists('BlkioDeviceWriteBps', $data) && null === $data['BlkioDeviceWriteBps']) { + $object->setBlkioDeviceWriteBps(null); + } + if (\array_key_exists('BlkioDeviceReadIOps', $data) && null !== $data['BlkioDeviceReadIOps']) { + $values_3 = []; + foreach ($data['BlkioDeviceReadIOps'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceReadIOps($values_3); + unset($data['BlkioDeviceReadIOps']); + } elseif (\array_key_exists('BlkioDeviceReadIOps', $data) && null === $data['BlkioDeviceReadIOps']) { + $object->setBlkioDeviceReadIOps(null); + } + if (\array_key_exists('BlkioDeviceWriteIOps', $data) && null !== $data['BlkioDeviceWriteIOps']) { + $values_4 = []; + foreach ($data['BlkioDeviceWriteIOps'] as $value_4) { + $values_4[] = $this->denormalizer->denormalize($value_4, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceWriteIOps($values_4); + unset($data['BlkioDeviceWriteIOps']); + } elseif (\array_key_exists('BlkioDeviceWriteIOps', $data) && null === $data['BlkioDeviceWriteIOps']) { + $object->setBlkioDeviceWriteIOps(null); + } + if (\array_key_exists('CpuPeriod', $data) && null !== $data['CpuPeriod']) { + $object->setCpuPeriod($data['CpuPeriod']); + unset($data['CpuPeriod']); + } elseif (\array_key_exists('CpuPeriod', $data) && null === $data['CpuPeriod']) { + $object->setCpuPeriod(null); + } + if (\array_key_exists('CpuQuota', $data) && null !== $data['CpuQuota']) { + $object->setCpuQuota($data['CpuQuota']); + unset($data['CpuQuota']); + } elseif (\array_key_exists('CpuQuota', $data) && null === $data['CpuQuota']) { + $object->setCpuQuota(null); + } + if (\array_key_exists('CpuRealtimePeriod', $data) && null !== $data['CpuRealtimePeriod']) { + $object->setCpuRealtimePeriod($data['CpuRealtimePeriod']); + unset($data['CpuRealtimePeriod']); + } elseif (\array_key_exists('CpuRealtimePeriod', $data) && null === $data['CpuRealtimePeriod']) { + $object->setCpuRealtimePeriod(null); + } + if (\array_key_exists('CpuRealtimeRuntime', $data) && null !== $data['CpuRealtimeRuntime']) { + $object->setCpuRealtimeRuntime($data['CpuRealtimeRuntime']); + unset($data['CpuRealtimeRuntime']); + } elseif (\array_key_exists('CpuRealtimeRuntime', $data) && null === $data['CpuRealtimeRuntime']) { + $object->setCpuRealtimeRuntime(null); + } + if (\array_key_exists('CpusetCpus', $data) && null !== $data['CpusetCpus']) { + $object->setCpusetCpus($data['CpusetCpus']); + unset($data['CpusetCpus']); + } elseif (\array_key_exists('CpusetCpus', $data) && null === $data['CpusetCpus']) { + $object->setCpusetCpus(null); + } + if (\array_key_exists('CpusetMems', $data) && null !== $data['CpusetMems']) { + $object->setCpusetMems($data['CpusetMems']); + unset($data['CpusetMems']); + } elseif (\array_key_exists('CpusetMems', $data) && null === $data['CpusetMems']) { + $object->setCpusetMems(null); + } + if (\array_key_exists('Devices', $data) && null !== $data['Devices']) { + $values_5 = []; + foreach ($data['Devices'] as $value_5) { + $values_5[] = $this->denormalizer->denormalize($value_5, \Docker\API\Model\DeviceMapping::class, 'json', $context); + } + $object->setDevices($values_5); + unset($data['Devices']); + } elseif (\array_key_exists('Devices', $data) && null === $data['Devices']) { + $object->setDevices(null); + } + if (\array_key_exists('DeviceCgroupRules', $data) && null !== $data['DeviceCgroupRules']) { + $values_6 = []; + foreach ($data['DeviceCgroupRules'] as $value_6) { + $values_6[] = $value_6; + } + $object->setDeviceCgroupRules($values_6); + unset($data['DeviceCgroupRules']); + } elseif (\array_key_exists('DeviceCgroupRules', $data) && null === $data['DeviceCgroupRules']) { + $object->setDeviceCgroupRules(null); + } + if (\array_key_exists('DeviceRequests', $data) && null !== $data['DeviceRequests']) { + $values_7 = []; + foreach ($data['DeviceRequests'] as $value_7) { + $values_7[] = $this->denormalizer->denormalize($value_7, \Docker\API\Model\DeviceRequest::class, 'json', $context); + } + $object->setDeviceRequests($values_7); + unset($data['DeviceRequests']); + } elseif (\array_key_exists('DeviceRequests', $data) && null === $data['DeviceRequests']) { + $object->setDeviceRequests(null); + } + if (\array_key_exists('KernelMemoryTCP', $data) && null !== $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP($data['KernelMemoryTCP']); + unset($data['KernelMemoryTCP']); + } elseif (\array_key_exists('KernelMemoryTCP', $data) && null === $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP(null); + } + if (\array_key_exists('MemoryReservation', $data) && null !== $data['MemoryReservation']) { + $object->setMemoryReservation($data['MemoryReservation']); + unset($data['MemoryReservation']); + } elseif (\array_key_exists('MemoryReservation', $data) && null === $data['MemoryReservation']) { + $object->setMemoryReservation(null); + } + if (\array_key_exists('MemorySwap', $data) && null !== $data['MemorySwap']) { + $object->setMemorySwap($data['MemorySwap']); + unset($data['MemorySwap']); + } elseif (\array_key_exists('MemorySwap', $data) && null === $data['MemorySwap']) { + $object->setMemorySwap(null); + } + if (\array_key_exists('MemorySwappiness', $data) && null !== $data['MemorySwappiness']) { + $object->setMemorySwappiness($data['MemorySwappiness']); + unset($data['MemorySwappiness']); + } elseif (\array_key_exists('MemorySwappiness', $data) && null === $data['MemorySwappiness']) { + $object->setMemorySwappiness(null); + } + if (\array_key_exists('NanoCpus', $data) && null !== $data['NanoCpus']) { + $object->setNanoCpus($data['NanoCpus']); + unset($data['NanoCpus']); + } elseif (\array_key_exists('NanoCpus', $data) && null === $data['NanoCpus']) { + $object->setNanoCpus(null); + } + if (\array_key_exists('OomKillDisable', $data) && null !== $data['OomKillDisable']) { + $object->setOomKillDisable($data['OomKillDisable']); + unset($data['OomKillDisable']); + } elseif (\array_key_exists('OomKillDisable', $data) && null === $data['OomKillDisable']) { + $object->setOomKillDisable(null); + } + if (\array_key_exists('Init', $data) && null !== $data['Init']) { + $object->setInit($data['Init']); + unset($data['Init']); + } elseif (\array_key_exists('Init', $data) && null === $data['Init']) { + $object->setInit(null); + } + if (\array_key_exists('PidsLimit', $data) && null !== $data['PidsLimit']) { + $object->setPidsLimit($data['PidsLimit']); + unset($data['PidsLimit']); + } elseif (\array_key_exists('PidsLimit', $data) && null === $data['PidsLimit']) { + $object->setPidsLimit(null); + } + if (\array_key_exists('Ulimits', $data) && null !== $data['Ulimits']) { + $values_8 = []; + foreach ($data['Ulimits'] as $value_8) { + $values_8[] = $this->denormalizer->denormalize($value_8, \Docker\API\Model\ResourcesUlimitsItem::class, 'json', $context); + } + $object->setUlimits($values_8); + unset($data['Ulimits']); + } elseif (\array_key_exists('Ulimits', $data) && null === $data['Ulimits']) { + $object->setUlimits(null); + } + if (\array_key_exists('CpuCount', $data) && null !== $data['CpuCount']) { + $object->setCpuCount($data['CpuCount']); + unset($data['CpuCount']); + } elseif (\array_key_exists('CpuCount', $data) && null === $data['CpuCount']) { + $object->setCpuCount(null); + } + if (\array_key_exists('CpuPercent', $data) && null !== $data['CpuPercent']) { + $object->setCpuPercent($data['CpuPercent']); + unset($data['CpuPercent']); + } elseif (\array_key_exists('CpuPercent', $data) && null === $data['CpuPercent']) { + $object->setCpuPercent(null); + } + if (\array_key_exists('IOMaximumIOps', $data) && null !== $data['IOMaximumIOps']) { + $object->setIOMaximumIOps($data['IOMaximumIOps']); + unset($data['IOMaximumIOps']); + } elseif (\array_key_exists('IOMaximumIOps', $data) && null === $data['IOMaximumIOps']) { + $object->setIOMaximumIOps(null); + } + if (\array_key_exists('IOMaximumBandwidth', $data) && null !== $data['IOMaximumBandwidth']) { + $object->setIOMaximumBandwidth($data['IOMaximumBandwidth']); + unset($data['IOMaximumBandwidth']); + } elseif (\array_key_exists('IOMaximumBandwidth', $data) && null === $data['IOMaximumBandwidth']) { + $object->setIOMaximumBandwidth(null); + } + if (\array_key_exists('RestartPolicy', $data) && null !== $data['RestartPolicy']) { + $object->setRestartPolicy($this->denormalizer->denormalize($data['RestartPolicy'], \Docker\API\Model\RestartPolicy::class, 'json', $context)); + unset($data['RestartPolicy']); + } elseif (\array_key_exists('RestartPolicy', $data) && null === $data['RestartPolicy']) { + $object->setRestartPolicy(null); + } + foreach ($data as $key => $value_9) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_9; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('cpuShares') && null !== $data->getCpuShares()) { + $dataArray['CpuShares'] = $data->getCpuShares(); + } + if ($data->isInitialized('memory') && null !== $data->getMemory()) { + $dataArray['Memory'] = $data->getMemory(); + } + if ($data->isInitialized('cgroupParent') && null !== $data->getCgroupParent()) { + $dataArray['CgroupParent'] = $data->getCgroupParent(); + } + if ($data->isInitialized('blkioWeight') && null !== $data->getBlkioWeight()) { + $dataArray['BlkioWeight'] = $data->getBlkioWeight(); + } + if ($data->isInitialized('blkioWeightDevice') && null !== $data->getBlkioWeightDevice()) { + $values = []; + foreach ($data->getBlkioWeightDevice() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['BlkioWeightDevice'] = $values; + } + if ($data->isInitialized('blkioDeviceReadBps') && null !== $data->getBlkioDeviceReadBps()) { + $values_1 = []; + foreach ($data->getBlkioDeviceReadBps() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['BlkioDeviceReadBps'] = $values_1; + } + if ($data->isInitialized('blkioDeviceWriteBps') && null !== $data->getBlkioDeviceWriteBps()) { + $values_2 = []; + foreach ($data->getBlkioDeviceWriteBps() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['BlkioDeviceWriteBps'] = $values_2; + } + if ($data->isInitialized('blkioDeviceReadIOps') && null !== $data->getBlkioDeviceReadIOps()) { + $values_3 = []; + foreach ($data->getBlkioDeviceReadIOps() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['BlkioDeviceReadIOps'] = $values_3; + } + if ($data->isInitialized('blkioDeviceWriteIOps') && null !== $data->getBlkioDeviceWriteIOps()) { + $values_4 = []; + foreach ($data->getBlkioDeviceWriteIOps() as $value_4) { + $values_4[] = $this->normalizer->normalize($value_4, 'json', $context); + } + $dataArray['BlkioDeviceWriteIOps'] = $values_4; + } + if ($data->isInitialized('cpuPeriod') && null !== $data->getCpuPeriod()) { + $dataArray['CpuPeriod'] = $data->getCpuPeriod(); + } + if ($data->isInitialized('cpuQuota') && null !== $data->getCpuQuota()) { + $dataArray['CpuQuota'] = $data->getCpuQuota(); + } + if ($data->isInitialized('cpuRealtimePeriod') && null !== $data->getCpuRealtimePeriod()) { + $dataArray['CpuRealtimePeriod'] = $data->getCpuRealtimePeriod(); + } + if ($data->isInitialized('cpuRealtimeRuntime') && null !== $data->getCpuRealtimeRuntime()) { + $dataArray['CpuRealtimeRuntime'] = $data->getCpuRealtimeRuntime(); + } + if ($data->isInitialized('cpusetCpus') && null !== $data->getCpusetCpus()) { + $dataArray['CpusetCpus'] = $data->getCpusetCpus(); + } + if ($data->isInitialized('cpusetMems') && null !== $data->getCpusetMems()) { + $dataArray['CpusetMems'] = $data->getCpusetMems(); + } + if ($data->isInitialized('devices') && null !== $data->getDevices()) { + $values_5 = []; + foreach ($data->getDevices() as $value_5) { + $values_5[] = $this->normalizer->normalize($value_5, 'json', $context); + } + $dataArray['Devices'] = $values_5; + } + if ($data->isInitialized('deviceCgroupRules') && null !== $data->getDeviceCgroupRules()) { + $values_6 = []; + foreach ($data->getDeviceCgroupRules() as $value_6) { + $values_6[] = $value_6; + } + $dataArray['DeviceCgroupRules'] = $values_6; + } + if ($data->isInitialized('deviceRequests') && null !== $data->getDeviceRequests()) { + $values_7 = []; + foreach ($data->getDeviceRequests() as $value_7) { + $values_7[] = $this->normalizer->normalize($value_7, 'json', $context); + } + $dataArray['DeviceRequests'] = $values_7; + } + if ($data->isInitialized('kernelMemoryTCP') && null !== $data->getKernelMemoryTCP()) { + $dataArray['KernelMemoryTCP'] = $data->getKernelMemoryTCP(); + } + if ($data->isInitialized('memoryReservation') && null !== $data->getMemoryReservation()) { + $dataArray['MemoryReservation'] = $data->getMemoryReservation(); + } + if ($data->isInitialized('memorySwap') && null !== $data->getMemorySwap()) { + $dataArray['MemorySwap'] = $data->getMemorySwap(); + } + if ($data->isInitialized('memorySwappiness') && null !== $data->getMemorySwappiness()) { + $dataArray['MemorySwappiness'] = $data->getMemorySwappiness(); + } + if ($data->isInitialized('nanoCpus') && null !== $data->getNanoCpus()) { + $dataArray['NanoCpus'] = $data->getNanoCpus(); + } + if ($data->isInitialized('oomKillDisable') && null !== $data->getOomKillDisable()) { + $dataArray['OomKillDisable'] = $data->getOomKillDisable(); + } + if ($data->isInitialized('init') && null !== $data->getInit()) { + $dataArray['Init'] = $data->getInit(); + } + if ($data->isInitialized('pidsLimit') && null !== $data->getPidsLimit()) { + $dataArray['PidsLimit'] = $data->getPidsLimit(); + } + if ($data->isInitialized('ulimits') && null !== $data->getUlimits()) { + $values_8 = []; + foreach ($data->getUlimits() as $value_8) { + $values_8[] = $this->normalizer->normalize($value_8, 'json', $context); + } + $dataArray['Ulimits'] = $values_8; + } + if ($data->isInitialized('cpuCount') && null !== $data->getCpuCount()) { + $dataArray['CpuCount'] = $data->getCpuCount(); + } + if ($data->isInitialized('cpuPercent') && null !== $data->getCpuPercent()) { + $dataArray['CpuPercent'] = $data->getCpuPercent(); + } + if ($data->isInitialized('iOMaximumIOps') && null !== $data->getIOMaximumIOps()) { + $dataArray['IOMaximumIOps'] = $data->getIOMaximumIOps(); + } + if ($data->isInitialized('iOMaximumBandwidth') && null !== $data->getIOMaximumBandwidth()) { + $dataArray['IOMaximumBandwidth'] = $data->getIOMaximumBandwidth(); + } + if ($data->isInitialized('restartPolicy') && null !== $data->getRestartPolicy()) { + $dataArray['RestartPolicy'] = $this->normalizer->normalize($data->getRestartPolicy(), 'json', $context); + } + foreach ($data as $key => $value_9) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_9; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersIdUpdatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdUpdatePostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdUpdatePostResponse200Normalizer.php new file mode 100644 index 000000000..ccc819bbc --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersIdUpdatePostResponse200Normalizer.php @@ -0,0 +1,88 @@ +setWarnings($values); + unset($data['Warnings']); + } elseif (\array_key_exists('Warnings', $data) && null === $data['Warnings']) { + $object->setWarnings(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('warnings') && null !== $data->getWarnings()) { + $values = []; + foreach ($data->getWarnings() as $value) { + $values[] = $value; + } + $dataArray['Warnings'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersIdUpdatePostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersPrunePostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersPrunePostResponse200Normalizer.php new file mode 100644 index 000000000..6109dab54 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ContainersPrunePostResponse200Normalizer.php @@ -0,0 +1,97 @@ +setContainersDeleted($values); + unset($data['ContainersDeleted']); + } elseif (\array_key_exists('ContainersDeleted', $data) && null === $data['ContainersDeleted']) { + $object->setContainersDeleted(null); + } + if (\array_key_exists('SpaceReclaimed', $data) && null !== $data['SpaceReclaimed']) { + $object->setSpaceReclaimed($data['SpaceReclaimed']); + unset($data['SpaceReclaimed']); + } elseif (\array_key_exists('SpaceReclaimed', $data) && null === $data['SpaceReclaimed']) { + $object->setSpaceReclaimed(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('containersDeleted') && null !== $data->getContainersDeleted()) { + $values = []; + foreach ($data->getContainersDeleted() as $value) { + $values[] = $value; + } + $dataArray['ContainersDeleted'] = $values; + } + if ($data->isInitialized('spaceReclaimed') && null !== $data->getSpaceReclaimed()) { + $dataArray['SpaceReclaimed'] = $data->getSpaceReclaimed(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ContainersPrunePostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/CreateImageInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/CreateImageInfoNormalizer.php new file mode 100644 index 000000000..16bbcdb02 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/CreateImageInfoNormalizer.php @@ -0,0 +1,125 @@ +setId($data['id']); + unset($data['id']); + } elseif (\array_key_exists('id', $data) && null === $data['id']) { + $object->setId(null); + } + if (\array_key_exists('error', $data) && null !== $data['error']) { + $object->setError($data['error']); + unset($data['error']); + } elseif (\array_key_exists('error', $data) && null === $data['error']) { + $object->setError(null); + } + if (\array_key_exists('errorDetail', $data) && null !== $data['errorDetail']) { + $object->setErrorDetail($this->denormalizer->denormalize($data['errorDetail'], \Docker\API\Model\ErrorDetail::class, 'json', $context)); + unset($data['errorDetail']); + } elseif (\array_key_exists('errorDetail', $data) && null === $data['errorDetail']) { + $object->setErrorDetail(null); + } + if (\array_key_exists('status', $data) && null !== $data['status']) { + $object->setStatus($data['status']); + unset($data['status']); + } elseif (\array_key_exists('status', $data) && null === $data['status']) { + $object->setStatus(null); + } + if (\array_key_exists('progress', $data) && null !== $data['progress']) { + $object->setProgress($data['progress']); + unset($data['progress']); + } elseif (\array_key_exists('progress', $data) && null === $data['progress']) { + $object->setProgress(null); + } + if (\array_key_exists('progressDetail', $data) && null !== $data['progressDetail']) { + $object->setProgressDetail($this->denormalizer->denormalize($data['progressDetail'], \Docker\API\Model\ProgressDetail::class, 'json', $context)); + unset($data['progressDetail']); + } elseif (\array_key_exists('progressDetail', $data) && null === $data['progressDetail']) { + $object->setProgressDetail(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['id'] = $data->getId(); + } + if ($data->isInitialized('error') && null !== $data->getError()) { + $dataArray['error'] = $data->getError(); + } + if ($data->isInitialized('errorDetail') && null !== $data->getErrorDetail()) { + $dataArray['errorDetail'] = $this->normalizer->normalize($data->getErrorDetail(), 'json', $context); + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['status'] = $data->getStatus(); + } + if ($data->isInitialized('progress') && null !== $data->getProgress()) { + $dataArray['progress'] = $data->getProgress(); + } + if ($data->isInitialized('progressDetail') && null !== $data->getProgressDetail()) { + $dataArray['progressDetail'] = $this->normalizer->normalize($data->getProgressDetail(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\CreateImageInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/DeviceMappingNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DeviceMappingNormalizer.php new file mode 100644 index 000000000..05e695135 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DeviceMappingNormalizer.php @@ -0,0 +1,98 @@ +setPathOnHost($data['PathOnHost']); + unset($data['PathOnHost']); + } elseif (\array_key_exists('PathOnHost', $data) && null === $data['PathOnHost']) { + $object->setPathOnHost(null); + } + if (\array_key_exists('PathInContainer', $data) && null !== $data['PathInContainer']) { + $object->setPathInContainer($data['PathInContainer']); + unset($data['PathInContainer']); + } elseif (\array_key_exists('PathInContainer', $data) && null === $data['PathInContainer']) { + $object->setPathInContainer(null); + } + if (\array_key_exists('CgroupPermissions', $data) && null !== $data['CgroupPermissions']) { + $object->setCgroupPermissions($data['CgroupPermissions']); + unset($data['CgroupPermissions']); + } elseif (\array_key_exists('CgroupPermissions', $data) && null === $data['CgroupPermissions']) { + $object->setCgroupPermissions(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('pathOnHost') && null !== $data->getPathOnHost()) { + $dataArray['PathOnHost'] = $data->getPathOnHost(); + } + if ($data->isInitialized('pathInContainer') && null !== $data->getPathInContainer()) { + $dataArray['PathInContainer'] = $data->getPathInContainer(); + } + if ($data->isInitialized('cgroupPermissions') && null !== $data->getCgroupPermissions()) { + $dataArray['CgroupPermissions'] = $data->getCgroupPermissions(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\DeviceMapping::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/DeviceRequestNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DeviceRequestNormalizer.php new file mode 100644 index 000000000..6b31cfe17 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DeviceRequestNormalizer.php @@ -0,0 +1,148 @@ +setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Count', $data) && null !== $data['Count']) { + $object->setCount($data['Count']); + unset($data['Count']); + } elseif (\array_key_exists('Count', $data) && null === $data['Count']) { + $object->setCount(null); + } + if (\array_key_exists('DeviceIDs', $data) && null !== $data['DeviceIDs']) { + $values = []; + foreach ($data['DeviceIDs'] as $value) { + $values[] = $value; + } + $object->setDeviceIDs($values); + unset($data['DeviceIDs']); + } elseif (\array_key_exists('DeviceIDs', $data) && null === $data['DeviceIDs']) { + $object->setDeviceIDs(null); + } + if (\array_key_exists('Capabilities', $data) && null !== $data['Capabilities']) { + $values_1 = []; + foreach ($data['Capabilities'] as $value_1) { + $values_2 = []; + foreach ($value_1 as $value_2) { + $values_2[] = $value_2; + } + $values_1[] = $values_2; + } + $object->setCapabilities($values_1); + unset($data['Capabilities']); + } elseif (\array_key_exists('Capabilities', $data) && null === $data['Capabilities']) { + $object->setCapabilities(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values_3 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value_3) { + $values_3[$key] = $value_3; + } + $object->setOptions($values_3); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key_1 => $value_4) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('count') && null !== $data->getCount()) { + $dataArray['Count'] = $data->getCount(); + } + if ($data->isInitialized('deviceIDs') && null !== $data->getDeviceIDs()) { + $values = []; + foreach ($data->getDeviceIDs() as $value) { + $values[] = $value; + } + $dataArray['DeviceIDs'] = $values; + } + if ($data->isInitialized('capabilities') && null !== $data->getCapabilities()) { + $values_1 = []; + foreach ($data->getCapabilities() as $value_1) { + $values_2 = []; + foreach ($value_1 as $value_2) { + $values_2[] = $value_2; + } + $values_1[] = $values_2; + } + $dataArray['Capabilities'] = $values_1; + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values_3 = []; + foreach ($data->getOptions() as $key => $value_3) { + $values_3[$key] = $value_3; + } + $dataArray['Options'] = $values_3; + } + foreach ($data as $key_1 => $value_4) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\DeviceRequest::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/DistributionInspectNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DistributionInspectNormalizer.php new file mode 100644 index 000000000..f3bff572c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DistributionInspectNormalizer.php @@ -0,0 +1,93 @@ +setDescriptor($this->denormalizer->denormalize($data['Descriptor'], \Docker\API\Model\OCIDescriptor::class, 'json', $context)); + unset($data['Descriptor']); + } elseif (\array_key_exists('Descriptor', $data) && null === $data['Descriptor']) { + $object->setDescriptor(null); + } + if (\array_key_exists('Platforms', $data) && null !== $data['Platforms']) { + $values = []; + foreach ($data['Platforms'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\OCIPlatform::class, 'json', $context); + } + $object->setPlatforms($values); + unset($data['Platforms']); + } elseif (\array_key_exists('Platforms', $data) && null === $data['Platforms']) { + $object->setPlatforms(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Descriptor'] = $this->normalizer->normalize($data->getDescriptor(), 'json', $context); + $values = []; + foreach ($data->getPlatforms() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Platforms'] = $values; + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\DistributionInspect::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/DriverNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DriverNormalizer.php new file mode 100644 index 000000000..0a2e1bfbe --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/DriverNormalizer.php @@ -0,0 +1,95 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value) { + $values[$key] = $value; + } + $object->setOptions($values); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values = []; + foreach ($data->getOptions() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Options'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Driver::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointIPAMConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointIPAMConfigNormalizer.php new file mode 100644 index 000000000..a17dd5744 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointIPAMConfigNormalizer.php @@ -0,0 +1,106 @@ +setIPv4Address($data['IPv4Address']); + unset($data['IPv4Address']); + } elseif (\array_key_exists('IPv4Address', $data) && null === $data['IPv4Address']) { + $object->setIPv4Address(null); + } + if (\array_key_exists('IPv6Address', $data) && null !== $data['IPv6Address']) { + $object->setIPv6Address($data['IPv6Address']); + unset($data['IPv6Address']); + } elseif (\array_key_exists('IPv6Address', $data) && null === $data['IPv6Address']) { + $object->setIPv6Address(null); + } + if (\array_key_exists('LinkLocalIPs', $data) && null !== $data['LinkLocalIPs']) { + $values = []; + foreach ($data['LinkLocalIPs'] as $value) { + $values[] = $value; + } + $object->setLinkLocalIPs($values); + unset($data['LinkLocalIPs']); + } elseif (\array_key_exists('LinkLocalIPs', $data) && null === $data['LinkLocalIPs']) { + $object->setLinkLocalIPs(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iPv4Address') && null !== $data->getIPv4Address()) { + $dataArray['IPv4Address'] = $data->getIPv4Address(); + } + if ($data->isInitialized('iPv6Address') && null !== $data->getIPv6Address()) { + $dataArray['IPv6Address'] = $data->getIPv6Address(); + } + if ($data->isInitialized('linkLocalIPs') && null !== $data->getLinkLocalIPs()) { + $values = []; + foreach ($data->getLinkLocalIPs() as $value) { + $values[] = $value; + } + $dataArray['LinkLocalIPs'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EndpointIPAMConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointPortConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointPortConfigNormalizer.php new file mode 100644 index 000000000..15b37f164 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointPortConfigNormalizer.php @@ -0,0 +1,116 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Protocol', $data) && null !== $data['Protocol']) { + $object->setProtocol($data['Protocol']); + unset($data['Protocol']); + } elseif (\array_key_exists('Protocol', $data) && null === $data['Protocol']) { + $object->setProtocol(null); + } + if (\array_key_exists('TargetPort', $data) && null !== $data['TargetPort']) { + $object->setTargetPort($data['TargetPort']); + unset($data['TargetPort']); + } elseif (\array_key_exists('TargetPort', $data) && null === $data['TargetPort']) { + $object->setTargetPort(null); + } + if (\array_key_exists('PublishedPort', $data) && null !== $data['PublishedPort']) { + $object->setPublishedPort($data['PublishedPort']); + unset($data['PublishedPort']); + } elseif (\array_key_exists('PublishedPort', $data) && null === $data['PublishedPort']) { + $object->setPublishedPort(null); + } + if (\array_key_exists('PublishMode', $data) && null !== $data['PublishMode']) { + $object->setPublishMode($data['PublishMode']); + unset($data['PublishMode']); + } elseif (\array_key_exists('PublishMode', $data) && null === $data['PublishMode']) { + $object->setPublishMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('protocol') && null !== $data->getProtocol()) { + $dataArray['Protocol'] = $data->getProtocol(); + } + if ($data->isInitialized('targetPort') && null !== $data->getTargetPort()) { + $dataArray['TargetPort'] = $data->getTargetPort(); + } + if ($data->isInitialized('publishedPort') && null !== $data->getPublishedPort()) { + $dataArray['PublishedPort'] = $data->getPublishedPort(); + } + if ($data->isInitialized('publishMode') && null !== $data->getPublishMode()) { + $dataArray['PublishMode'] = $data->getPublishMode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EndpointPortConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointSettingsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointSettingsNormalizer.php new file mode 100644 index 000000000..2331484e5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointSettingsNormalizer.php @@ -0,0 +1,229 @@ +setIPAMConfig($this->denormalizer->denormalize($data['IPAMConfig'], \Docker\API\Model\EndpointIPAMConfig::class, 'json', $context)); + unset($data['IPAMConfig']); + } elseif (\array_key_exists('IPAMConfig', $data) && null === $data['IPAMConfig']) { + $object->setIPAMConfig(null); + } + if (\array_key_exists('Links', $data) && null !== $data['Links']) { + $values = []; + foreach ($data['Links'] as $value) { + $values[] = $value; + } + $object->setLinks($values); + unset($data['Links']); + } elseif (\array_key_exists('Links', $data) && null === $data['Links']) { + $object->setLinks(null); + } + if (\array_key_exists('MacAddress', $data) && null !== $data['MacAddress']) { + $object->setMacAddress($data['MacAddress']); + unset($data['MacAddress']); + } elseif (\array_key_exists('MacAddress', $data) && null === $data['MacAddress']) { + $object->setMacAddress(null); + } + if (\array_key_exists('Aliases', $data) && null !== $data['Aliases']) { + $values_1 = []; + foreach ($data['Aliases'] as $value_1) { + $values_1[] = $value_1; + } + $object->setAliases($values_1); + unset($data['Aliases']); + } elseif (\array_key_exists('Aliases', $data) && null === $data['Aliases']) { + $object->setAliases(null); + } + if (\array_key_exists('NetworkID', $data) && null !== $data['NetworkID']) { + $object->setNetworkID($data['NetworkID']); + unset($data['NetworkID']); + } elseif (\array_key_exists('NetworkID', $data) && null === $data['NetworkID']) { + $object->setNetworkID(null); + } + if (\array_key_exists('EndpointID', $data) && null !== $data['EndpointID']) { + $object->setEndpointID($data['EndpointID']); + unset($data['EndpointID']); + } elseif (\array_key_exists('EndpointID', $data) && null === $data['EndpointID']) { + $object->setEndpointID(null); + } + if (\array_key_exists('Gateway', $data) && null !== $data['Gateway']) { + $object->setGateway($data['Gateway']); + unset($data['Gateway']); + } elseif (\array_key_exists('Gateway', $data) && null === $data['Gateway']) { + $object->setGateway(null); + } + if (\array_key_exists('IPAddress', $data) && null !== $data['IPAddress']) { + $object->setIPAddress($data['IPAddress']); + unset($data['IPAddress']); + } elseif (\array_key_exists('IPAddress', $data) && null === $data['IPAddress']) { + $object->setIPAddress(null); + } + if (\array_key_exists('IPPrefixLen', $data) && null !== $data['IPPrefixLen']) { + $object->setIPPrefixLen($data['IPPrefixLen']); + unset($data['IPPrefixLen']); + } elseif (\array_key_exists('IPPrefixLen', $data) && null === $data['IPPrefixLen']) { + $object->setIPPrefixLen(null); + } + if (\array_key_exists('IPv6Gateway', $data) && null !== $data['IPv6Gateway']) { + $object->setIPv6Gateway($data['IPv6Gateway']); + unset($data['IPv6Gateway']); + } elseif (\array_key_exists('IPv6Gateway', $data) && null === $data['IPv6Gateway']) { + $object->setIPv6Gateway(null); + } + if (\array_key_exists('GlobalIPv6Address', $data) && null !== $data['GlobalIPv6Address']) { + $object->setGlobalIPv6Address($data['GlobalIPv6Address']); + unset($data['GlobalIPv6Address']); + } elseif (\array_key_exists('GlobalIPv6Address', $data) && null === $data['GlobalIPv6Address']) { + $object->setGlobalIPv6Address(null); + } + if (\array_key_exists('GlobalIPv6PrefixLen', $data) && null !== $data['GlobalIPv6PrefixLen']) { + $object->setGlobalIPv6PrefixLen($data['GlobalIPv6PrefixLen']); + unset($data['GlobalIPv6PrefixLen']); + } elseif (\array_key_exists('GlobalIPv6PrefixLen', $data) && null === $data['GlobalIPv6PrefixLen']) { + $object->setGlobalIPv6PrefixLen(null); + } + if (\array_key_exists('DriverOpts', $data) && null !== $data['DriverOpts']) { + $values_2 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['DriverOpts'] as $key => $value_2) { + $values_2[$key] = $value_2; + } + $object->setDriverOpts($values_2); + unset($data['DriverOpts']); + } elseif (\array_key_exists('DriverOpts', $data) && null === $data['DriverOpts']) { + $object->setDriverOpts(null); + } + if (\array_key_exists('DNSNames', $data) && null !== $data['DNSNames']) { + $values_3 = []; + foreach ($data['DNSNames'] as $value_3) { + $values_3[] = $value_3; + } + $object->setDNSNames($values_3); + unset($data['DNSNames']); + } elseif (\array_key_exists('DNSNames', $data) && null === $data['DNSNames']) { + $object->setDNSNames(null); + } + foreach ($data as $key_1 => $value_4) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iPAMConfig') && null !== $data->getIPAMConfig()) { + $dataArray['IPAMConfig'] = $this->normalizer->normalize($data->getIPAMConfig(), 'json', $context); + } + if ($data->isInitialized('links') && null !== $data->getLinks()) { + $values = []; + foreach ($data->getLinks() as $value) { + $values[] = $value; + } + $dataArray['Links'] = $values; + } + if ($data->isInitialized('macAddress') && null !== $data->getMacAddress()) { + $dataArray['MacAddress'] = $data->getMacAddress(); + } + if ($data->isInitialized('aliases') && null !== $data->getAliases()) { + $values_1 = []; + foreach ($data->getAliases() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Aliases'] = $values_1; + } + if ($data->isInitialized('networkID') && null !== $data->getNetworkID()) { + $dataArray['NetworkID'] = $data->getNetworkID(); + } + if ($data->isInitialized('endpointID') && null !== $data->getEndpointID()) { + $dataArray['EndpointID'] = $data->getEndpointID(); + } + if ($data->isInitialized('gateway') && null !== $data->getGateway()) { + $dataArray['Gateway'] = $data->getGateway(); + } + if ($data->isInitialized('iPAddress') && null !== $data->getIPAddress()) { + $dataArray['IPAddress'] = $data->getIPAddress(); + } + if ($data->isInitialized('iPPrefixLen') && null !== $data->getIPPrefixLen()) { + $dataArray['IPPrefixLen'] = $data->getIPPrefixLen(); + } + if ($data->isInitialized('iPv6Gateway') && null !== $data->getIPv6Gateway()) { + $dataArray['IPv6Gateway'] = $data->getIPv6Gateway(); + } + if ($data->isInitialized('globalIPv6Address') && null !== $data->getGlobalIPv6Address()) { + $dataArray['GlobalIPv6Address'] = $data->getGlobalIPv6Address(); + } + if ($data->isInitialized('globalIPv6PrefixLen') && null !== $data->getGlobalIPv6PrefixLen()) { + $dataArray['GlobalIPv6PrefixLen'] = $data->getGlobalIPv6PrefixLen(); + } + if ($data->isInitialized('driverOpts') && null !== $data->getDriverOpts()) { + $values_2 = []; + foreach ($data->getDriverOpts() as $key => $value_2) { + $values_2[$key] = $value_2; + } + $dataArray['DriverOpts'] = $values_2; + } + if ($data->isInitialized('dNSNames') && null !== $data->getDNSNames()) { + $values_3 = []; + foreach ($data->getDNSNames() as $value_3) { + $values_3[] = $value_3; + } + $dataArray['DNSNames'] = $values_3; + } + foreach ($data as $key_1 => $value_4) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EndpointSettings::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointSpecNormalizer.php new file mode 100644 index 000000000..24d7b3559 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EndpointSpecNormalizer.php @@ -0,0 +1,97 @@ +setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + if (\array_key_exists('Ports', $data) && null !== $data['Ports']) { + $values = []; + foreach ($data['Ports'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\EndpointPortConfig::class, 'json', $context); + } + $object->setPorts($values); + unset($data['Ports']); + } elseif (\array_key_exists('Ports', $data) && null === $data['Ports']) { + $object->setPorts(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + if ($data->isInitialized('ports') && null !== $data->getPorts()) { + $values = []; + foreach ($data->getPorts() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Ports'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EndpointSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EngineDescriptionNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EngineDescriptionNormalizer.php new file mode 100644 index 000000000..055e0758d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EngineDescriptionNormalizer.php @@ -0,0 +1,114 @@ +setEngineVersion($data['EngineVersion']); + unset($data['EngineVersion']); + } elseif (\array_key_exists('EngineVersion', $data) && null === $data['EngineVersion']) { + $object->setEngineVersion(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Plugins', $data) && null !== $data['Plugins']) { + $values_1 = []; + foreach ($data['Plugins'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\EngineDescriptionPluginsItem::class, 'json', $context); + } + $object->setPlugins($values_1); + unset($data['Plugins']); + } elseif (\array_key_exists('Plugins', $data) && null === $data['Plugins']) { + $object->setPlugins(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('engineVersion') && null !== $data->getEngineVersion()) { + $dataArray['EngineVersion'] = $data->getEngineVersion(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('plugins') && null !== $data->getPlugins()) { + $values_1 = []; + foreach ($data->getPlugins() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Plugins'] = $values_1; + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EngineDescription::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EngineDescriptionPluginsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EngineDescriptionPluginsItemNormalizer.php new file mode 100644 index 000000000..f528c9619 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EngineDescriptionPluginsItemNormalizer.php @@ -0,0 +1,89 @@ +setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Name', $data) && null !== $data['Name']) { + $object->setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EngineDescriptionPluginsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ErrorDetailNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ErrorDetailNormalizer.php new file mode 100644 index 000000000..d23b05f0f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ErrorDetailNormalizer.php @@ -0,0 +1,89 @@ +setCode($data['code']); + unset($data['code']); + } elseif (\array_key_exists('code', $data) && null === $data['code']) { + $object->setCode(null); + } + if (\array_key_exists('message', $data) && null !== $data['message']) { + $object->setMessage($data['message']); + unset($data['message']); + } elseif (\array_key_exists('message', $data) && null === $data['message']) { + $object->setMessage(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('code') && null !== $data->getCode()) { + $dataArray['code'] = $data->getCode(); + } + if ($data->isInitialized('message') && null !== $data->getMessage()) { + $dataArray['message'] = $data->getMessage(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ErrorDetail::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ErrorResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ErrorResponseNormalizer.php new file mode 100644 index 000000000..1c5b976a0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ErrorResponseNormalizer.php @@ -0,0 +1,78 @@ +setMessage($data['message']); + unset($data['message']); + } elseif (\array_key_exists('message', $data) && null === $data['message']) { + $object->setMessage(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['message'] = $data->getMessage(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ErrorResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EventActorNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EventActorNormalizer.php new file mode 100644 index 000000000..8a857a7cd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EventActorNormalizer.php @@ -0,0 +1,97 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Attributes', $data) && null !== $data['Attributes']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Attributes'] as $key => $value) { + $values[$key] = $value; + } + $object->setAttributes($values); + unset($data['Attributes']); + } elseif (\array_key_exists('Attributes', $data) && null === $data['Attributes']) { + $object->setAttributes(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('attributes') && null !== $data->getAttributes()) { + $values = []; + foreach ($data->getAttributes() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Attributes'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EventActor::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/EventMessageNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EventMessageNormalizer.php new file mode 100644 index 000000000..10f33cfeb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/EventMessageNormalizer.php @@ -0,0 +1,125 @@ +setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Action', $data) && null !== $data['Action']) { + $object->setAction($data['Action']); + unset($data['Action']); + } elseif (\array_key_exists('Action', $data) && null === $data['Action']) { + $object->setAction(null); + } + if (\array_key_exists('Actor', $data) && null !== $data['Actor']) { + $object->setActor($this->denormalizer->denormalize($data['Actor'], \Docker\API\Model\EventActor::class, 'json', $context)); + unset($data['Actor']); + } elseif (\array_key_exists('Actor', $data) && null === $data['Actor']) { + $object->setActor(null); + } + if (\array_key_exists('scope', $data) && null !== $data['scope']) { + $object->setScope($data['scope']); + unset($data['scope']); + } elseif (\array_key_exists('scope', $data) && null === $data['scope']) { + $object->setScope(null); + } + if (\array_key_exists('time', $data) && null !== $data['time']) { + $object->setTime($data['time']); + unset($data['time']); + } elseif (\array_key_exists('time', $data) && null === $data['time']) { + $object->setTime(null); + } + if (\array_key_exists('timeNano', $data) && null !== $data['timeNano']) { + $object->setTimeNano($data['timeNano']); + unset($data['timeNano']); + } elseif (\array_key_exists('timeNano', $data) && null === $data['timeNano']) { + $object->setTimeNano(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('action') && null !== $data->getAction()) { + $dataArray['Action'] = $data->getAction(); + } + if ($data->isInitialized('actor') && null !== $data->getActor()) { + $dataArray['Actor'] = $this->normalizer->normalize($data->getActor(), 'json', $context); + } + if ($data->isInitialized('scope') && null !== $data->getScope()) { + $dataArray['scope'] = $data->getScope(); + } + if ($data->isInitialized('time') && null !== $data->getTime()) { + $dataArray['time'] = $data->getTime(); + } + if ($data->isInitialized('timeNano') && null !== $data->getTimeNano()) { + $dataArray['timeNano'] = $data->getTimeNano(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\EventMessage::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ExecIdJsonGetResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ExecIdJsonGetResponse200Normalizer.php new file mode 100644 index 000000000..37828cb0d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ExecIdJsonGetResponse200Normalizer.php @@ -0,0 +1,185 @@ +setCanRemove($data['CanRemove']); + unset($data['CanRemove']); + } elseif (\array_key_exists('CanRemove', $data) && null === $data['CanRemove']) { + $object->setCanRemove(null); + } + if (\array_key_exists('DetachKeys', $data) && null !== $data['DetachKeys']) { + $object->setDetachKeys($data['DetachKeys']); + unset($data['DetachKeys']); + } elseif (\array_key_exists('DetachKeys', $data) && null === $data['DetachKeys']) { + $object->setDetachKeys(null); + } + if (\array_key_exists('ID', $data) && null !== $data['ID']) { + $object->setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Running', $data) && null !== $data['Running']) { + $object->setRunning($data['Running']); + unset($data['Running']); + } elseif (\array_key_exists('Running', $data) && null === $data['Running']) { + $object->setRunning(null); + } + if (\array_key_exists('ExitCode', $data) && null !== $data['ExitCode']) { + $object->setExitCode($data['ExitCode']); + unset($data['ExitCode']); + } elseif (\array_key_exists('ExitCode', $data) && null === $data['ExitCode']) { + $object->setExitCode(null); + } + if (\array_key_exists('ProcessConfig', $data) && null !== $data['ProcessConfig']) { + $object->setProcessConfig($this->denormalizer->denormalize($data['ProcessConfig'], \Docker\API\Model\ProcessConfig::class, 'json', $context)); + unset($data['ProcessConfig']); + } elseif (\array_key_exists('ProcessConfig', $data) && null === $data['ProcessConfig']) { + $object->setProcessConfig(null); + } + if (\array_key_exists('OpenStdin', $data) && null !== $data['OpenStdin']) { + $object->setOpenStdin($data['OpenStdin']); + unset($data['OpenStdin']); + } elseif (\array_key_exists('OpenStdin', $data) && null === $data['OpenStdin']) { + $object->setOpenStdin(null); + } + if (\array_key_exists('OpenStderr', $data) && null !== $data['OpenStderr']) { + $object->setOpenStderr($data['OpenStderr']); + unset($data['OpenStderr']); + } elseif (\array_key_exists('OpenStderr', $data) && null === $data['OpenStderr']) { + $object->setOpenStderr(null); + } + if (\array_key_exists('OpenStdout', $data) && null !== $data['OpenStdout']) { + $object->setOpenStdout($data['OpenStdout']); + unset($data['OpenStdout']); + } elseif (\array_key_exists('OpenStdout', $data) && null === $data['OpenStdout']) { + $object->setOpenStdout(null); + } + if (\array_key_exists('ContainerID', $data) && null !== $data['ContainerID']) { + $object->setContainerID($data['ContainerID']); + unset($data['ContainerID']); + } elseif (\array_key_exists('ContainerID', $data) && null === $data['ContainerID']) { + $object->setContainerID(null); + } + if (\array_key_exists('Pid', $data) && null !== $data['Pid']) { + $object->setPid($data['Pid']); + unset($data['Pid']); + } elseif (\array_key_exists('Pid', $data) && null === $data['Pid']) { + $object->setPid(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('canRemove') && null !== $data->getCanRemove()) { + $dataArray['CanRemove'] = $data->getCanRemove(); + } + if ($data->isInitialized('detachKeys') && null !== $data->getDetachKeys()) { + $dataArray['DetachKeys'] = $data->getDetachKeys(); + } + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('running') && null !== $data->getRunning()) { + $dataArray['Running'] = $data->getRunning(); + } + if ($data->isInitialized('exitCode') && null !== $data->getExitCode()) { + $dataArray['ExitCode'] = $data->getExitCode(); + } + if ($data->isInitialized('processConfig') && null !== $data->getProcessConfig()) { + $dataArray['ProcessConfig'] = $this->normalizer->normalize($data->getProcessConfig(), 'json', $context); + } + if ($data->isInitialized('openStdin') && null !== $data->getOpenStdin()) { + $dataArray['OpenStdin'] = $data->getOpenStdin(); + } + if ($data->isInitialized('openStderr') && null !== $data->getOpenStderr()) { + $dataArray['OpenStderr'] = $data->getOpenStderr(); + } + if ($data->isInitialized('openStdout') && null !== $data->getOpenStdout()) { + $dataArray['OpenStdout'] = $data->getOpenStdout(); + } + if ($data->isInitialized('containerID') && null !== $data->getContainerID()) { + $dataArray['ContainerID'] = $data->getContainerID(); + } + if ($data->isInitialized('pid') && null !== $data->getPid()) { + $dataArray['Pid'] = $data->getPid(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ExecIdJsonGetResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ExecIdStartPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ExecIdStartPostBodyNormalizer.php new file mode 100644 index 000000000..3237e1b04 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ExecIdStartPostBodyNormalizer.php @@ -0,0 +1,112 @@ +setDetach($data['Detach']); + unset($data['Detach']); + } elseif (\array_key_exists('Detach', $data) && null === $data['Detach']) { + $object->setDetach(null); + } + if (\array_key_exists('Tty', $data) && null !== $data['Tty']) { + $object->setTty($data['Tty']); + unset($data['Tty']); + } elseif (\array_key_exists('Tty', $data) && null === $data['Tty']) { + $object->setTty(null); + } + if (\array_key_exists('ConsoleSize', $data) && null !== $data['ConsoleSize']) { + $values = []; + foreach ($data['ConsoleSize'] as $value) { + $values[] = $value; + } + $object->setConsoleSize($values); + unset($data['ConsoleSize']); + } elseif (\array_key_exists('ConsoleSize', $data) && null === $data['ConsoleSize']) { + $object->setConsoleSize(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('detach') && null !== $data->getDetach()) { + $dataArray['Detach'] = $data->getDetach(); + } + if ($data->isInitialized('tty') && null !== $data->getTty()) { + $dataArray['Tty'] = $data->getTty(); + } + if ($data->isInitialized('consoleSize') && null !== $data->getConsoleSize()) { + $values = []; + foreach ($data->getConsoleSize() as $value) { + $values[] = $value; + } + $dataArray['ConsoleSize'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ExecIdStartPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/FilesystemChangeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/FilesystemChangeNormalizer.php new file mode 100644 index 000000000..376b2b391 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/FilesystemChangeNormalizer.php @@ -0,0 +1,85 @@ +setPath($data['Path']); + unset($data['Path']); + } elseif (\array_key_exists('Path', $data) && null === $data['Path']) { + $object->setPath(null); + } + if (\array_key_exists('Kind', $data) && null !== $data['Kind']) { + $object->setKind($data['Kind']); + unset($data['Kind']); + } elseif (\array_key_exists('Kind', $data) && null === $data['Kind']) { + $object->setKind(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Path'] = $data->getPath(); + $dataArray['Kind'] = $data->getKind(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\FilesystemChange::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemDiscreteResourceSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemDiscreteResourceSpecNormalizer.php new file mode 100644 index 000000000..bcbc9a5f8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemDiscreteResourceSpecNormalizer.php @@ -0,0 +1,89 @@ +setKind($data['Kind']); + unset($data['Kind']); + } elseif (\array_key_exists('Kind', $data) && null === $data['Kind']) { + $object->setKind(null); + } + if (\array_key_exists('Value', $data) && null !== $data['Value']) { + $object->setValue($data['Value']); + unset($data['Value']); + } elseif (\array_key_exists('Value', $data) && null === $data['Value']) { + $object->setValue(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('kind') && null !== $data->getKind()) { + $dataArray['Kind'] = $data->getKind(); + } + if ($data->isInitialized('value') && null !== $data->getValue()) { + $dataArray['Value'] = $data->getValue(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\GenericResourcesItemDiscreteResourceSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemNamedResourceSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemNamedResourceSpecNormalizer.php new file mode 100644 index 000000000..e32828480 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemNamedResourceSpecNormalizer.php @@ -0,0 +1,89 @@ +setKind($data['Kind']); + unset($data['Kind']); + } elseif (\array_key_exists('Kind', $data) && null === $data['Kind']) { + $object->setKind(null); + } + if (\array_key_exists('Value', $data) && null !== $data['Value']) { + $object->setValue($data['Value']); + unset($data['Value']); + } elseif (\array_key_exists('Value', $data) && null === $data['Value']) { + $object->setValue(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('kind') && null !== $data->getKind()) { + $dataArray['Kind'] = $data->getKind(); + } + if ($data->isInitialized('value') && null !== $data->getValue()) { + $dataArray['Value'] = $data->getValue(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\GenericResourcesItemNamedResourceSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemNormalizer.php new file mode 100644 index 000000000..c92fe7b87 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GenericResourcesItemNormalizer.php @@ -0,0 +1,89 @@ +setNamedResourceSpec($this->denormalizer->denormalize($data['NamedResourceSpec'], \Docker\API\Model\GenericResourcesItemNamedResourceSpec::class, 'json', $context)); + unset($data['NamedResourceSpec']); + } elseif (\array_key_exists('NamedResourceSpec', $data) && null === $data['NamedResourceSpec']) { + $object->setNamedResourceSpec(null); + } + if (\array_key_exists('DiscreteResourceSpec', $data) && null !== $data['DiscreteResourceSpec']) { + $object->setDiscreteResourceSpec($this->denormalizer->denormalize($data['DiscreteResourceSpec'], \Docker\API\Model\GenericResourcesItemDiscreteResourceSpec::class, 'json', $context)); + unset($data['DiscreteResourceSpec']); + } elseif (\array_key_exists('DiscreteResourceSpec', $data) && null === $data['DiscreteResourceSpec']) { + $object->setDiscreteResourceSpec(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('namedResourceSpec') && null !== $data->getNamedResourceSpec()) { + $dataArray['NamedResourceSpec'] = $this->normalizer->normalize($data->getNamedResourceSpec(), 'json', $context); + } + if ($data->isInitialized('discreteResourceSpec') && null !== $data->getDiscreteResourceSpec()) { + $dataArray['DiscreteResourceSpec'] = $this->normalizer->normalize($data->getDiscreteResourceSpec(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\GenericResourcesItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/GraphDriverDataNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GraphDriverDataNormalizer.php new file mode 100644 index 000000000..5dd947030 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/GraphDriverDataNormalizer.php @@ -0,0 +1,93 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Data', $data) && null !== $data['Data']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Data'] as $key => $value) { + $values[$key] = $value; + } + $object->setData($values); + unset($data['Data']); + } elseif (\array_key_exists('Data', $data) && null === $data['Data']) { + $object->setData(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $values = []; + foreach ($data->getData() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Data'] = $values; + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\GraphDriverData::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthConfigNormalizer.php new file mode 100644 index 000000000..6aedbc764 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthConfigNormalizer.php @@ -0,0 +1,133 @@ +setTest($values); + unset($data['Test']); + } elseif (\array_key_exists('Test', $data) && null === $data['Test']) { + $object->setTest(null); + } + if (\array_key_exists('Interval', $data) && null !== $data['Interval']) { + $object->setInterval($data['Interval']); + unset($data['Interval']); + } elseif (\array_key_exists('Interval', $data) && null === $data['Interval']) { + $object->setInterval(null); + } + if (\array_key_exists('Timeout', $data) && null !== $data['Timeout']) { + $object->setTimeout($data['Timeout']); + unset($data['Timeout']); + } elseif (\array_key_exists('Timeout', $data) && null === $data['Timeout']) { + $object->setTimeout(null); + } + if (\array_key_exists('Retries', $data) && null !== $data['Retries']) { + $object->setRetries($data['Retries']); + unset($data['Retries']); + } elseif (\array_key_exists('Retries', $data) && null === $data['Retries']) { + $object->setRetries(null); + } + if (\array_key_exists('StartPeriod', $data) && null !== $data['StartPeriod']) { + $object->setStartPeriod($data['StartPeriod']); + unset($data['StartPeriod']); + } elseif (\array_key_exists('StartPeriod', $data) && null === $data['StartPeriod']) { + $object->setStartPeriod(null); + } + if (\array_key_exists('StartInterval', $data) && null !== $data['StartInterval']) { + $object->setStartInterval($data['StartInterval']); + unset($data['StartInterval']); + } elseif (\array_key_exists('StartInterval', $data) && null === $data['StartInterval']) { + $object->setStartInterval(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('test') && null !== $data->getTest()) { + $values = []; + foreach ($data->getTest() as $value) { + $values[] = $value; + } + $dataArray['Test'] = $values; + } + if ($data->isInitialized('interval') && null !== $data->getInterval()) { + $dataArray['Interval'] = $data->getInterval(); + } + if ($data->isInitialized('timeout') && null !== $data->getTimeout()) { + $dataArray['Timeout'] = $data->getTimeout(); + } + if ($data->isInitialized('retries') && null !== $data->getRetries()) { + $dataArray['Retries'] = $data->getRetries(); + } + if ($data->isInitialized('startPeriod') && null !== $data->getStartPeriod()) { + $dataArray['StartPeriod'] = $data->getStartPeriod(); + } + if ($data->isInitialized('startInterval') && null !== $data->getStartInterval()) { + $dataArray['StartInterval'] = $data->getStartInterval(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\HealthConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthNormalizer.php new file mode 100644 index 000000000..e9d7fa069 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthNormalizer.php @@ -0,0 +1,106 @@ +setStatus($data['Status']); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('FailingStreak', $data) && null !== $data['FailingStreak']) { + $object->setFailingStreak($data['FailingStreak']); + unset($data['FailingStreak']); + } elseif (\array_key_exists('FailingStreak', $data) && null === $data['FailingStreak']) { + $object->setFailingStreak(null); + } + if (\array_key_exists('Log', $data) && null !== $data['Log']) { + $values = []; + foreach ($data['Log'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\HealthcheckResult::class, 'json', $context); + } + $object->setLog($values); + unset($data['Log']); + } elseif (\array_key_exists('Log', $data) && null === $data['Log']) { + $object->setLog(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['Status'] = $data->getStatus(); + } + if ($data->isInitialized('failingStreak') && null !== $data->getFailingStreak()) { + $dataArray['FailingStreak'] = $data->getFailingStreak(); + } + if ($data->isInitialized('log') && null !== $data->getLog()) { + $values = []; + foreach ($data->getLog() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Log'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Health::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthcheckResultNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthcheckResultNormalizer.php new file mode 100644 index 000000000..b3962a2b6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HealthcheckResultNormalizer.php @@ -0,0 +1,107 @@ +setStart(\DateTime::createFromFormat('Y-m-d\TH:i:s.uuP', $data['Start'])); + unset($data['Start']); + } elseif (\array_key_exists('Start', $data) && null === $data['Start']) { + $object->setStart(null); + } + if (\array_key_exists('End', $data) && null !== $data['End']) { + $object->setEnd($data['End']); + unset($data['End']); + } elseif (\array_key_exists('End', $data) && null === $data['End']) { + $object->setEnd(null); + } + if (\array_key_exists('ExitCode', $data) && null !== $data['ExitCode']) { + $object->setExitCode($data['ExitCode']); + unset($data['ExitCode']); + } elseif (\array_key_exists('ExitCode', $data) && null === $data['ExitCode']) { + $object->setExitCode(null); + } + if (\array_key_exists('Output', $data) && null !== $data['Output']) { + $object->setOutput($data['Output']); + unset($data['Output']); + } elseif (\array_key_exists('Output', $data) && null === $data['Output']) { + $object->setOutput(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('start') && null !== $data->getStart()) { + $dataArray['Start'] = $data->getStart()?->format('Y-m-d\TH:i:sP'); + } + if ($data->isInitialized('end') && null !== $data->getEnd()) { + $dataArray['End'] = $data->getEnd(); + } + if ($data->isInitialized('exitCode') && null !== $data->getExitCode()) { + $dataArray['ExitCode'] = $data->getExitCode(); + } + if ($data->isInitialized('output') && null !== $data->getOutput()) { + $dataArray['Output'] = $data->getOutput(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\HealthcheckResult::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/HostConfigLogConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HostConfigLogConfigNormalizer.php new file mode 100644 index 000000000..a0732e943 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HostConfigLogConfigNormalizer.php @@ -0,0 +1,97 @@ +setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Config', $data) && null !== $data['Config']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Config'] as $key => $value) { + $values[$key] = $value; + } + $object->setConfig($values); + unset($data['Config']); + } elseif (\array_key_exists('Config', $data) && null === $data['Config']) { + $object->setConfig(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('config') && null !== $data->getConfig()) { + $values = []; + foreach ($data->getConfig() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Config'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\HostConfigLogConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/HostConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HostConfigNormalizer.php new file mode 100644 index 000000000..cbaaeaf86 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/HostConfigNormalizer.php @@ -0,0 +1,959 @@ +setCpuShares($data['CpuShares']); + unset($data['CpuShares']); + } elseif (\array_key_exists('CpuShares', $data) && null === $data['CpuShares']) { + $object->setCpuShares(null); + } + if (\array_key_exists('Memory', $data) && null !== $data['Memory']) { + $object->setMemory($data['Memory']); + unset($data['Memory']); + } elseif (\array_key_exists('Memory', $data) && null === $data['Memory']) { + $object->setMemory(null); + } + if (\array_key_exists('CgroupParent', $data) && null !== $data['CgroupParent']) { + $object->setCgroupParent($data['CgroupParent']); + unset($data['CgroupParent']); + } elseif (\array_key_exists('CgroupParent', $data) && null === $data['CgroupParent']) { + $object->setCgroupParent(null); + } + if (\array_key_exists('BlkioWeight', $data) && null !== $data['BlkioWeight']) { + $object->setBlkioWeight($data['BlkioWeight']); + unset($data['BlkioWeight']); + } elseif (\array_key_exists('BlkioWeight', $data) && null === $data['BlkioWeight']) { + $object->setBlkioWeight(null); + } + if (\array_key_exists('BlkioWeightDevice', $data) && null !== $data['BlkioWeightDevice']) { + $values = []; + foreach ($data['BlkioWeightDevice'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ResourcesBlkioWeightDeviceItem::class, 'json', $context); + } + $object->setBlkioWeightDevice($values); + unset($data['BlkioWeightDevice']); + } elseif (\array_key_exists('BlkioWeightDevice', $data) && null === $data['BlkioWeightDevice']) { + $object->setBlkioWeightDevice(null); + } + if (\array_key_exists('BlkioDeviceReadBps', $data) && null !== $data['BlkioDeviceReadBps']) { + $values_1 = []; + foreach ($data['BlkioDeviceReadBps'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceReadBps($values_1); + unset($data['BlkioDeviceReadBps']); + } elseif (\array_key_exists('BlkioDeviceReadBps', $data) && null === $data['BlkioDeviceReadBps']) { + $object->setBlkioDeviceReadBps(null); + } + if (\array_key_exists('BlkioDeviceWriteBps', $data) && null !== $data['BlkioDeviceWriteBps']) { + $values_2 = []; + foreach ($data['BlkioDeviceWriteBps'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceWriteBps($values_2); + unset($data['BlkioDeviceWriteBps']); + } elseif (\array_key_exists('BlkioDeviceWriteBps', $data) && null === $data['BlkioDeviceWriteBps']) { + $object->setBlkioDeviceWriteBps(null); + } + if (\array_key_exists('BlkioDeviceReadIOps', $data) && null !== $data['BlkioDeviceReadIOps']) { + $values_3 = []; + foreach ($data['BlkioDeviceReadIOps'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceReadIOps($values_3); + unset($data['BlkioDeviceReadIOps']); + } elseif (\array_key_exists('BlkioDeviceReadIOps', $data) && null === $data['BlkioDeviceReadIOps']) { + $object->setBlkioDeviceReadIOps(null); + } + if (\array_key_exists('BlkioDeviceWriteIOps', $data) && null !== $data['BlkioDeviceWriteIOps']) { + $values_4 = []; + foreach ($data['BlkioDeviceWriteIOps'] as $value_4) { + $values_4[] = $this->denormalizer->denormalize($value_4, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceWriteIOps($values_4); + unset($data['BlkioDeviceWriteIOps']); + } elseif (\array_key_exists('BlkioDeviceWriteIOps', $data) && null === $data['BlkioDeviceWriteIOps']) { + $object->setBlkioDeviceWriteIOps(null); + } + if (\array_key_exists('CpuPeriod', $data) && null !== $data['CpuPeriod']) { + $object->setCpuPeriod($data['CpuPeriod']); + unset($data['CpuPeriod']); + } elseif (\array_key_exists('CpuPeriod', $data) && null === $data['CpuPeriod']) { + $object->setCpuPeriod(null); + } + if (\array_key_exists('CpuQuota', $data) && null !== $data['CpuQuota']) { + $object->setCpuQuota($data['CpuQuota']); + unset($data['CpuQuota']); + } elseif (\array_key_exists('CpuQuota', $data) && null === $data['CpuQuota']) { + $object->setCpuQuota(null); + } + if (\array_key_exists('CpuRealtimePeriod', $data) && null !== $data['CpuRealtimePeriod']) { + $object->setCpuRealtimePeriod($data['CpuRealtimePeriod']); + unset($data['CpuRealtimePeriod']); + } elseif (\array_key_exists('CpuRealtimePeriod', $data) && null === $data['CpuRealtimePeriod']) { + $object->setCpuRealtimePeriod(null); + } + if (\array_key_exists('CpuRealtimeRuntime', $data) && null !== $data['CpuRealtimeRuntime']) { + $object->setCpuRealtimeRuntime($data['CpuRealtimeRuntime']); + unset($data['CpuRealtimeRuntime']); + } elseif (\array_key_exists('CpuRealtimeRuntime', $data) && null === $data['CpuRealtimeRuntime']) { + $object->setCpuRealtimeRuntime(null); + } + if (\array_key_exists('CpusetCpus', $data) && null !== $data['CpusetCpus']) { + $object->setCpusetCpus($data['CpusetCpus']); + unset($data['CpusetCpus']); + } elseif (\array_key_exists('CpusetCpus', $data) && null === $data['CpusetCpus']) { + $object->setCpusetCpus(null); + } + if (\array_key_exists('CpusetMems', $data) && null !== $data['CpusetMems']) { + $object->setCpusetMems($data['CpusetMems']); + unset($data['CpusetMems']); + } elseif (\array_key_exists('CpusetMems', $data) && null === $data['CpusetMems']) { + $object->setCpusetMems(null); + } + if (\array_key_exists('Devices', $data) && null !== $data['Devices']) { + $values_5 = []; + foreach ($data['Devices'] as $value_5) { + $values_5[] = $this->denormalizer->denormalize($value_5, \Docker\API\Model\DeviceMapping::class, 'json', $context); + } + $object->setDevices($values_5); + unset($data['Devices']); + } elseif (\array_key_exists('Devices', $data) && null === $data['Devices']) { + $object->setDevices(null); + } + if (\array_key_exists('DeviceCgroupRules', $data) && null !== $data['DeviceCgroupRules']) { + $values_6 = []; + foreach ($data['DeviceCgroupRules'] as $value_6) { + $values_6[] = $value_6; + } + $object->setDeviceCgroupRules($values_6); + unset($data['DeviceCgroupRules']); + } elseif (\array_key_exists('DeviceCgroupRules', $data) && null === $data['DeviceCgroupRules']) { + $object->setDeviceCgroupRules(null); + } + if (\array_key_exists('DeviceRequests', $data) && null !== $data['DeviceRequests']) { + $values_7 = []; + foreach ($data['DeviceRequests'] as $value_7) { + $values_7[] = $this->denormalizer->denormalize($value_7, \Docker\API\Model\DeviceRequest::class, 'json', $context); + } + $object->setDeviceRequests($values_7); + unset($data['DeviceRequests']); + } elseif (\array_key_exists('DeviceRequests', $data) && null === $data['DeviceRequests']) { + $object->setDeviceRequests(null); + } + if (\array_key_exists('KernelMemoryTCP', $data) && null !== $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP($data['KernelMemoryTCP']); + unset($data['KernelMemoryTCP']); + } elseif (\array_key_exists('KernelMemoryTCP', $data) && null === $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP(null); + } + if (\array_key_exists('MemoryReservation', $data) && null !== $data['MemoryReservation']) { + $object->setMemoryReservation($data['MemoryReservation']); + unset($data['MemoryReservation']); + } elseif (\array_key_exists('MemoryReservation', $data) && null === $data['MemoryReservation']) { + $object->setMemoryReservation(null); + } + if (\array_key_exists('MemorySwap', $data) && null !== $data['MemorySwap']) { + $object->setMemorySwap($data['MemorySwap']); + unset($data['MemorySwap']); + } elseif (\array_key_exists('MemorySwap', $data) && null === $data['MemorySwap']) { + $object->setMemorySwap(null); + } + if (\array_key_exists('MemorySwappiness', $data) && null !== $data['MemorySwappiness']) { + $object->setMemorySwappiness($data['MemorySwappiness']); + unset($data['MemorySwappiness']); + } elseif (\array_key_exists('MemorySwappiness', $data) && null === $data['MemorySwappiness']) { + $object->setMemorySwappiness(null); + } + if (\array_key_exists('NanoCpus', $data) && null !== $data['NanoCpus']) { + $object->setNanoCpus($data['NanoCpus']); + unset($data['NanoCpus']); + } elseif (\array_key_exists('NanoCpus', $data) && null === $data['NanoCpus']) { + $object->setNanoCpus(null); + } + if (\array_key_exists('OomKillDisable', $data) && null !== $data['OomKillDisable']) { + $object->setOomKillDisable($data['OomKillDisable']); + unset($data['OomKillDisable']); + } elseif (\array_key_exists('OomKillDisable', $data) && null === $data['OomKillDisable']) { + $object->setOomKillDisable(null); + } + if (\array_key_exists('Init', $data) && null !== $data['Init']) { + $object->setInit($data['Init']); + unset($data['Init']); + } elseif (\array_key_exists('Init', $data) && null === $data['Init']) { + $object->setInit(null); + } + if (\array_key_exists('PidsLimit', $data) && null !== $data['PidsLimit']) { + $object->setPidsLimit($data['PidsLimit']); + unset($data['PidsLimit']); + } elseif (\array_key_exists('PidsLimit', $data) && null === $data['PidsLimit']) { + $object->setPidsLimit(null); + } + if (\array_key_exists('Ulimits', $data) && null !== $data['Ulimits']) { + $values_8 = []; + foreach ($data['Ulimits'] as $value_8) { + $values_8[] = $this->denormalizer->denormalize($value_8, \Docker\API\Model\ResourcesUlimitsItem::class, 'json', $context); + } + $object->setUlimits($values_8); + unset($data['Ulimits']); + } elseif (\array_key_exists('Ulimits', $data) && null === $data['Ulimits']) { + $object->setUlimits(null); + } + if (\array_key_exists('CpuCount', $data) && null !== $data['CpuCount']) { + $object->setCpuCount($data['CpuCount']); + unset($data['CpuCount']); + } elseif (\array_key_exists('CpuCount', $data) && null === $data['CpuCount']) { + $object->setCpuCount(null); + } + if (\array_key_exists('CpuPercent', $data) && null !== $data['CpuPercent']) { + $object->setCpuPercent($data['CpuPercent']); + unset($data['CpuPercent']); + } elseif (\array_key_exists('CpuPercent', $data) && null === $data['CpuPercent']) { + $object->setCpuPercent(null); + } + if (\array_key_exists('IOMaximumIOps', $data) && null !== $data['IOMaximumIOps']) { + $object->setIOMaximumIOps($data['IOMaximumIOps']); + unset($data['IOMaximumIOps']); + } elseif (\array_key_exists('IOMaximumIOps', $data) && null === $data['IOMaximumIOps']) { + $object->setIOMaximumIOps(null); + } + if (\array_key_exists('IOMaximumBandwidth', $data) && null !== $data['IOMaximumBandwidth']) { + $object->setIOMaximumBandwidth($data['IOMaximumBandwidth']); + unset($data['IOMaximumBandwidth']); + } elseif (\array_key_exists('IOMaximumBandwidth', $data) && null === $data['IOMaximumBandwidth']) { + $object->setIOMaximumBandwidth(null); + } + if (\array_key_exists('Binds', $data) && null !== $data['Binds']) { + $values_9 = []; + foreach ($data['Binds'] as $value_9) { + $values_9[] = $value_9; + } + $object->setBinds($values_9); + unset($data['Binds']); + } elseif (\array_key_exists('Binds', $data) && null === $data['Binds']) { + $object->setBinds(null); + } + if (\array_key_exists('ContainerIDFile', $data) && null !== $data['ContainerIDFile']) { + $object->setContainerIDFile($data['ContainerIDFile']); + unset($data['ContainerIDFile']); + } elseif (\array_key_exists('ContainerIDFile', $data) && null === $data['ContainerIDFile']) { + $object->setContainerIDFile(null); + } + if (\array_key_exists('LogConfig', $data) && null !== $data['LogConfig']) { + $object->setLogConfig($this->denormalizer->denormalize($data['LogConfig'], \Docker\API\Model\HostConfigLogConfig::class, 'json', $context)); + unset($data['LogConfig']); + } elseif (\array_key_exists('LogConfig', $data) && null === $data['LogConfig']) { + $object->setLogConfig(null); + } + if (\array_key_exists('NetworkMode', $data) && null !== $data['NetworkMode']) { + $object->setNetworkMode($data['NetworkMode']); + unset($data['NetworkMode']); + } elseif (\array_key_exists('NetworkMode', $data) && null === $data['NetworkMode']) { + $object->setNetworkMode(null); + } + if (\array_key_exists('PortBindings', $data) && null !== $data['PortBindings']) { + $values_10 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['PortBindings'] as $key => $value_10) { + $values_11 = []; + foreach ($value_10 as $value_11) { + $values_11[] = $this->denormalizer->denormalize($value_11, \Docker\API\Model\PortBinding::class, 'json', $context); + } + $values_10[$key] = $values_11; + } + $object->setPortBindings($values_10); + unset($data['PortBindings']); + } elseif (\array_key_exists('PortBindings', $data) && null === $data['PortBindings']) { + $object->setPortBindings(null); + } + if (\array_key_exists('RestartPolicy', $data) && null !== $data['RestartPolicy']) { + $object->setRestartPolicy($this->denormalizer->denormalize($data['RestartPolicy'], \Docker\API\Model\RestartPolicy::class, 'json', $context)); + unset($data['RestartPolicy']); + } elseif (\array_key_exists('RestartPolicy', $data) && null === $data['RestartPolicy']) { + $object->setRestartPolicy(null); + } + if (\array_key_exists('AutoRemove', $data) && null !== $data['AutoRemove']) { + $object->setAutoRemove($data['AutoRemove']); + unset($data['AutoRemove']); + } elseif (\array_key_exists('AutoRemove', $data) && null === $data['AutoRemove']) { + $object->setAutoRemove(null); + } + if (\array_key_exists('VolumeDriver', $data) && null !== $data['VolumeDriver']) { + $object->setVolumeDriver($data['VolumeDriver']); + unset($data['VolumeDriver']); + } elseif (\array_key_exists('VolumeDriver', $data) && null === $data['VolumeDriver']) { + $object->setVolumeDriver(null); + } + if (\array_key_exists('VolumesFrom', $data) && null !== $data['VolumesFrom']) { + $values_12 = []; + foreach ($data['VolumesFrom'] as $value_12) { + $values_12[] = $value_12; + } + $object->setVolumesFrom($values_12); + unset($data['VolumesFrom']); + } elseif (\array_key_exists('VolumesFrom', $data) && null === $data['VolumesFrom']) { + $object->setVolumesFrom(null); + } + if (\array_key_exists('Mounts', $data) && null !== $data['Mounts']) { + $values_13 = []; + foreach ($data['Mounts'] as $value_13) { + $values_13[] = $this->denormalizer->denormalize($value_13, \Docker\API\Model\Mount::class, 'json', $context); + } + $object->setMounts($values_13); + unset($data['Mounts']); + } elseif (\array_key_exists('Mounts', $data) && null === $data['Mounts']) { + $object->setMounts(null); + } + if (\array_key_exists('ConsoleSize', $data) && null !== $data['ConsoleSize']) { + $values_14 = []; + foreach ($data['ConsoleSize'] as $value_14) { + $values_14[] = $value_14; + } + $object->setConsoleSize($values_14); + unset($data['ConsoleSize']); + } elseif (\array_key_exists('ConsoleSize', $data) && null === $data['ConsoleSize']) { + $object->setConsoleSize(null); + } + if (\array_key_exists('Annotations', $data) && null !== $data['Annotations']) { + $values_15 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Annotations'] as $key_1 => $value_15) { + $values_15[$key_1] = $value_15; + } + $object->setAnnotations($values_15); + unset($data['Annotations']); + } elseif (\array_key_exists('Annotations', $data) && null === $data['Annotations']) { + $object->setAnnotations(null); + } + if (\array_key_exists('CapAdd', $data) && null !== $data['CapAdd']) { + $values_16 = []; + foreach ($data['CapAdd'] as $value_16) { + $values_16[] = $value_16; + } + $object->setCapAdd($values_16); + unset($data['CapAdd']); + } elseif (\array_key_exists('CapAdd', $data) && null === $data['CapAdd']) { + $object->setCapAdd(null); + } + if (\array_key_exists('CapDrop', $data) && null !== $data['CapDrop']) { + $values_17 = []; + foreach ($data['CapDrop'] as $value_17) { + $values_17[] = $value_17; + } + $object->setCapDrop($values_17); + unset($data['CapDrop']); + } elseif (\array_key_exists('CapDrop', $data) && null === $data['CapDrop']) { + $object->setCapDrop(null); + } + if (\array_key_exists('CgroupnsMode', $data) && null !== $data['CgroupnsMode']) { + $object->setCgroupnsMode($data['CgroupnsMode']); + unset($data['CgroupnsMode']); + } elseif (\array_key_exists('CgroupnsMode', $data) && null === $data['CgroupnsMode']) { + $object->setCgroupnsMode(null); + } + if (\array_key_exists('Dns', $data) && null !== $data['Dns']) { + $values_18 = []; + foreach ($data['Dns'] as $value_18) { + $values_18[] = $value_18; + } + $object->setDns($values_18); + unset($data['Dns']); + } elseif (\array_key_exists('Dns', $data) && null === $data['Dns']) { + $object->setDns(null); + } + if (\array_key_exists('DnsOptions', $data) && null !== $data['DnsOptions']) { + $values_19 = []; + foreach ($data['DnsOptions'] as $value_19) { + $values_19[] = $value_19; + } + $object->setDnsOptions($values_19); + unset($data['DnsOptions']); + } elseif (\array_key_exists('DnsOptions', $data) && null === $data['DnsOptions']) { + $object->setDnsOptions(null); + } + if (\array_key_exists('DnsSearch', $data) && null !== $data['DnsSearch']) { + $values_20 = []; + foreach ($data['DnsSearch'] as $value_20) { + $values_20[] = $value_20; + } + $object->setDnsSearch($values_20); + unset($data['DnsSearch']); + } elseif (\array_key_exists('DnsSearch', $data) && null === $data['DnsSearch']) { + $object->setDnsSearch(null); + } + if (\array_key_exists('ExtraHosts', $data) && null !== $data['ExtraHosts']) { + $values_21 = []; + foreach ($data['ExtraHosts'] as $value_21) { + $values_21[] = $value_21; + } + $object->setExtraHosts($values_21); + unset($data['ExtraHosts']); + } elseif (\array_key_exists('ExtraHosts', $data) && null === $data['ExtraHosts']) { + $object->setExtraHosts(null); + } + if (\array_key_exists('GroupAdd', $data) && null !== $data['GroupAdd']) { + $values_22 = []; + foreach ($data['GroupAdd'] as $value_22) { + $values_22[] = $value_22; + } + $object->setGroupAdd($values_22); + unset($data['GroupAdd']); + } elseif (\array_key_exists('GroupAdd', $data) && null === $data['GroupAdd']) { + $object->setGroupAdd(null); + } + if (\array_key_exists('IpcMode', $data) && null !== $data['IpcMode']) { + $object->setIpcMode($data['IpcMode']); + unset($data['IpcMode']); + } elseif (\array_key_exists('IpcMode', $data) && null === $data['IpcMode']) { + $object->setIpcMode(null); + } + if (\array_key_exists('Cgroup', $data) && null !== $data['Cgroup']) { + $object->setCgroup($data['Cgroup']); + unset($data['Cgroup']); + } elseif (\array_key_exists('Cgroup', $data) && null === $data['Cgroup']) { + $object->setCgroup(null); + } + if (\array_key_exists('Links', $data) && null !== $data['Links']) { + $values_23 = []; + foreach ($data['Links'] as $value_23) { + $values_23[] = $value_23; + } + $object->setLinks($values_23); + unset($data['Links']); + } elseif (\array_key_exists('Links', $data) && null === $data['Links']) { + $object->setLinks(null); + } + if (\array_key_exists('OomScoreAdj', $data) && null !== $data['OomScoreAdj']) { + $object->setOomScoreAdj($data['OomScoreAdj']); + unset($data['OomScoreAdj']); + } elseif (\array_key_exists('OomScoreAdj', $data) && null === $data['OomScoreAdj']) { + $object->setOomScoreAdj(null); + } + if (\array_key_exists('PidMode', $data) && null !== $data['PidMode']) { + $object->setPidMode($data['PidMode']); + unset($data['PidMode']); + } elseif (\array_key_exists('PidMode', $data) && null === $data['PidMode']) { + $object->setPidMode(null); + } + if (\array_key_exists('Privileged', $data) && null !== $data['Privileged']) { + $object->setPrivileged($data['Privileged']); + unset($data['Privileged']); + } elseif (\array_key_exists('Privileged', $data) && null === $data['Privileged']) { + $object->setPrivileged(null); + } + if (\array_key_exists('PublishAllPorts', $data) && null !== $data['PublishAllPorts']) { + $object->setPublishAllPorts($data['PublishAllPorts']); + unset($data['PublishAllPorts']); + } elseif (\array_key_exists('PublishAllPorts', $data) && null === $data['PublishAllPorts']) { + $object->setPublishAllPorts(null); + } + if (\array_key_exists('ReadonlyRootfs', $data) && null !== $data['ReadonlyRootfs']) { + $object->setReadonlyRootfs($data['ReadonlyRootfs']); + unset($data['ReadonlyRootfs']); + } elseif (\array_key_exists('ReadonlyRootfs', $data) && null === $data['ReadonlyRootfs']) { + $object->setReadonlyRootfs(null); + } + if (\array_key_exists('SecurityOpt', $data) && null !== $data['SecurityOpt']) { + $values_24 = []; + foreach ($data['SecurityOpt'] as $value_24) { + $values_24[] = $value_24; + } + $object->setSecurityOpt($values_24); + unset($data['SecurityOpt']); + } elseif (\array_key_exists('SecurityOpt', $data) && null === $data['SecurityOpt']) { + $object->setSecurityOpt(null); + } + if (\array_key_exists('StorageOpt', $data) && null !== $data['StorageOpt']) { + $values_25 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['StorageOpt'] as $key_2 => $value_25) { + $values_25[$key_2] = $value_25; + } + $object->setStorageOpt($values_25); + unset($data['StorageOpt']); + } elseif (\array_key_exists('StorageOpt', $data) && null === $data['StorageOpt']) { + $object->setStorageOpt(null); + } + if (\array_key_exists('Tmpfs', $data) && null !== $data['Tmpfs']) { + $values_26 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Tmpfs'] as $key_3 => $value_26) { + $values_26[$key_3] = $value_26; + } + $object->setTmpfs($values_26); + unset($data['Tmpfs']); + } elseif (\array_key_exists('Tmpfs', $data) && null === $data['Tmpfs']) { + $object->setTmpfs(null); + } + if (\array_key_exists('UTSMode', $data) && null !== $data['UTSMode']) { + $object->setUTSMode($data['UTSMode']); + unset($data['UTSMode']); + } elseif (\array_key_exists('UTSMode', $data) && null === $data['UTSMode']) { + $object->setUTSMode(null); + } + if (\array_key_exists('UsernsMode', $data) && null !== $data['UsernsMode']) { + $object->setUsernsMode($data['UsernsMode']); + unset($data['UsernsMode']); + } elseif (\array_key_exists('UsernsMode', $data) && null === $data['UsernsMode']) { + $object->setUsernsMode(null); + } + if (\array_key_exists('ShmSize', $data) && null !== $data['ShmSize']) { + $object->setShmSize($data['ShmSize']); + unset($data['ShmSize']); + } elseif (\array_key_exists('ShmSize', $data) && null === $data['ShmSize']) { + $object->setShmSize(null); + } + if (\array_key_exists('Sysctls', $data) && null !== $data['Sysctls']) { + $values_27 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Sysctls'] as $key_4 => $value_27) { + $values_27[$key_4] = $value_27; + } + $object->setSysctls($values_27); + unset($data['Sysctls']); + } elseif (\array_key_exists('Sysctls', $data) && null === $data['Sysctls']) { + $object->setSysctls(null); + } + if (\array_key_exists('Runtime', $data) && null !== $data['Runtime']) { + $object->setRuntime($data['Runtime']); + unset($data['Runtime']); + } elseif (\array_key_exists('Runtime', $data) && null === $data['Runtime']) { + $object->setRuntime(null); + } + if (\array_key_exists('Isolation', $data) && null !== $data['Isolation']) { + $object->setIsolation($data['Isolation']); + unset($data['Isolation']); + } elseif (\array_key_exists('Isolation', $data) && null === $data['Isolation']) { + $object->setIsolation(null); + } + if (\array_key_exists('MaskedPaths', $data) && null !== $data['MaskedPaths']) { + $values_28 = []; + foreach ($data['MaskedPaths'] as $value_28) { + $values_28[] = $value_28; + } + $object->setMaskedPaths($values_28); + unset($data['MaskedPaths']); + } elseif (\array_key_exists('MaskedPaths', $data) && null === $data['MaskedPaths']) { + $object->setMaskedPaths(null); + } + if (\array_key_exists('ReadonlyPaths', $data) && null !== $data['ReadonlyPaths']) { + $values_29 = []; + foreach ($data['ReadonlyPaths'] as $value_29) { + $values_29[] = $value_29; + } + $object->setReadonlyPaths($values_29); + unset($data['ReadonlyPaths']); + } elseif (\array_key_exists('ReadonlyPaths', $data) && null === $data['ReadonlyPaths']) { + $object->setReadonlyPaths(null); + } + foreach ($data as $key_5 => $value_30) { + if (preg_match('/.*/', (string) $key_5)) { + $object[$key_5] = $value_30; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('cpuShares') && null !== $data->getCpuShares()) { + $dataArray['CpuShares'] = $data->getCpuShares(); + } + if ($data->isInitialized('memory') && null !== $data->getMemory()) { + $dataArray['Memory'] = $data->getMemory(); + } + if ($data->isInitialized('cgroupParent') && null !== $data->getCgroupParent()) { + $dataArray['CgroupParent'] = $data->getCgroupParent(); + } + if ($data->isInitialized('blkioWeight') && null !== $data->getBlkioWeight()) { + $dataArray['BlkioWeight'] = $data->getBlkioWeight(); + } + if ($data->isInitialized('blkioWeightDevice') && null !== $data->getBlkioWeightDevice()) { + $values = []; + foreach ($data->getBlkioWeightDevice() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['BlkioWeightDevice'] = $values; + } + if ($data->isInitialized('blkioDeviceReadBps') && null !== $data->getBlkioDeviceReadBps()) { + $values_1 = []; + foreach ($data->getBlkioDeviceReadBps() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['BlkioDeviceReadBps'] = $values_1; + } + if ($data->isInitialized('blkioDeviceWriteBps') && null !== $data->getBlkioDeviceWriteBps()) { + $values_2 = []; + foreach ($data->getBlkioDeviceWriteBps() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['BlkioDeviceWriteBps'] = $values_2; + } + if ($data->isInitialized('blkioDeviceReadIOps') && null !== $data->getBlkioDeviceReadIOps()) { + $values_3 = []; + foreach ($data->getBlkioDeviceReadIOps() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['BlkioDeviceReadIOps'] = $values_3; + } + if ($data->isInitialized('blkioDeviceWriteIOps') && null !== $data->getBlkioDeviceWriteIOps()) { + $values_4 = []; + foreach ($data->getBlkioDeviceWriteIOps() as $value_4) { + $values_4[] = $this->normalizer->normalize($value_4, 'json', $context); + } + $dataArray['BlkioDeviceWriteIOps'] = $values_4; + } + if ($data->isInitialized('cpuPeriod') && null !== $data->getCpuPeriod()) { + $dataArray['CpuPeriod'] = $data->getCpuPeriod(); + } + if ($data->isInitialized('cpuQuota') && null !== $data->getCpuQuota()) { + $dataArray['CpuQuota'] = $data->getCpuQuota(); + } + if ($data->isInitialized('cpuRealtimePeriod') && null !== $data->getCpuRealtimePeriod()) { + $dataArray['CpuRealtimePeriod'] = $data->getCpuRealtimePeriod(); + } + if ($data->isInitialized('cpuRealtimeRuntime') && null !== $data->getCpuRealtimeRuntime()) { + $dataArray['CpuRealtimeRuntime'] = $data->getCpuRealtimeRuntime(); + } + if ($data->isInitialized('cpusetCpus') && null !== $data->getCpusetCpus()) { + $dataArray['CpusetCpus'] = $data->getCpusetCpus(); + } + if ($data->isInitialized('cpusetMems') && null !== $data->getCpusetMems()) { + $dataArray['CpusetMems'] = $data->getCpusetMems(); + } + if ($data->isInitialized('devices') && null !== $data->getDevices()) { + $values_5 = []; + foreach ($data->getDevices() as $value_5) { + $values_5[] = $this->normalizer->normalize($value_5, 'json', $context); + } + $dataArray['Devices'] = $values_5; + } + if ($data->isInitialized('deviceCgroupRules') && null !== $data->getDeviceCgroupRules()) { + $values_6 = []; + foreach ($data->getDeviceCgroupRules() as $value_6) { + $values_6[] = $value_6; + } + $dataArray['DeviceCgroupRules'] = $values_6; + } + if ($data->isInitialized('deviceRequests') && null !== $data->getDeviceRequests()) { + $values_7 = []; + foreach ($data->getDeviceRequests() as $value_7) { + $values_7[] = $this->normalizer->normalize($value_7, 'json', $context); + } + $dataArray['DeviceRequests'] = $values_7; + } + if ($data->isInitialized('kernelMemoryTCP') && null !== $data->getKernelMemoryTCP()) { + $dataArray['KernelMemoryTCP'] = $data->getKernelMemoryTCP(); + } + if ($data->isInitialized('memoryReservation') && null !== $data->getMemoryReservation()) { + $dataArray['MemoryReservation'] = $data->getMemoryReservation(); + } + if ($data->isInitialized('memorySwap') && null !== $data->getMemorySwap()) { + $dataArray['MemorySwap'] = $data->getMemorySwap(); + } + if ($data->isInitialized('memorySwappiness') && null !== $data->getMemorySwappiness()) { + $dataArray['MemorySwappiness'] = $data->getMemorySwappiness(); + } + if ($data->isInitialized('nanoCpus') && null !== $data->getNanoCpus()) { + $dataArray['NanoCpus'] = $data->getNanoCpus(); + } + if ($data->isInitialized('oomKillDisable') && null !== $data->getOomKillDisable()) { + $dataArray['OomKillDisable'] = $data->getOomKillDisable(); + } + if ($data->isInitialized('init') && null !== $data->getInit()) { + $dataArray['Init'] = $data->getInit(); + } + if ($data->isInitialized('pidsLimit') && null !== $data->getPidsLimit()) { + $dataArray['PidsLimit'] = $data->getPidsLimit(); + } + if ($data->isInitialized('ulimits') && null !== $data->getUlimits()) { + $values_8 = []; + foreach ($data->getUlimits() as $value_8) { + $values_8[] = $this->normalizer->normalize($value_8, 'json', $context); + } + $dataArray['Ulimits'] = $values_8; + } + if ($data->isInitialized('cpuCount') && null !== $data->getCpuCount()) { + $dataArray['CpuCount'] = $data->getCpuCount(); + } + if ($data->isInitialized('cpuPercent') && null !== $data->getCpuPercent()) { + $dataArray['CpuPercent'] = $data->getCpuPercent(); + } + if ($data->isInitialized('iOMaximumIOps') && null !== $data->getIOMaximumIOps()) { + $dataArray['IOMaximumIOps'] = $data->getIOMaximumIOps(); + } + if ($data->isInitialized('iOMaximumBandwidth') && null !== $data->getIOMaximumBandwidth()) { + $dataArray['IOMaximumBandwidth'] = $data->getIOMaximumBandwidth(); + } + if ($data->isInitialized('binds') && null !== $data->getBinds()) { + $values_9 = []; + foreach ($data->getBinds() as $value_9) { + $values_9[] = $value_9; + } + $dataArray['Binds'] = $values_9; + } + if ($data->isInitialized('containerIDFile') && null !== $data->getContainerIDFile()) { + $dataArray['ContainerIDFile'] = $data->getContainerIDFile(); + } + if ($data->isInitialized('logConfig') && null !== $data->getLogConfig()) { + $dataArray['LogConfig'] = $this->normalizer->normalize($data->getLogConfig(), 'json', $context); + } + if ($data->isInitialized('networkMode') && null !== $data->getNetworkMode()) { + $dataArray['NetworkMode'] = $data->getNetworkMode(); + } + if ($data->isInitialized('portBindings') && null !== $data->getPortBindings()) { + $values_10 = []; + foreach ($data->getPortBindings() as $key => $value_10) { + $values_11 = []; + foreach ($value_10 as $value_11) { + $values_11[] = $this->normalizer->normalize($value_11, 'json', $context); + } + $values_10[$key] = $values_11; + } + $dataArray['PortBindings'] = $values_10; + } + if ($data->isInitialized('restartPolicy') && null !== $data->getRestartPolicy()) { + $dataArray['RestartPolicy'] = $this->normalizer->normalize($data->getRestartPolicy(), 'json', $context); + } + if ($data->isInitialized('autoRemove') && null !== $data->getAutoRemove()) { + $dataArray['AutoRemove'] = $data->getAutoRemove(); + } + if ($data->isInitialized('volumeDriver') && null !== $data->getVolumeDriver()) { + $dataArray['VolumeDriver'] = $data->getVolumeDriver(); + } + if ($data->isInitialized('volumesFrom') && null !== $data->getVolumesFrom()) { + $values_12 = []; + foreach ($data->getVolumesFrom() as $value_12) { + $values_12[] = $value_12; + } + $dataArray['VolumesFrom'] = $values_12; + } + if ($data->isInitialized('mounts') && null !== $data->getMounts()) { + $values_13 = []; + foreach ($data->getMounts() as $value_13) { + $values_13[] = $this->normalizer->normalize($value_13, 'json', $context); + } + $dataArray['Mounts'] = $values_13; + } + if ($data->isInitialized('consoleSize') && null !== $data->getConsoleSize()) { + $values_14 = []; + foreach ($data->getConsoleSize() as $value_14) { + $values_14[] = $value_14; + } + $dataArray['ConsoleSize'] = $values_14; + } + if ($data->isInitialized('annotations') && null !== $data->getAnnotations()) { + $values_15 = []; + foreach ($data->getAnnotations() as $key_1 => $value_15) { + $values_15[$key_1] = $value_15; + } + $dataArray['Annotations'] = $values_15; + } + if ($data->isInitialized('capAdd') && null !== $data->getCapAdd()) { + $values_16 = []; + foreach ($data->getCapAdd() as $value_16) { + $values_16[] = $value_16; + } + $dataArray['CapAdd'] = $values_16; + } + if ($data->isInitialized('capDrop') && null !== $data->getCapDrop()) { + $values_17 = []; + foreach ($data->getCapDrop() as $value_17) { + $values_17[] = $value_17; + } + $dataArray['CapDrop'] = $values_17; + } + if ($data->isInitialized('cgroupnsMode') && null !== $data->getCgroupnsMode()) { + $dataArray['CgroupnsMode'] = $data->getCgroupnsMode(); + } + if ($data->isInitialized('dns') && null !== $data->getDns()) { + $values_18 = []; + foreach ($data->getDns() as $value_18) { + $values_18[] = $value_18; + } + $dataArray['Dns'] = $values_18; + } + if ($data->isInitialized('dnsOptions') && null !== $data->getDnsOptions()) { + $values_19 = []; + foreach ($data->getDnsOptions() as $value_19) { + $values_19[] = $value_19; + } + $dataArray['DnsOptions'] = $values_19; + } + if ($data->isInitialized('dnsSearch') && null !== $data->getDnsSearch()) { + $values_20 = []; + foreach ($data->getDnsSearch() as $value_20) { + $values_20[] = $value_20; + } + $dataArray['DnsSearch'] = $values_20; + } + if ($data->isInitialized('extraHosts') && null !== $data->getExtraHosts()) { + $values_21 = []; + foreach ($data->getExtraHosts() as $value_21) { + $values_21[] = $value_21; + } + $dataArray['ExtraHosts'] = $values_21; + } + if ($data->isInitialized('groupAdd') && null !== $data->getGroupAdd()) { + $values_22 = []; + foreach ($data->getGroupAdd() as $value_22) { + $values_22[] = $value_22; + } + $dataArray['GroupAdd'] = $values_22; + } + if ($data->isInitialized('ipcMode') && null !== $data->getIpcMode()) { + $dataArray['IpcMode'] = $data->getIpcMode(); + } + if ($data->isInitialized('cgroup') && null !== $data->getCgroup()) { + $dataArray['Cgroup'] = $data->getCgroup(); + } + if ($data->isInitialized('links') && null !== $data->getLinks()) { + $values_23 = []; + foreach ($data->getLinks() as $value_23) { + $values_23[] = $value_23; + } + $dataArray['Links'] = $values_23; + } + if ($data->isInitialized('oomScoreAdj') && null !== $data->getOomScoreAdj()) { + $dataArray['OomScoreAdj'] = $data->getOomScoreAdj(); + } + if ($data->isInitialized('pidMode') && null !== $data->getPidMode()) { + $dataArray['PidMode'] = $data->getPidMode(); + } + if ($data->isInitialized('privileged') && null !== $data->getPrivileged()) { + $dataArray['Privileged'] = $data->getPrivileged(); + } + if ($data->isInitialized('publishAllPorts') && null !== $data->getPublishAllPorts()) { + $dataArray['PublishAllPorts'] = $data->getPublishAllPorts(); + } + if ($data->isInitialized('readonlyRootfs') && null !== $data->getReadonlyRootfs()) { + $dataArray['ReadonlyRootfs'] = $data->getReadonlyRootfs(); + } + if ($data->isInitialized('securityOpt') && null !== $data->getSecurityOpt()) { + $values_24 = []; + foreach ($data->getSecurityOpt() as $value_24) { + $values_24[] = $value_24; + } + $dataArray['SecurityOpt'] = $values_24; + } + if ($data->isInitialized('storageOpt') && null !== $data->getStorageOpt()) { + $values_25 = []; + foreach ($data->getStorageOpt() as $key_2 => $value_25) { + $values_25[$key_2] = $value_25; + } + $dataArray['StorageOpt'] = $values_25; + } + if ($data->isInitialized('tmpfs') && null !== $data->getTmpfs()) { + $values_26 = []; + foreach ($data->getTmpfs() as $key_3 => $value_26) { + $values_26[$key_3] = $value_26; + } + $dataArray['Tmpfs'] = $values_26; + } + if ($data->isInitialized('uTSMode') && null !== $data->getUTSMode()) { + $dataArray['UTSMode'] = $data->getUTSMode(); + } + if ($data->isInitialized('usernsMode') && null !== $data->getUsernsMode()) { + $dataArray['UsernsMode'] = $data->getUsernsMode(); + } + if ($data->isInitialized('shmSize') && null !== $data->getShmSize()) { + $dataArray['ShmSize'] = $data->getShmSize(); + } + if ($data->isInitialized('sysctls') && null !== $data->getSysctls()) { + $values_27 = []; + foreach ($data->getSysctls() as $key_4 => $value_27) { + $values_27[$key_4] = $value_27; + } + $dataArray['Sysctls'] = $values_27; + } + if ($data->isInitialized('runtime') && null !== $data->getRuntime()) { + $dataArray['Runtime'] = $data->getRuntime(); + } + if ($data->isInitialized('isolation') && null !== $data->getIsolation()) { + $dataArray['Isolation'] = $data->getIsolation(); + } + if ($data->isInitialized('maskedPaths') && null !== $data->getMaskedPaths()) { + $values_28 = []; + foreach ($data->getMaskedPaths() as $value_28) { + $values_28[] = $value_28; + } + $dataArray['MaskedPaths'] = $values_28; + } + if ($data->isInitialized('readonlyPaths') && null !== $data->getReadonlyPaths()) { + $values_29 = []; + foreach ($data->getReadonlyPaths() as $value_29) { + $values_29[] = $value_29; + } + $dataArray['ReadonlyPaths'] = $values_29; + } + foreach ($data as $key_5 => $value_30) { + if (preg_match('/.*/', (string) $key_5)) { + $dataArray[$key_5] = $value_30; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\HostConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/IPAMConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IPAMConfigNormalizer.php new file mode 100644 index 000000000..97eada1c1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IPAMConfigNormalizer.php @@ -0,0 +1,115 @@ +setSubnet($data['Subnet']); + unset($data['Subnet']); + } elseif (\array_key_exists('Subnet', $data) && null === $data['Subnet']) { + $object->setSubnet(null); + } + if (\array_key_exists('IPRange', $data) && null !== $data['IPRange']) { + $object->setIPRange($data['IPRange']); + unset($data['IPRange']); + } elseif (\array_key_exists('IPRange', $data) && null === $data['IPRange']) { + $object->setIPRange(null); + } + if (\array_key_exists('Gateway', $data) && null !== $data['Gateway']) { + $object->setGateway($data['Gateway']); + unset($data['Gateway']); + } elseif (\array_key_exists('Gateway', $data) && null === $data['Gateway']) { + $object->setGateway(null); + } + if (\array_key_exists('AuxiliaryAddresses', $data) && null !== $data['AuxiliaryAddresses']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['AuxiliaryAddresses'] as $key => $value) { + $values[$key] = $value; + } + $object->setAuxiliaryAddresses($values); + unset($data['AuxiliaryAddresses']); + } elseif (\array_key_exists('AuxiliaryAddresses', $data) && null === $data['AuxiliaryAddresses']) { + $object->setAuxiliaryAddresses(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('subnet') && null !== $data->getSubnet()) { + $dataArray['Subnet'] = $data->getSubnet(); + } + if ($data->isInitialized('iPRange') && null !== $data->getIPRange()) { + $dataArray['IPRange'] = $data->getIPRange(); + } + if ($data->isInitialized('gateway') && null !== $data->getGateway()) { + $dataArray['Gateway'] = $data->getGateway(); + } + if ($data->isInitialized('auxiliaryAddresses') && null !== $data->getAuxiliaryAddresses()) { + $values = []; + foreach ($data->getAuxiliaryAddresses() as $key => $value) { + $values[$key] = $value; + } + $dataArray['AuxiliaryAddresses'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\IPAMConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/IPAMNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IPAMNormalizer.php new file mode 100644 index 000000000..7f9c3d04b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IPAMNormalizer.php @@ -0,0 +1,114 @@ +setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Config', $data) && null !== $data['Config']) { + $values = []; + foreach ($data['Config'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\IPAMConfig::class, 'json', $context); + } + $object->setConfig($values); + unset($data['Config']); + } elseif (\array_key_exists('Config', $data) && null === $data['Config']) { + $object->setConfig(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value_1) { + $values_1[$key] = $value_1; + } + $object->setOptions($values_1); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('config') && null !== $data->getConfig()) { + $values = []; + foreach ($data->getConfig() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Config'] = $values; + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values_1 = []; + foreach ($data->getOptions() as $key => $value_1) { + $values_1[$key] = $value_1; + } + $dataArray['Options'] = $values_1; + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\IPAM::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/IdResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IdResponseNormalizer.php new file mode 100644 index 000000000..eb44ba36f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IdResponseNormalizer.php @@ -0,0 +1,78 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Id'] = $data->getId(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\IdResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageDeleteResponseItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageDeleteResponseItemNormalizer.php new file mode 100644 index 000000000..f68fdf9a7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageDeleteResponseItemNormalizer.php @@ -0,0 +1,89 @@ +setUntagged($data['Untagged']); + unset($data['Untagged']); + } elseif (\array_key_exists('Untagged', $data) && null === $data['Untagged']) { + $object->setUntagged(null); + } + if (\array_key_exists('Deleted', $data) && null !== $data['Deleted']) { + $object->setDeleted($data['Deleted']); + unset($data['Deleted']); + } elseif (\array_key_exists('Deleted', $data) && null === $data['Deleted']) { + $object->setDeleted(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('untagged') && null !== $data->getUntagged()) { + $dataArray['Untagged'] = $data->getUntagged(); + } + if ($data->isInitialized('deleted') && null !== $data->getDeleted()) { + $dataArray['Deleted'] = $data->getDeleted(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImageDeleteResponseItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageIDNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageIDNormalizer.php new file mode 100644 index 000000000..0136eb38c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageIDNormalizer.php @@ -0,0 +1,80 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImageID::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectMetadataNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectMetadataNormalizer.php new file mode 100644 index 000000000..278ec3585 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectMetadataNormalizer.php @@ -0,0 +1,80 @@ +setLastTagTime($data['LastTagTime']); + unset($data['LastTagTime']); + } elseif (\array_key_exists('LastTagTime', $data) && null === $data['LastTagTime']) { + $object->setLastTagTime(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('lastTagTime') && null !== $data->getLastTagTime()) { + $dataArray['LastTagTime'] = $data->getLastTagTime(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImageInspectMetadata::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectNormalizer.php new file mode 100644 index 000000000..2a4589ab1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectNormalizer.php @@ -0,0 +1,267 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('RepoTags', $data) && null !== $data['RepoTags']) { + $values = []; + foreach ($data['RepoTags'] as $value) { + $values[] = $value; + } + $object->setRepoTags($values); + unset($data['RepoTags']); + } elseif (\array_key_exists('RepoTags', $data) && null === $data['RepoTags']) { + $object->setRepoTags(null); + } + if (\array_key_exists('RepoDigests', $data) && null !== $data['RepoDigests']) { + $values_1 = []; + foreach ($data['RepoDigests'] as $value_1) { + $values_1[] = $value_1; + } + $object->setRepoDigests($values_1); + unset($data['RepoDigests']); + } elseif (\array_key_exists('RepoDigests', $data) && null === $data['RepoDigests']) { + $object->setRepoDigests(null); + } + if (\array_key_exists('Parent', $data) && null !== $data['Parent']) { + $object->setParent($data['Parent']); + unset($data['Parent']); + } elseif (\array_key_exists('Parent', $data) && null === $data['Parent']) { + $object->setParent(null); + } + if (\array_key_exists('Comment', $data) && null !== $data['Comment']) { + $object->setComment($data['Comment']); + unset($data['Comment']); + } elseif (\array_key_exists('Comment', $data) && null === $data['Comment']) { + $object->setComment(null); + } + if (\array_key_exists('Created', $data) && null !== $data['Created']) { + $object->setCreated($data['Created']); + unset($data['Created']); + } elseif (\array_key_exists('Created', $data) && null === $data['Created']) { + $object->setCreated(null); + } + if (\array_key_exists('Container', $data) && null !== $data['Container']) { + $object->setContainer($data['Container']); + unset($data['Container']); + } elseif (\array_key_exists('Container', $data) && null === $data['Container']) { + $object->setContainer(null); + } + if (\array_key_exists('ContainerConfig', $data) && null !== $data['ContainerConfig']) { + $object->setContainerConfig($this->denormalizer->denormalize($data['ContainerConfig'], \Docker\API\Model\ContainerConfig::class, 'json', $context)); + unset($data['ContainerConfig']); + } elseif (\array_key_exists('ContainerConfig', $data) && null === $data['ContainerConfig']) { + $object->setContainerConfig(null); + } + if (\array_key_exists('DockerVersion', $data) && null !== $data['DockerVersion']) { + $object->setDockerVersion($data['DockerVersion']); + unset($data['DockerVersion']); + } elseif (\array_key_exists('DockerVersion', $data) && null === $data['DockerVersion']) { + $object->setDockerVersion(null); + } + if (\array_key_exists('Author', $data) && null !== $data['Author']) { + $object->setAuthor($data['Author']); + unset($data['Author']); + } elseif (\array_key_exists('Author', $data) && null === $data['Author']) { + $object->setAuthor(null); + } + if (\array_key_exists('Config', $data) && null !== $data['Config']) { + $object->setConfig($this->denormalizer->denormalize($data['Config'], \Docker\API\Model\ContainerConfig::class, 'json', $context)); + unset($data['Config']); + } elseif (\array_key_exists('Config', $data) && null === $data['Config']) { + $object->setConfig(null); + } + if (\array_key_exists('Architecture', $data) && null !== $data['Architecture']) { + $object->setArchitecture($data['Architecture']); + unset($data['Architecture']); + } elseif (\array_key_exists('Architecture', $data) && null === $data['Architecture']) { + $object->setArchitecture(null); + } + if (\array_key_exists('Variant', $data) && null !== $data['Variant']) { + $object->setVariant($data['Variant']); + unset($data['Variant']); + } elseif (\array_key_exists('Variant', $data) && null === $data['Variant']) { + $object->setVariant(null); + } + if (\array_key_exists('Os', $data) && null !== $data['Os']) { + $object->setOs($data['Os']); + unset($data['Os']); + } elseif (\array_key_exists('Os', $data) && null === $data['Os']) { + $object->setOs(null); + } + if (\array_key_exists('OsVersion', $data) && null !== $data['OsVersion']) { + $object->setOsVersion($data['OsVersion']); + unset($data['OsVersion']); + } elseif (\array_key_exists('OsVersion', $data) && null === $data['OsVersion']) { + $object->setOsVersion(null); + } + if (\array_key_exists('Size', $data) && null !== $data['Size']) { + $object->setSize($data['Size']); + unset($data['Size']); + } elseif (\array_key_exists('Size', $data) && null === $data['Size']) { + $object->setSize(null); + } + if (\array_key_exists('VirtualSize', $data) && null !== $data['VirtualSize']) { + $object->setVirtualSize($data['VirtualSize']); + unset($data['VirtualSize']); + } elseif (\array_key_exists('VirtualSize', $data) && null === $data['VirtualSize']) { + $object->setVirtualSize(null); + } + if (\array_key_exists('GraphDriver', $data) && null !== $data['GraphDriver']) { + $object->setGraphDriver($this->denormalizer->denormalize($data['GraphDriver'], \Docker\API\Model\GraphDriverData::class, 'json', $context)); + unset($data['GraphDriver']); + } elseif (\array_key_exists('GraphDriver', $data) && null === $data['GraphDriver']) { + $object->setGraphDriver(null); + } + if (\array_key_exists('RootFS', $data) && null !== $data['RootFS']) { + $object->setRootFS($this->denormalizer->denormalize($data['RootFS'], \Docker\API\Model\ImageInspectRootFS::class, 'json', $context)); + unset($data['RootFS']); + } elseif (\array_key_exists('RootFS', $data) && null === $data['RootFS']) { + $object->setRootFS(null); + } + if (\array_key_exists('Metadata', $data) && null !== $data['Metadata']) { + $object->setMetadata($this->denormalizer->denormalize($data['Metadata'], \Docker\API\Model\ImageInspectMetadata::class, 'json', $context)); + unset($data['Metadata']); + } elseif (\array_key_exists('Metadata', $data) && null === $data['Metadata']) { + $object->setMetadata(null); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['Id'] = $data->getId(); + } + if ($data->isInitialized('repoTags') && null !== $data->getRepoTags()) { + $values = []; + foreach ($data->getRepoTags() as $value) { + $values[] = $value; + } + $dataArray['RepoTags'] = $values; + } + if ($data->isInitialized('repoDigests') && null !== $data->getRepoDigests()) { + $values_1 = []; + foreach ($data->getRepoDigests() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['RepoDigests'] = $values_1; + } + if ($data->isInitialized('parent') && null !== $data->getParent()) { + $dataArray['Parent'] = $data->getParent(); + } + if ($data->isInitialized('comment') && null !== $data->getComment()) { + $dataArray['Comment'] = $data->getComment(); + } + if ($data->isInitialized('created') && null !== $data->getCreated()) { + $dataArray['Created'] = $data->getCreated(); + } + if ($data->isInitialized('container') && null !== $data->getContainer()) { + $dataArray['Container'] = $data->getContainer(); + } + if ($data->isInitialized('containerConfig') && null !== $data->getContainerConfig()) { + $dataArray['ContainerConfig'] = $this->normalizer->normalize($data->getContainerConfig(), 'json', $context); + } + if ($data->isInitialized('dockerVersion') && null !== $data->getDockerVersion()) { + $dataArray['DockerVersion'] = $data->getDockerVersion(); + } + if ($data->isInitialized('author') && null !== $data->getAuthor()) { + $dataArray['Author'] = $data->getAuthor(); + } + if ($data->isInitialized('config') && null !== $data->getConfig()) { + $dataArray['Config'] = $this->normalizer->normalize($data->getConfig(), 'json', $context); + } + if ($data->isInitialized('architecture') && null !== $data->getArchitecture()) { + $dataArray['Architecture'] = $data->getArchitecture(); + } + if ($data->isInitialized('variant') && null !== $data->getVariant()) { + $dataArray['Variant'] = $data->getVariant(); + } + if ($data->isInitialized('os') && null !== $data->getOs()) { + $dataArray['Os'] = $data->getOs(); + } + if ($data->isInitialized('osVersion') && null !== $data->getOsVersion()) { + $dataArray['OsVersion'] = $data->getOsVersion(); + } + if ($data->isInitialized('size') && null !== $data->getSize()) { + $dataArray['Size'] = $data->getSize(); + } + if ($data->isInitialized('virtualSize') && null !== $data->getVirtualSize()) { + $dataArray['VirtualSize'] = $data->getVirtualSize(); + } + if ($data->isInitialized('graphDriver') && null !== $data->getGraphDriver()) { + $dataArray['GraphDriver'] = $this->normalizer->normalize($data->getGraphDriver(), 'json', $context); + } + if ($data->isInitialized('rootFS') && null !== $data->getRootFS()) { + $dataArray['RootFS'] = $this->normalizer->normalize($data->getRootFS(), 'json', $context); + } + if ($data->isInitialized('metadata') && null !== $data->getMetadata()) { + $dataArray['Metadata'] = $this->normalizer->normalize($data->getMetadata(), 'json', $context); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImageInspect::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectRootFSNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectRootFSNormalizer.php new file mode 100644 index 000000000..6bfa8e6aa --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageInspectRootFSNormalizer.php @@ -0,0 +1,95 @@ +setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Layers', $data) && null !== $data['Layers']) { + $values = []; + foreach ($data['Layers'] as $value) { + $values[] = $value; + } + $object->setLayers($values); + unset($data['Layers']); + } elseif (\array_key_exists('Layers', $data) && null === $data['Layers']) { + $object->setLayers(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Type'] = $data->getType(); + if ($data->isInitialized('layers') && null !== $data->getLayers()) { + $values = []; + foreach ($data->getLayers() as $value) { + $values[] = $value; + } + $dataArray['Layers'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImageInspectRootFS::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageSummaryNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageSummaryNormalizer.php new file mode 100644 index 000000000..c859b864b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImageSummaryNormalizer.php @@ -0,0 +1,167 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('ParentId', $data) && null !== $data['ParentId']) { + $object->setParentId($data['ParentId']); + unset($data['ParentId']); + } elseif (\array_key_exists('ParentId', $data) && null === $data['ParentId']) { + $object->setParentId(null); + } + if (\array_key_exists('RepoTags', $data) && null !== $data['RepoTags']) { + $values = []; + foreach ($data['RepoTags'] as $value) { + $values[] = $value; + } + $object->setRepoTags($values); + unset($data['RepoTags']); + } elseif (\array_key_exists('RepoTags', $data) && null === $data['RepoTags']) { + $object->setRepoTags(null); + } + if (\array_key_exists('RepoDigests', $data) && null !== $data['RepoDigests']) { + $values_1 = []; + foreach ($data['RepoDigests'] as $value_1) { + $values_1[] = $value_1; + } + $object->setRepoDigests($values_1); + unset($data['RepoDigests']); + } elseif (\array_key_exists('RepoDigests', $data) && null === $data['RepoDigests']) { + $object->setRepoDigests(null); + } + if (\array_key_exists('Created', $data) && null !== $data['Created']) { + $object->setCreated($data['Created']); + unset($data['Created']); + } elseif (\array_key_exists('Created', $data) && null === $data['Created']) { + $object->setCreated(null); + } + if (\array_key_exists('Size', $data) && null !== $data['Size']) { + $object->setSize($data['Size']); + unset($data['Size']); + } elseif (\array_key_exists('Size', $data) && null === $data['Size']) { + $object->setSize(null); + } + if (\array_key_exists('SharedSize', $data) && null !== $data['SharedSize']) { + $object->setSharedSize($data['SharedSize']); + unset($data['SharedSize']); + } elseif (\array_key_exists('SharedSize', $data) && null === $data['SharedSize']) { + $object->setSharedSize(null); + } + if (\array_key_exists('VirtualSize', $data) && null !== $data['VirtualSize']) { + $object->setVirtualSize($data['VirtualSize']); + unset($data['VirtualSize']); + } elseif (\array_key_exists('VirtualSize', $data) && null === $data['VirtualSize']) { + $object->setVirtualSize(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_2 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value_2) { + $values_2[$key] = $value_2; + } + $object->setLabels($values_2); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Containers', $data) && null !== $data['Containers']) { + $object->setContainers($data['Containers']); + unset($data['Containers']); + } elseif (\array_key_exists('Containers', $data) && null === $data['Containers']) { + $object->setContainers(null); + } + foreach ($data as $key_1 => $value_3) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Id'] = $data->getId(); + $dataArray['ParentId'] = $data->getParentId(); + $values = []; + foreach ($data->getRepoTags() as $value) { + $values[] = $value; + } + $dataArray['RepoTags'] = $values; + $values_1 = []; + foreach ($data->getRepoDigests() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['RepoDigests'] = $values_1; + $dataArray['Created'] = $data->getCreated(); + $dataArray['Size'] = $data->getSize(); + $dataArray['SharedSize'] = $data->getSharedSize(); + if ($data->isInitialized('virtualSize') && null !== $data->getVirtualSize()) { + $dataArray['VirtualSize'] = $data->getVirtualSize(); + } + $values_2 = []; + foreach ($data->getLabels() as $key => $value_2) { + $values_2[$key] = $value_2; + } + $dataArray['Labels'] = $values_2; + $dataArray['Containers'] = $data->getContainers(); + foreach ($data as $key_1 => $value_3) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImageSummary::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesNameHistoryGetResponse200ItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesNameHistoryGetResponse200ItemNormalizer.php new file mode 100644 index 000000000..8a5087720 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesNameHistoryGetResponse200ItemNormalizer.php @@ -0,0 +1,121 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Created', $data) && null !== $data['Created']) { + $object->setCreated($data['Created']); + unset($data['Created']); + } elseif (\array_key_exists('Created', $data) && null === $data['Created']) { + $object->setCreated(null); + } + if (\array_key_exists('CreatedBy', $data) && null !== $data['CreatedBy']) { + $object->setCreatedBy($data['CreatedBy']); + unset($data['CreatedBy']); + } elseif (\array_key_exists('CreatedBy', $data) && null === $data['CreatedBy']) { + $object->setCreatedBy(null); + } + if (\array_key_exists('Tags', $data) && null !== $data['Tags']) { + $values = []; + foreach ($data['Tags'] as $value) { + $values[] = $value; + } + $object->setTags($values); + unset($data['Tags']); + } elseif (\array_key_exists('Tags', $data) && null === $data['Tags']) { + $object->setTags(null); + } + if (\array_key_exists('Size', $data) && null !== $data['Size']) { + $object->setSize($data['Size']); + unset($data['Size']); + } elseif (\array_key_exists('Size', $data) && null === $data['Size']) { + $object->setSize(null); + } + if (\array_key_exists('Comment', $data) && null !== $data['Comment']) { + $object->setComment($data['Comment']); + unset($data['Comment']); + } elseif (\array_key_exists('Comment', $data) && null === $data['Comment']) { + $object->setComment(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Id'] = $data->getId(); + $dataArray['Created'] = $data->getCreated(); + $dataArray['CreatedBy'] = $data->getCreatedBy(); + $values = []; + foreach ($data->getTags() as $value) { + $values[] = $value; + } + $dataArray['Tags'] = $values; + $dataArray['Size'] = $data->getSize(); + $dataArray['Comment'] = $data->getComment(); + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImagesNameHistoryGetResponse200Item::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesPrunePostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesPrunePostResponse200Normalizer.php new file mode 100644 index 000000000..5f8ab525b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesPrunePostResponse200Normalizer.php @@ -0,0 +1,97 @@ +denormalizer->denormalize($value, \Docker\API\Model\ImageDeleteResponseItem::class, 'json', $context); + } + $object->setImagesDeleted($values); + unset($data['ImagesDeleted']); + } elseif (\array_key_exists('ImagesDeleted', $data) && null === $data['ImagesDeleted']) { + $object->setImagesDeleted(null); + } + if (\array_key_exists('SpaceReclaimed', $data) && null !== $data['SpaceReclaimed']) { + $object->setSpaceReclaimed($data['SpaceReclaimed']); + unset($data['SpaceReclaimed']); + } elseif (\array_key_exists('SpaceReclaimed', $data) && null === $data['SpaceReclaimed']) { + $object->setSpaceReclaimed(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('imagesDeleted') && null !== $data->getImagesDeleted()) { + $values = []; + foreach ($data->getImagesDeleted() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['ImagesDeleted'] = $values; + } + if ($data->isInitialized('spaceReclaimed') && null !== $data->getSpaceReclaimed()) { + $dataArray['SpaceReclaimed'] = $data->getSpaceReclaimed(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImagesPrunePostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesSearchGetResponse200ItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesSearchGetResponse200ItemNormalizer.php new file mode 100644 index 000000000..f9ae204bf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ImagesSearchGetResponse200ItemNormalizer.php @@ -0,0 +1,122 @@ +setDescription($data['description']); + unset($data['description']); + } elseif (\array_key_exists('description', $data) && null === $data['description']) { + $object->setDescription(null); + } + if (\array_key_exists('is_official', $data) && null !== $data['is_official']) { + $object->setIsOfficial($data['is_official']); + unset($data['is_official']); + } elseif (\array_key_exists('is_official', $data) && null === $data['is_official']) { + $object->setIsOfficial(null); + } + if (\array_key_exists('is_automated', $data) && null !== $data['is_automated']) { + $object->setIsAutomated($data['is_automated']); + unset($data['is_automated']); + } elseif (\array_key_exists('is_automated', $data) && null === $data['is_automated']) { + $object->setIsAutomated(null); + } + if (\array_key_exists('name', $data) && null !== $data['name']) { + $object->setName($data['name']); + unset($data['name']); + } elseif (\array_key_exists('name', $data) && null === $data['name']) { + $object->setName(null); + } + if (\array_key_exists('star_count', $data) && null !== $data['star_count']) { + $object->setStarCount($data['star_count']); + unset($data['star_count']); + } elseif (\array_key_exists('star_count', $data) && null === $data['star_count']) { + $object->setStarCount(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('description') && null !== $data->getDescription()) { + $dataArray['description'] = $data->getDescription(); + } + if ($data->isInitialized('isOfficial') && null !== $data->getIsOfficial()) { + $dataArray['is_official'] = $data->getIsOfficial(); + } + if ($data->isInitialized('isAutomated') && null !== $data->getIsAutomated()) { + $dataArray['is_automated'] = $data->getIsAutomated(); + } + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['name'] = $data->getName(); + } + if ($data->isInitialized('starCount') && null !== $data->getStarCount()) { + $dataArray['star_count'] = $data->getStarCount(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ImagesSearchGetResponse200Item::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/IndexInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IndexInfoNormalizer.php new file mode 100644 index 000000000..aa7ba4945 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/IndexInfoNormalizer.php @@ -0,0 +1,121 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Mirrors', $data) && null !== $data['Mirrors']) { + $values = []; + foreach ($data['Mirrors'] as $value) { + $values[] = $value; + } + $object->setMirrors($values); + unset($data['Mirrors']); + } elseif (\array_key_exists('Mirrors', $data) && null === $data['Mirrors']) { + $object->setMirrors(null); + } + if (\array_key_exists('Secure', $data) && null !== $data['Secure']) { + $object->setSecure($data['Secure']); + unset($data['Secure']); + } elseif (\array_key_exists('Secure', $data) && null === $data['Secure']) { + $object->setSecure(null); + } + if (\array_key_exists('Official', $data) && null !== $data['Official']) { + $object->setOfficial($data['Official']); + unset($data['Official']); + } elseif (\array_key_exists('Official', $data) && null === $data['Official']) { + $object->setOfficial(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('mirrors') && null !== $data->getMirrors()) { + $values = []; + foreach ($data->getMirrors() as $value) { + $values[] = $value; + } + $dataArray['Mirrors'] = $values; + } + if ($data->isInitialized('secure') && null !== $data->getSecure()) { + $dataArray['Secure'] = $data->getSecure(); + } + if ($data->isInitialized('official') && null !== $data->getOfficial()) { + $dataArray['Official'] = $data->getOfficial(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\IndexInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/JaneObjectNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/JaneObjectNormalizer.php new file mode 100644 index 000000000..efc999059 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/JaneObjectNormalizer.php @@ -0,0 +1,713 @@ + PortNormalizer::class, + + \Docker\API\Model\MountPoint::class => MountPointNormalizer::class, + + \Docker\API\Model\DeviceMapping::class => DeviceMappingNormalizer::class, + + \Docker\API\Model\DeviceRequest::class => DeviceRequestNormalizer::class, + + \Docker\API\Model\ThrottleDevice::class => ThrottleDeviceNormalizer::class, + + \Docker\API\Model\Mount::class => MountNormalizer::class, + + \Docker\API\Model\MountBindOptions::class => MountBindOptionsNormalizer::class, + + \Docker\API\Model\MountVolumeOptions::class => MountVolumeOptionsNormalizer::class, + + \Docker\API\Model\MountVolumeOptionsDriverConfig::class => MountVolumeOptionsDriverConfigNormalizer::class, + + \Docker\API\Model\MountTmpfsOptions::class => MountTmpfsOptionsNormalizer::class, + + \Docker\API\Model\RestartPolicy::class => RestartPolicyNormalizer::class, + + \Docker\API\Model\Resources::class => ResourcesNormalizer::class, + + \Docker\API\Model\ResourcesBlkioWeightDeviceItem::class => ResourcesBlkioWeightDeviceItemNormalizer::class, + + \Docker\API\Model\ResourcesUlimitsItem::class => ResourcesUlimitsItemNormalizer::class, + + \Docker\API\Model\Limit::class => LimitNormalizer::class, + + \Docker\API\Model\ResourceObject::class => ResourceObjectNormalizer::class, + + \Docker\API\Model\GenericResourcesItem::class => GenericResourcesItemNormalizer::class, + + \Docker\API\Model\GenericResourcesItemNamedResourceSpec::class => GenericResourcesItemNamedResourceSpecNormalizer::class, + + \Docker\API\Model\GenericResourcesItemDiscreteResourceSpec::class => GenericResourcesItemDiscreteResourceSpecNormalizer::class, + + \Docker\API\Model\HealthConfig::class => HealthConfigNormalizer::class, + + \Docker\API\Model\Health::class => HealthNormalizer::class, + + \Docker\API\Model\HealthcheckResult::class => HealthcheckResultNormalizer::class, + + \Docker\API\Model\HostConfig::class => HostConfigNormalizer::class, + + \Docker\API\Model\HostConfigLogConfig::class => HostConfigLogConfigNormalizer::class, + + \Docker\API\Model\ContainerConfig::class => ContainerConfigNormalizer::class, + + \Docker\API\Model\ContainerConfigExposedPortsItem::class => ContainerConfigExposedPortsItemNormalizer::class, + + \Docker\API\Model\ContainerConfigVolumesItem::class => ContainerConfigVolumesItemNormalizer::class, + + \Docker\API\Model\NetworkingConfig::class => NetworkingConfigNormalizer::class, + + \Docker\API\Model\NetworkSettings::class => NetworkSettingsNormalizer::class, + + \Docker\API\Model\Address::class => AddressNormalizer::class, + + \Docker\API\Model\PortBinding::class => PortBindingNormalizer::class, + + \Docker\API\Model\GraphDriverData::class => GraphDriverDataNormalizer::class, + + \Docker\API\Model\FilesystemChange::class => FilesystemChangeNormalizer::class, + + \Docker\API\Model\ImageInspect::class => ImageInspectNormalizer::class, + + \Docker\API\Model\ImageInspectRootFS::class => ImageInspectRootFSNormalizer::class, + + \Docker\API\Model\ImageInspectMetadata::class => ImageInspectMetadataNormalizer::class, + + \Docker\API\Model\ImageSummary::class => ImageSummaryNormalizer::class, + + \Docker\API\Model\AuthConfig::class => AuthConfigNormalizer::class, + + \Docker\API\Model\ProcessConfig::class => ProcessConfigNormalizer::class, + + \Docker\API\Model\Volume::class => VolumeNormalizer::class, + + \Docker\API\Model\VolumeStatusItem::class => VolumeStatusItemNormalizer::class, + + \Docker\API\Model\VolumeUsageData::class => VolumeUsageDataNormalizer::class, + + \Docker\API\Model\VolumeCreateOptions::class => VolumeCreateOptionsNormalizer::class, + + \Docker\API\Model\VolumeListResponse::class => VolumeListResponseNormalizer::class, + + \Docker\API\Model\Network::class => NetworkNormalizer::class, + + \Docker\API\Model\IPAM::class => IPAMNormalizer::class, + + \Docker\API\Model\IPAMConfig::class => IPAMConfigNormalizer::class, + + \Docker\API\Model\NetworkContainer::class => NetworkContainerNormalizer::class, + + \Docker\API\Model\BuildInfo::class => BuildInfoNormalizer::class, + + \Docker\API\Model\BuildCache::class => BuildCacheNormalizer::class, + + \Docker\API\Model\ImageID::class => ImageIDNormalizer::class, + + \Docker\API\Model\CreateImageInfo::class => CreateImageInfoNormalizer::class, + + \Docker\API\Model\PushImageInfo::class => PushImageInfoNormalizer::class, + + \Docker\API\Model\ErrorDetail::class => ErrorDetailNormalizer::class, + + \Docker\API\Model\ProgressDetail::class => ProgressDetailNormalizer::class, + + \Docker\API\Model\ErrorResponse::class => ErrorResponseNormalizer::class, + + \Docker\API\Model\IdResponse::class => IdResponseNormalizer::class, + + \Docker\API\Model\EndpointSettings::class => EndpointSettingsNormalizer::class, + + \Docker\API\Model\EndpointIPAMConfig::class => EndpointIPAMConfigNormalizer::class, + + \Docker\API\Model\PluginMount::class => PluginMountNormalizer::class, + + \Docker\API\Model\PluginDevice::class => PluginDeviceNormalizer::class, + + \Docker\API\Model\PluginEnv::class => PluginEnvNormalizer::class, + + \Docker\API\Model\PluginInterfaceType::class => PluginInterfaceTypeNormalizer::class, + + \Docker\API\Model\PluginPrivilege::class => PluginPrivilegeNormalizer::class, + + \Docker\API\Model\Plugin::class => PluginNormalizer::class, + + \Docker\API\Model\PluginSettings::class => PluginSettingsNormalizer::class, + + \Docker\API\Model\PluginConfig::class => PluginConfigNormalizer::class, + + \Docker\API\Model\PluginConfigInterface::class => PluginConfigInterfaceNormalizer::class, + + \Docker\API\Model\PluginConfigUser::class => PluginConfigUserNormalizer::class, + + \Docker\API\Model\PluginConfigNetwork::class => PluginConfigNetworkNormalizer::class, + + \Docker\API\Model\PluginConfigLinux::class => PluginConfigLinuxNormalizer::class, + + \Docker\API\Model\PluginConfigArgs::class => PluginConfigArgsNormalizer::class, + + \Docker\API\Model\PluginConfigRootfs::class => PluginConfigRootfsNormalizer::class, + + \Docker\API\Model\ObjectVersion::class => ObjectVersionNormalizer::class, + + \Docker\API\Model\NodeSpec::class => NodeSpecNormalizer::class, + + \Docker\API\Model\Node::class => NodeNormalizer::class, + + \Docker\API\Model\NodeDescription::class => NodeDescriptionNormalizer::class, + + \Docker\API\Model\Platform::class => PlatformNormalizer::class, + + \Docker\API\Model\EngineDescription::class => EngineDescriptionNormalizer::class, + + \Docker\API\Model\EngineDescriptionPluginsItem::class => EngineDescriptionPluginsItemNormalizer::class, + + \Docker\API\Model\TLSInfo::class => TLSInfoNormalizer::class, + + \Docker\API\Model\NodeStatus::class => NodeStatusNormalizer::class, + + \Docker\API\Model\ManagerStatus::class => ManagerStatusNormalizer::class, + + \Docker\API\Model\SwarmSpec::class => SwarmSpecNormalizer::class, + + \Docker\API\Model\SwarmSpecOrchestration::class => SwarmSpecOrchestrationNormalizer::class, + + \Docker\API\Model\SwarmSpecRaft::class => SwarmSpecRaftNormalizer::class, + + \Docker\API\Model\SwarmSpecDispatcher::class => SwarmSpecDispatcherNormalizer::class, + + \Docker\API\Model\SwarmSpecCAConfig::class => SwarmSpecCAConfigNormalizer::class, + + \Docker\API\Model\SwarmSpecCAConfigExternalCAsItem::class => SwarmSpecCAConfigExternalCAsItemNormalizer::class, + + \Docker\API\Model\SwarmSpecEncryptionConfig::class => SwarmSpecEncryptionConfigNormalizer::class, + + \Docker\API\Model\SwarmSpecTaskDefaults::class => SwarmSpecTaskDefaultsNormalizer::class, + + \Docker\API\Model\SwarmSpecTaskDefaultsLogDriver::class => SwarmSpecTaskDefaultsLogDriverNormalizer::class, + + \Docker\API\Model\ClusterInfo::class => ClusterInfoNormalizer::class, + + \Docker\API\Model\JoinTokens::class => JoinTokensNormalizer::class, + + \Docker\API\Model\Swarm::class => SwarmNormalizer::class, + + \Docker\API\Model\TaskSpec::class => TaskSpecNormalizer::class, + + \Docker\API\Model\TaskSpecPluginSpec::class => TaskSpecPluginSpecNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpec::class => TaskSpecContainerSpecNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecPrivileges::class => TaskSpecContainerSpecPrivilegesNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecPrivilegesCredentialSpec::class => TaskSpecContainerSpecPrivilegesCredentialSpecNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecPrivilegesSELinuxContext::class => TaskSpecContainerSpecPrivilegesSELinuxContextNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecPrivilegesSeccomp::class => TaskSpecContainerSpecPrivilegesSeccompNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecPrivilegesAppArmor::class => TaskSpecContainerSpecPrivilegesAppArmorNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecDNSConfig::class => TaskSpecContainerSpecDNSConfigNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecSecretsItem::class => TaskSpecContainerSpecSecretsItemNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecSecretsItemFile::class => TaskSpecContainerSpecSecretsItemFileNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecConfigsItem::class => TaskSpecContainerSpecConfigsItemNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecConfigsItemFile::class => TaskSpecContainerSpecConfigsItemFileNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecConfigsItemRuntime::class => TaskSpecContainerSpecConfigsItemRuntimeNormalizer::class, + + \Docker\API\Model\TaskSpecContainerSpecUlimitsItem::class => TaskSpecContainerSpecUlimitsItemNormalizer::class, + + \Docker\API\Model\TaskSpecNetworkAttachmentSpec::class => TaskSpecNetworkAttachmentSpecNormalizer::class, + + \Docker\API\Model\TaskSpecResources::class => TaskSpecResourcesNormalizer::class, + + \Docker\API\Model\TaskSpecRestartPolicy::class => TaskSpecRestartPolicyNormalizer::class, + + \Docker\API\Model\TaskSpecPlacement::class => TaskSpecPlacementNormalizer::class, + + \Docker\API\Model\TaskSpecPlacementPreferencesItem::class => TaskSpecPlacementPreferencesItemNormalizer::class, + + \Docker\API\Model\TaskSpecPlacementPreferencesItemSpread::class => TaskSpecPlacementPreferencesItemSpreadNormalizer::class, + + \Docker\API\Model\TaskSpecLogDriver::class => TaskSpecLogDriverNormalizer::class, + + \Docker\API\Model\ContainerStatus::class => ContainerStatusNormalizer::class, + + \Docker\API\Model\PortStatus::class => PortStatusNormalizer::class, + + \Docker\API\Model\TaskStatus::class => TaskStatusNormalizer::class, + + \Docker\API\Model\Task::class => TaskNormalizer::class, + + \Docker\API\Model\ServiceSpec::class => ServiceSpecNormalizer::class, + + \Docker\API\Model\ServiceSpecMode::class => ServiceSpecModeNormalizer::class, + + \Docker\API\Model\ServiceSpecModeReplicated::class => ServiceSpecModeReplicatedNormalizer::class, + + \Docker\API\Model\ServiceSpecModeGlobal::class => ServiceSpecModeGlobalNormalizer::class, + + \Docker\API\Model\ServiceSpecModeReplicatedJob::class => ServiceSpecModeReplicatedJobNormalizer::class, + + \Docker\API\Model\ServiceSpecModeGlobalJob::class => ServiceSpecModeGlobalJobNormalizer::class, + + \Docker\API\Model\ServiceSpecUpdateConfig::class => ServiceSpecUpdateConfigNormalizer::class, + + \Docker\API\Model\ServiceSpecRollbackConfig::class => ServiceSpecRollbackConfigNormalizer::class, + + \Docker\API\Model\EndpointPortConfig::class => EndpointPortConfigNormalizer::class, + + \Docker\API\Model\EndpointSpec::class => EndpointSpecNormalizer::class, + + \Docker\API\Model\Service::class => ServiceNormalizer::class, + + \Docker\API\Model\ServiceEndpoint::class => ServiceEndpointNormalizer::class, + + \Docker\API\Model\ServiceEndpointVirtualIPsItem::class => ServiceEndpointVirtualIPsItemNormalizer::class, + + \Docker\API\Model\ServiceUpdateStatus::class => ServiceUpdateStatusNormalizer::class, + + \Docker\API\Model\ServiceServiceStatus::class => ServiceServiceStatusNormalizer::class, + + \Docker\API\Model\ServiceJobStatus::class => ServiceJobStatusNormalizer::class, + + \Docker\API\Model\ImageDeleteResponseItem::class => ImageDeleteResponseItemNormalizer::class, + + \Docker\API\Model\ServiceCreateResponse::class => ServiceCreateResponseNormalizer::class, + + \Docker\API\Model\ServiceUpdateResponse::class => ServiceUpdateResponseNormalizer::class, + + \Docker\API\Model\ContainerSummary::class => ContainerSummaryNormalizer::class, + + \Docker\API\Model\ContainerSummaryHostConfig::class => ContainerSummaryHostConfigNormalizer::class, + + \Docker\API\Model\ContainerSummaryNetworkSettings::class => ContainerSummaryNetworkSettingsNormalizer::class, + + \Docker\API\Model\Driver::class => DriverNormalizer::class, + + \Docker\API\Model\SecretSpec::class => SecretSpecNormalizer::class, + + \Docker\API\Model\Secret::class => SecretNormalizer::class, + + \Docker\API\Model\ConfigSpec::class => ConfigSpecNormalizer::class, + + \Docker\API\Model\Config::class => ConfigNormalizer::class, + + \Docker\API\Model\ContainerState::class => ContainerStateNormalizer::class, + + \Docker\API\Model\ContainerCreateResponse::class => ContainerCreateResponseNormalizer::class, + + \Docker\API\Model\ContainerWaitResponse::class => ContainerWaitResponseNormalizer::class, + + \Docker\API\Model\ContainerWaitExitError::class => ContainerWaitExitErrorNormalizer::class, + + \Docker\API\Model\SystemVersion::class => SystemVersionNormalizer::class, + + \Docker\API\Model\SystemVersionPlatform::class => SystemVersionPlatformNormalizer::class, + + \Docker\API\Model\SystemVersionComponentsItem::class => SystemVersionComponentsItemNormalizer::class, + + \Docker\API\Model\SystemVersionComponentsItemDetails::class => SystemVersionComponentsItemDetailsNormalizer::class, + + \Docker\API\Model\SystemInfo::class => SystemInfoNormalizer::class, + + \Docker\API\Model\SystemInfoDefaultAddressPoolsItem::class => SystemInfoDefaultAddressPoolsItemNormalizer::class, + + \Docker\API\Model\PluginsInfo::class => PluginsInfoNormalizer::class, + + \Docker\API\Model\RegistryServiceConfig::class => RegistryServiceConfigNormalizer::class, + + \Docker\API\Model\IndexInfo::class => IndexInfoNormalizer::class, + + \Docker\API\Model\Runtime::class => RuntimeNormalizer::class, + + \Docker\API\Model\Commit::class => CommitNormalizer::class, + + \Docker\API\Model\SwarmInfo::class => SwarmInfoNormalizer::class, + + \Docker\API\Model\PeerNode::class => PeerNodeNormalizer::class, + + \Docker\API\Model\NetworkAttachmentConfig::class => NetworkAttachmentConfigNormalizer::class, + + \Docker\API\Model\EventActor::class => EventActorNormalizer::class, + + \Docker\API\Model\EventMessage::class => EventMessageNormalizer::class, + + \Docker\API\Model\OCIDescriptor::class => OCIDescriptorNormalizer::class, + + \Docker\API\Model\OCIPlatform::class => OCIPlatformNormalizer::class, + + \Docker\API\Model\DistributionInspect::class => DistributionInspectNormalizer::class, + + \Docker\API\Model\ClusterVolume::class => ClusterVolumeNormalizer::class, + + \Docker\API\Model\ClusterVolumeInfo::class => ClusterVolumeInfoNormalizer::class, + + \Docker\API\Model\ClusterVolumePublishStatusItem::class => ClusterVolumePublishStatusItemNormalizer::class, + + \Docker\API\Model\ClusterVolumeSpec::class => ClusterVolumeSpecNormalizer::class, + + \Docker\API\Model\ClusterVolumeSpecAccessMode::class => ClusterVolumeSpecAccessModeNormalizer::class, + + \Docker\API\Model\ClusterVolumeSpecAccessModeMountVolume::class => ClusterVolumeSpecAccessModeMountVolumeNormalizer::class, + + \Docker\API\Model\ClusterVolumeSpecAccessModeSecretsItem::class => ClusterVolumeSpecAccessModeSecretsItemNormalizer::class, + + \Docker\API\Model\ClusterVolumeSpecAccessModeAccessibilityRequirements::class => ClusterVolumeSpecAccessModeAccessibilityRequirementsNormalizer::class, + + \Docker\API\Model\ClusterVolumeSpecAccessModeCapacityRange::class => ClusterVolumeSpecAccessModeCapacityRangeNormalizer::class, + + \Docker\API\Model\ContainersCreatePostBody::class => ContainersCreatePostBodyNormalizer::class, + + \Docker\API\Model\ContainersIdJsonGetResponse200::class => ContainersIdJsonGetResponse200Normalizer::class, + + \Docker\API\Model\ContainersIdTopGetJsonResponse200::class => ContainersIdTopGetJsonResponse200Normalizer::class, + + \Docker\API\Model\ContainersIdTopGetTextplainResponse200::class => ContainersIdTopGetTextplainResponse200Normalizer::class, + + \Docker\API\Model\ContainersIdUpdatePostBody::class => ContainersIdUpdatePostBodyNormalizer::class, + + \Docker\API\Model\ContainersIdUpdatePostResponse200::class => ContainersIdUpdatePostResponse200Normalizer::class, + + \Docker\API\Model\ContainersPrunePostResponse200::class => ContainersPrunePostResponse200Normalizer::class, + + \Docker\API\Model\BuildPrunePostResponse200::class => BuildPrunePostResponse200Normalizer::class, + + \Docker\API\Model\ImagesNameHistoryGetResponse200Item::class => ImagesNameHistoryGetResponse200ItemNormalizer::class, + + \Docker\API\Model\ImagesSearchGetResponse200Item::class => ImagesSearchGetResponse200ItemNormalizer::class, + + \Docker\API\Model\ImagesPrunePostResponse200::class => ImagesPrunePostResponse200Normalizer::class, + + \Docker\API\Model\AuthPostResponse200::class => AuthPostResponse200Normalizer::class, + + \Docker\API\Model\SystemDfGetJsonResponse200::class => SystemDfGetJsonResponse200Normalizer::class, + + \Docker\API\Model\SystemDfGetTextplainResponse200::class => SystemDfGetTextplainResponse200Normalizer::class, + + \Docker\API\Model\ContainersIdExecPostBody::class => ContainersIdExecPostBodyNormalizer::class, + + \Docker\API\Model\ExecIdStartPostBody::class => ExecIdStartPostBodyNormalizer::class, + + \Docker\API\Model\ExecIdJsonGetResponse200::class => ExecIdJsonGetResponse200Normalizer::class, + + \Docker\API\Model\VolumesNamePutBody::class => VolumesNamePutBodyNormalizer::class, + + \Docker\API\Model\VolumesPrunePostResponse200::class => VolumesPrunePostResponse200Normalizer::class, + + \Docker\API\Model\NetworksCreatePostBody::class => NetworksCreatePostBodyNormalizer::class, + + \Docker\API\Model\NetworksCreatePostResponse201::class => NetworksCreatePostResponse201Normalizer::class, + + \Docker\API\Model\NetworksIdConnectPostBody::class => NetworksIdConnectPostBodyNormalizer::class, + + \Docker\API\Model\NetworksIdDisconnectPostBody::class => NetworksIdDisconnectPostBodyNormalizer::class, + + \Docker\API\Model\NetworksPrunePostResponse200::class => NetworksPrunePostResponse200Normalizer::class, + + \Docker\API\Model\SwarmInitPostBody::class => SwarmInitPostBodyNormalizer::class, + + \Docker\API\Model\SwarmJoinPostBody::class => SwarmJoinPostBodyNormalizer::class, + + \Docker\API\Model\SwarmUnlockkeyGetJsonResponse200::class => SwarmUnlockkeyGetJsonResponse200Normalizer::class, + + \Docker\API\Model\SwarmUnlockkeyGetTextplainResponse200::class => SwarmUnlockkeyGetTextplainResponse200Normalizer::class, + + \Docker\API\Model\SwarmUnlockPostBody::class => SwarmUnlockPostBodyNormalizer::class, + + \Docker\API\Model\ServicesCreatePostBody::class => ServicesCreatePostBodyNormalizer::class, + + \Docker\API\Model\ServicesIdUpdatePostBody::class => ServicesIdUpdatePostBodyNormalizer::class, + + \Docker\API\Model\SecretsCreatePostBody::class => SecretsCreatePostBodyNormalizer::class, + + \Docker\API\Model\ConfigsCreatePostBody::class => ConfigsCreatePostBodyNormalizer::class, + + \Jane\Component\JsonSchemaRuntime\Reference::class => \Docker\API\Runtime\Normalizer\ReferenceNormalizer::class, + ]; + protected $normalizersCache = []; + + public function supportsDenormalization(mixed $data, string $type, ?string $format = null, array $context = []): bool + { + return \array_key_exists($type, $this->normalizers); + } + + public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool + { + return \is_object($data) && \array_key_exists($data::class, $this->normalizers); + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $normalizerClass = $this->normalizers[$data::class]; + $normalizer = $this->getNormalizer($normalizerClass); + + return $normalizer->normalize($data, $format, $context); + } + + public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): mixed + { + $denormalizerClass = $this->normalizers[$type]; + $denormalizer = $this->getNormalizer($denormalizerClass); + + return $denormalizer->denormalize($data, $type, $format, $context); + } + + private function getNormalizer(string $normalizerClass) + { + return $this->normalizersCache[$normalizerClass] ?? $this->initNormalizer($normalizerClass); + } + + private function initNormalizer(string $normalizerClass) + { + $normalizer = new $normalizerClass(); + $normalizer->setNormalizer($this->normalizer); + $normalizer->setDenormalizer($this->denormalizer); + $this->normalizersCache[$normalizerClass] = $normalizer; + + return $normalizer; + } + + public function getSupportedTypes(?string $format = null): array + { + return [ + \Docker\API\Model\Port::class => false, + \Docker\API\Model\MountPoint::class => false, + \Docker\API\Model\DeviceMapping::class => false, + \Docker\API\Model\DeviceRequest::class => false, + \Docker\API\Model\ThrottleDevice::class => false, + \Docker\API\Model\Mount::class => false, + \Docker\API\Model\MountBindOptions::class => false, + \Docker\API\Model\MountVolumeOptions::class => false, + \Docker\API\Model\MountVolumeOptionsDriverConfig::class => false, + \Docker\API\Model\MountTmpfsOptions::class => false, + \Docker\API\Model\RestartPolicy::class => false, + \Docker\API\Model\Resources::class => false, + \Docker\API\Model\ResourcesBlkioWeightDeviceItem::class => false, + \Docker\API\Model\ResourcesUlimitsItem::class => false, + \Docker\API\Model\Limit::class => false, + \Docker\API\Model\ResourceObject::class => false, + \Docker\API\Model\GenericResourcesItem::class => false, + \Docker\API\Model\GenericResourcesItemNamedResourceSpec::class => false, + \Docker\API\Model\GenericResourcesItemDiscreteResourceSpec::class => false, + \Docker\API\Model\HealthConfig::class => false, + \Docker\API\Model\Health::class => false, + \Docker\API\Model\HealthcheckResult::class => false, + \Docker\API\Model\HostConfig::class => false, + \Docker\API\Model\HostConfigLogConfig::class => false, + \Docker\API\Model\ContainerConfig::class => false, + \Docker\API\Model\ContainerConfigExposedPortsItem::class => false, + \Docker\API\Model\ContainerConfigVolumesItem::class => false, + \Docker\API\Model\NetworkingConfig::class => false, + \Docker\API\Model\NetworkSettings::class => false, + \Docker\API\Model\Address::class => false, + \Docker\API\Model\PortBinding::class => false, + \Docker\API\Model\GraphDriverData::class => false, + \Docker\API\Model\FilesystemChange::class => false, + \Docker\API\Model\ImageInspect::class => false, + \Docker\API\Model\ImageInspectRootFS::class => false, + \Docker\API\Model\ImageInspectMetadata::class => false, + \Docker\API\Model\ImageSummary::class => false, + \Docker\API\Model\AuthConfig::class => false, + \Docker\API\Model\ProcessConfig::class => false, + \Docker\API\Model\Volume::class => false, + \Docker\API\Model\VolumeStatusItem::class => false, + \Docker\API\Model\VolumeUsageData::class => false, + \Docker\API\Model\VolumeCreateOptions::class => false, + \Docker\API\Model\VolumeListResponse::class => false, + \Docker\API\Model\Network::class => false, + \Docker\API\Model\IPAM::class => false, + \Docker\API\Model\IPAMConfig::class => false, + \Docker\API\Model\NetworkContainer::class => false, + \Docker\API\Model\BuildInfo::class => false, + \Docker\API\Model\BuildCache::class => false, + \Docker\API\Model\ImageID::class => false, + \Docker\API\Model\CreateImageInfo::class => false, + \Docker\API\Model\PushImageInfo::class => false, + \Docker\API\Model\ErrorDetail::class => false, + \Docker\API\Model\ProgressDetail::class => false, + \Docker\API\Model\ErrorResponse::class => false, + \Docker\API\Model\IdResponse::class => false, + \Docker\API\Model\EndpointSettings::class => false, + \Docker\API\Model\EndpointIPAMConfig::class => false, + \Docker\API\Model\PluginMount::class => false, + \Docker\API\Model\PluginDevice::class => false, + \Docker\API\Model\PluginEnv::class => false, + \Docker\API\Model\PluginInterfaceType::class => false, + \Docker\API\Model\PluginPrivilege::class => false, + \Docker\API\Model\Plugin::class => false, + \Docker\API\Model\PluginSettings::class => false, + \Docker\API\Model\PluginConfig::class => false, + \Docker\API\Model\PluginConfigInterface::class => false, + \Docker\API\Model\PluginConfigUser::class => false, + \Docker\API\Model\PluginConfigNetwork::class => false, + \Docker\API\Model\PluginConfigLinux::class => false, + \Docker\API\Model\PluginConfigArgs::class => false, + \Docker\API\Model\PluginConfigRootfs::class => false, + \Docker\API\Model\ObjectVersion::class => false, + \Docker\API\Model\NodeSpec::class => false, + \Docker\API\Model\Node::class => false, + \Docker\API\Model\NodeDescription::class => false, + \Docker\API\Model\Platform::class => false, + \Docker\API\Model\EngineDescription::class => false, + \Docker\API\Model\EngineDescriptionPluginsItem::class => false, + \Docker\API\Model\TLSInfo::class => false, + \Docker\API\Model\NodeStatus::class => false, + \Docker\API\Model\ManagerStatus::class => false, + \Docker\API\Model\SwarmSpec::class => false, + \Docker\API\Model\SwarmSpecOrchestration::class => false, + \Docker\API\Model\SwarmSpecRaft::class => false, + \Docker\API\Model\SwarmSpecDispatcher::class => false, + \Docker\API\Model\SwarmSpecCAConfig::class => false, + \Docker\API\Model\SwarmSpecCAConfigExternalCAsItem::class => false, + \Docker\API\Model\SwarmSpecEncryptionConfig::class => false, + \Docker\API\Model\SwarmSpecTaskDefaults::class => false, + \Docker\API\Model\SwarmSpecTaskDefaultsLogDriver::class => false, + \Docker\API\Model\ClusterInfo::class => false, + \Docker\API\Model\JoinTokens::class => false, + \Docker\API\Model\Swarm::class => false, + \Docker\API\Model\TaskSpec::class => false, + \Docker\API\Model\TaskSpecPluginSpec::class => false, + \Docker\API\Model\TaskSpecContainerSpec::class => false, + \Docker\API\Model\TaskSpecContainerSpecPrivileges::class => false, + \Docker\API\Model\TaskSpecContainerSpecPrivilegesCredentialSpec::class => false, + \Docker\API\Model\TaskSpecContainerSpecPrivilegesSELinuxContext::class => false, + \Docker\API\Model\TaskSpecContainerSpecPrivilegesSeccomp::class => false, + \Docker\API\Model\TaskSpecContainerSpecPrivilegesAppArmor::class => false, + \Docker\API\Model\TaskSpecContainerSpecDNSConfig::class => false, + \Docker\API\Model\TaskSpecContainerSpecSecretsItem::class => false, + \Docker\API\Model\TaskSpecContainerSpecSecretsItemFile::class => false, + \Docker\API\Model\TaskSpecContainerSpecConfigsItem::class => false, + \Docker\API\Model\TaskSpecContainerSpecConfigsItemFile::class => false, + \Docker\API\Model\TaskSpecContainerSpecConfigsItemRuntime::class => false, + \Docker\API\Model\TaskSpecContainerSpecUlimitsItem::class => false, + \Docker\API\Model\TaskSpecNetworkAttachmentSpec::class => false, + \Docker\API\Model\TaskSpecResources::class => false, + \Docker\API\Model\TaskSpecRestartPolicy::class => false, + \Docker\API\Model\TaskSpecPlacement::class => false, + \Docker\API\Model\TaskSpecPlacementPreferencesItem::class => false, + \Docker\API\Model\TaskSpecPlacementPreferencesItemSpread::class => false, + \Docker\API\Model\TaskSpecLogDriver::class => false, + \Docker\API\Model\ContainerStatus::class => false, + \Docker\API\Model\PortStatus::class => false, + \Docker\API\Model\TaskStatus::class => false, + \Docker\API\Model\Task::class => false, + \Docker\API\Model\ServiceSpec::class => false, + \Docker\API\Model\ServiceSpecMode::class => false, + \Docker\API\Model\ServiceSpecModeReplicated::class => false, + \Docker\API\Model\ServiceSpecModeGlobal::class => false, + \Docker\API\Model\ServiceSpecModeReplicatedJob::class => false, + \Docker\API\Model\ServiceSpecModeGlobalJob::class => false, + \Docker\API\Model\ServiceSpecUpdateConfig::class => false, + \Docker\API\Model\ServiceSpecRollbackConfig::class => false, + \Docker\API\Model\EndpointPortConfig::class => false, + \Docker\API\Model\EndpointSpec::class => false, + \Docker\API\Model\Service::class => false, + \Docker\API\Model\ServiceEndpoint::class => false, + \Docker\API\Model\ServiceEndpointVirtualIPsItem::class => false, + \Docker\API\Model\ServiceUpdateStatus::class => false, + \Docker\API\Model\ServiceServiceStatus::class => false, + \Docker\API\Model\ServiceJobStatus::class => false, + \Docker\API\Model\ImageDeleteResponseItem::class => false, + \Docker\API\Model\ServiceCreateResponse::class => false, + \Docker\API\Model\ServiceUpdateResponse::class => false, + \Docker\API\Model\ContainerSummary::class => false, + \Docker\API\Model\ContainerSummaryHostConfig::class => false, + \Docker\API\Model\ContainerSummaryNetworkSettings::class => false, + \Docker\API\Model\Driver::class => false, + \Docker\API\Model\SecretSpec::class => false, + \Docker\API\Model\Secret::class => false, + \Docker\API\Model\ConfigSpec::class => false, + \Docker\API\Model\Config::class => false, + \Docker\API\Model\ContainerState::class => false, + \Docker\API\Model\ContainerCreateResponse::class => false, + \Docker\API\Model\ContainerWaitResponse::class => false, + \Docker\API\Model\ContainerWaitExitError::class => false, + \Docker\API\Model\SystemVersion::class => false, + \Docker\API\Model\SystemVersionPlatform::class => false, + \Docker\API\Model\SystemVersionComponentsItem::class => false, + \Docker\API\Model\SystemVersionComponentsItemDetails::class => false, + \Docker\API\Model\SystemInfo::class => false, + \Docker\API\Model\SystemInfoDefaultAddressPoolsItem::class => false, + \Docker\API\Model\PluginsInfo::class => false, + \Docker\API\Model\RegistryServiceConfig::class => false, + \Docker\API\Model\IndexInfo::class => false, + \Docker\API\Model\Runtime::class => false, + \Docker\API\Model\Commit::class => false, + \Docker\API\Model\SwarmInfo::class => false, + \Docker\API\Model\PeerNode::class => false, + \Docker\API\Model\NetworkAttachmentConfig::class => false, + \Docker\API\Model\EventActor::class => false, + \Docker\API\Model\EventMessage::class => false, + \Docker\API\Model\OCIDescriptor::class => false, + \Docker\API\Model\OCIPlatform::class => false, + \Docker\API\Model\DistributionInspect::class => false, + \Docker\API\Model\ClusterVolume::class => false, + \Docker\API\Model\ClusterVolumeInfo::class => false, + \Docker\API\Model\ClusterVolumePublishStatusItem::class => false, + \Docker\API\Model\ClusterVolumeSpec::class => false, + \Docker\API\Model\ClusterVolumeSpecAccessMode::class => false, + \Docker\API\Model\ClusterVolumeSpecAccessModeMountVolume::class => false, + \Docker\API\Model\ClusterVolumeSpecAccessModeSecretsItem::class => false, + \Docker\API\Model\ClusterVolumeSpecAccessModeAccessibilityRequirements::class => false, + \Docker\API\Model\ClusterVolumeSpecAccessModeCapacityRange::class => false, + \Docker\API\Model\ContainersCreatePostBody::class => false, + \Docker\API\Model\ContainersIdJsonGetResponse200::class => false, + \Docker\API\Model\ContainersIdTopGetJsonResponse200::class => false, + \Docker\API\Model\ContainersIdTopGetTextplainResponse200::class => false, + \Docker\API\Model\ContainersIdUpdatePostBody::class => false, + \Docker\API\Model\ContainersIdUpdatePostResponse200::class => false, + \Docker\API\Model\ContainersPrunePostResponse200::class => false, + \Docker\API\Model\BuildPrunePostResponse200::class => false, + \Docker\API\Model\ImagesNameHistoryGetResponse200Item::class => false, + \Docker\API\Model\ImagesSearchGetResponse200Item::class => false, + \Docker\API\Model\ImagesPrunePostResponse200::class => false, + \Docker\API\Model\AuthPostResponse200::class => false, + \Docker\API\Model\SystemDfGetJsonResponse200::class => false, + \Docker\API\Model\SystemDfGetTextplainResponse200::class => false, + \Docker\API\Model\ContainersIdExecPostBody::class => false, + \Docker\API\Model\ExecIdStartPostBody::class => false, + \Docker\API\Model\ExecIdJsonGetResponse200::class => false, + \Docker\API\Model\VolumesNamePutBody::class => false, + \Docker\API\Model\VolumesPrunePostResponse200::class => false, + \Docker\API\Model\NetworksCreatePostBody::class => false, + \Docker\API\Model\NetworksCreatePostResponse201::class => false, + \Docker\API\Model\NetworksIdConnectPostBody::class => false, + \Docker\API\Model\NetworksIdDisconnectPostBody::class => false, + \Docker\API\Model\NetworksPrunePostResponse200::class => false, + \Docker\API\Model\SwarmInitPostBody::class => false, + \Docker\API\Model\SwarmJoinPostBody::class => false, + \Docker\API\Model\SwarmUnlockkeyGetJsonResponse200::class => false, + \Docker\API\Model\SwarmUnlockkeyGetTextplainResponse200::class => false, + \Docker\API\Model\SwarmUnlockPostBody::class => false, + \Docker\API\Model\ServicesCreatePostBody::class => false, + \Docker\API\Model\ServicesIdUpdatePostBody::class => false, + \Docker\API\Model\SecretsCreatePostBody::class => false, + \Docker\API\Model\ConfigsCreatePostBody::class => false, + \Jane\Component\JsonSchemaRuntime\Reference::class => false, + ]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/JoinTokensNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/JoinTokensNormalizer.php new file mode 100644 index 000000000..9583dff7d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/JoinTokensNormalizer.php @@ -0,0 +1,89 @@ +setWorker($data['Worker']); + unset($data['Worker']); + } elseif (\array_key_exists('Worker', $data) && null === $data['Worker']) { + $object->setWorker(null); + } + if (\array_key_exists('Manager', $data) && null !== $data['Manager']) { + $object->setManager($data['Manager']); + unset($data['Manager']); + } elseif (\array_key_exists('Manager', $data) && null === $data['Manager']) { + $object->setManager(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('worker') && null !== $data->getWorker()) { + $dataArray['Worker'] = $data->getWorker(); + } + if ($data->isInitialized('manager') && null !== $data->getManager()) { + $dataArray['Manager'] = $data->getManager(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\JoinTokens::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/LimitNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/LimitNormalizer.php new file mode 100644 index 000000000..22fc43a6c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/LimitNormalizer.php @@ -0,0 +1,98 @@ +setNanoCPUs($data['NanoCPUs']); + unset($data['NanoCPUs']); + } elseif (\array_key_exists('NanoCPUs', $data) && null === $data['NanoCPUs']) { + $object->setNanoCPUs(null); + } + if (\array_key_exists('MemoryBytes', $data) && null !== $data['MemoryBytes']) { + $object->setMemoryBytes($data['MemoryBytes']); + unset($data['MemoryBytes']); + } elseif (\array_key_exists('MemoryBytes', $data) && null === $data['MemoryBytes']) { + $object->setMemoryBytes(null); + } + if (\array_key_exists('Pids', $data) && null !== $data['Pids']) { + $object->setPids($data['Pids']); + unset($data['Pids']); + } elseif (\array_key_exists('Pids', $data) && null === $data['Pids']) { + $object->setPids(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nanoCPUs') && null !== $data->getNanoCPUs()) { + $dataArray['NanoCPUs'] = $data->getNanoCPUs(); + } + if ($data->isInitialized('memoryBytes') && null !== $data->getMemoryBytes()) { + $dataArray['MemoryBytes'] = $data->getMemoryBytes(); + } + if ($data->isInitialized('pids') && null !== $data->getPids()) { + $dataArray['Pids'] = $data->getPids(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Limit::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ManagerStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ManagerStatusNormalizer.php new file mode 100644 index 000000000..3af3e42f0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ManagerStatusNormalizer.php @@ -0,0 +1,101 @@ +setLeader($data['Leader']); + unset($data['Leader']); + } elseif (\array_key_exists('Leader', $data) && null === $data['Leader']) { + $object->setLeader(null); + } + if (\array_key_exists('Reachability', $data) && null !== $data['Reachability']) { + $object->setReachability($data['Reachability']); + unset($data['Reachability']); + } elseif (\array_key_exists('Reachability', $data) && null === $data['Reachability']) { + $object->setReachability(null); + } + if (\array_key_exists('Addr', $data) && null !== $data['Addr']) { + $object->setAddr($data['Addr']); + unset($data['Addr']); + } elseif (\array_key_exists('Addr', $data) && null === $data['Addr']) { + $object->setAddr(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('leader') && null !== $data->getLeader()) { + $dataArray['Leader'] = $data->getLeader(); + } + if ($data->isInitialized('reachability') && null !== $data->getReachability()) { + $dataArray['Reachability'] = $data->getReachability(); + } + if ($data->isInitialized('addr') && null !== $data->getAddr()) { + $dataArray['Addr'] = $data->getAddr(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ManagerStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountBindOptionsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountBindOptionsNormalizer.php new file mode 100644 index 000000000..bcc742eaf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountBindOptionsNormalizer.php @@ -0,0 +1,128 @@ +setPropagation($data['Propagation']); + unset($data['Propagation']); + } elseif (\array_key_exists('Propagation', $data) && null === $data['Propagation']) { + $object->setPropagation(null); + } + if (\array_key_exists('NonRecursive', $data) && null !== $data['NonRecursive']) { + $object->setNonRecursive($data['NonRecursive']); + unset($data['NonRecursive']); + } elseif (\array_key_exists('NonRecursive', $data) && null === $data['NonRecursive']) { + $object->setNonRecursive(null); + } + if (\array_key_exists('CreateMountpoint', $data) && null !== $data['CreateMountpoint']) { + $object->setCreateMountpoint($data['CreateMountpoint']); + unset($data['CreateMountpoint']); + } elseif (\array_key_exists('CreateMountpoint', $data) && null === $data['CreateMountpoint']) { + $object->setCreateMountpoint(null); + } + if (\array_key_exists('ReadOnlyNonRecursive', $data) && null !== $data['ReadOnlyNonRecursive']) { + $object->setReadOnlyNonRecursive($data['ReadOnlyNonRecursive']); + unset($data['ReadOnlyNonRecursive']); + } elseif (\array_key_exists('ReadOnlyNonRecursive', $data) && null === $data['ReadOnlyNonRecursive']) { + $object->setReadOnlyNonRecursive(null); + } + if (\array_key_exists('ReadOnlyForceRecursive', $data) && null !== $data['ReadOnlyForceRecursive']) { + $object->setReadOnlyForceRecursive($data['ReadOnlyForceRecursive']); + unset($data['ReadOnlyForceRecursive']); + } elseif (\array_key_exists('ReadOnlyForceRecursive', $data) && null === $data['ReadOnlyForceRecursive']) { + $object->setReadOnlyForceRecursive(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('propagation') && null !== $data->getPropagation()) { + $dataArray['Propagation'] = $data->getPropagation(); + } + if ($data->isInitialized('nonRecursive') && null !== $data->getNonRecursive()) { + $dataArray['NonRecursive'] = $data->getNonRecursive(); + } + if ($data->isInitialized('createMountpoint') && null !== $data->getCreateMountpoint()) { + $dataArray['CreateMountpoint'] = $data->getCreateMountpoint(); + } + if ($data->isInitialized('readOnlyNonRecursive') && null !== $data->getReadOnlyNonRecursive()) { + $dataArray['ReadOnlyNonRecursive'] = $data->getReadOnlyNonRecursive(); + } + if ($data->isInitialized('readOnlyForceRecursive') && null !== $data->getReadOnlyForceRecursive()) { + $dataArray['ReadOnlyForceRecursive'] = $data->getReadOnlyForceRecursive(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\MountBindOptions::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountNormalizer.php new file mode 100644 index 000000000..2986f5384 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountNormalizer.php @@ -0,0 +1,146 @@ +setTarget($data['Target']); + unset($data['Target']); + } elseif (\array_key_exists('Target', $data) && null === $data['Target']) { + $object->setTarget(null); + } + if (\array_key_exists('Source', $data) && null !== $data['Source']) { + $object->setSource($data['Source']); + unset($data['Source']); + } elseif (\array_key_exists('Source', $data) && null === $data['Source']) { + $object->setSource(null); + } + if (\array_key_exists('Type', $data) && null !== $data['Type']) { + $object->setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('ReadOnly', $data) && null !== $data['ReadOnly']) { + $object->setReadOnly($data['ReadOnly']); + unset($data['ReadOnly']); + } elseif (\array_key_exists('ReadOnly', $data) && null === $data['ReadOnly']) { + $object->setReadOnly(null); + } + if (\array_key_exists('Consistency', $data) && null !== $data['Consistency']) { + $object->setConsistency($data['Consistency']); + unset($data['Consistency']); + } elseif (\array_key_exists('Consistency', $data) && null === $data['Consistency']) { + $object->setConsistency(null); + } + if (\array_key_exists('BindOptions', $data) && null !== $data['BindOptions']) { + $object->setBindOptions($this->denormalizer->denormalize($data['BindOptions'], \Docker\API\Model\MountBindOptions::class, 'json', $context)); + unset($data['BindOptions']); + } elseif (\array_key_exists('BindOptions', $data) && null === $data['BindOptions']) { + $object->setBindOptions(null); + } + if (\array_key_exists('VolumeOptions', $data) && null !== $data['VolumeOptions']) { + $object->setVolumeOptions($this->denormalizer->denormalize($data['VolumeOptions'], \Docker\API\Model\MountVolumeOptions::class, 'json', $context)); + unset($data['VolumeOptions']); + } elseif (\array_key_exists('VolumeOptions', $data) && null === $data['VolumeOptions']) { + $object->setVolumeOptions(null); + } + if (\array_key_exists('TmpfsOptions', $data) && null !== $data['TmpfsOptions']) { + $object->setTmpfsOptions($this->denormalizer->denormalize($data['TmpfsOptions'], \Docker\API\Model\MountTmpfsOptions::class, 'json', $context)); + unset($data['TmpfsOptions']); + } elseif (\array_key_exists('TmpfsOptions', $data) && null === $data['TmpfsOptions']) { + $object->setTmpfsOptions(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('target') && null !== $data->getTarget()) { + $dataArray['Target'] = $data->getTarget(); + } + if ($data->isInitialized('source') && null !== $data->getSource()) { + $dataArray['Source'] = $data->getSource(); + } + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('readOnly') && null !== $data->getReadOnly()) { + $dataArray['ReadOnly'] = $data->getReadOnly(); + } + if ($data->isInitialized('consistency') && null !== $data->getConsistency()) { + $dataArray['Consistency'] = $data->getConsistency(); + } + if ($data->isInitialized('bindOptions') && null !== $data->getBindOptions()) { + $dataArray['BindOptions'] = $this->normalizer->normalize($data->getBindOptions(), 'json', $context); + } + if ($data->isInitialized('volumeOptions') && null !== $data->getVolumeOptions()) { + $dataArray['VolumeOptions'] = $this->normalizer->normalize($data->getVolumeOptions(), 'json', $context); + } + if ($data->isInitialized('tmpfsOptions') && null !== $data->getTmpfsOptions()) { + $dataArray['TmpfsOptions'] = $this->normalizer->normalize($data->getTmpfsOptions(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Mount::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountPointNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountPointNormalizer.php new file mode 100644 index 000000000..9b92d8835 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountPointNormalizer.php @@ -0,0 +1,146 @@ +setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Name', $data) && null !== $data['Name']) { + $object->setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Source', $data) && null !== $data['Source']) { + $object->setSource($data['Source']); + unset($data['Source']); + } elseif (\array_key_exists('Source', $data) && null === $data['Source']) { + $object->setSource(null); + } + if (\array_key_exists('Destination', $data) && null !== $data['Destination']) { + $object->setDestination($data['Destination']); + unset($data['Destination']); + } elseif (\array_key_exists('Destination', $data) && null === $data['Destination']) { + $object->setDestination(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + if (\array_key_exists('RW', $data) && null !== $data['RW']) { + $object->setRW($data['RW']); + unset($data['RW']); + } elseif (\array_key_exists('RW', $data) && null === $data['RW']) { + $object->setRW(null); + } + if (\array_key_exists('Propagation', $data) && null !== $data['Propagation']) { + $object->setPropagation($data['Propagation']); + unset($data['Propagation']); + } elseif (\array_key_exists('Propagation', $data) && null === $data['Propagation']) { + $object->setPropagation(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('source') && null !== $data->getSource()) { + $dataArray['Source'] = $data->getSource(); + } + if ($data->isInitialized('destination') && null !== $data->getDestination()) { + $dataArray['Destination'] = $data->getDestination(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + if ($data->isInitialized('rW') && null !== $data->getRW()) { + $dataArray['RW'] = $data->getRW(); + } + if ($data->isInitialized('propagation') && null !== $data->getPropagation()) { + $dataArray['Propagation'] = $data->getPropagation(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\MountPoint::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountTmpfsOptionsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountTmpfsOptionsNormalizer.php new file mode 100644 index 000000000..4fbcf4ac1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountTmpfsOptionsNormalizer.php @@ -0,0 +1,89 @@ +setSizeBytes($data['SizeBytes']); + unset($data['SizeBytes']); + } elseif (\array_key_exists('SizeBytes', $data) && null === $data['SizeBytes']) { + $object->setSizeBytes(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('sizeBytes') && null !== $data->getSizeBytes()) { + $dataArray['SizeBytes'] = $data->getSizeBytes(); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\MountTmpfsOptions::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountVolumeOptionsDriverConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountVolumeOptionsDriverConfigNormalizer.php new file mode 100644 index 000000000..1eb601410 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountVolumeOptionsDriverConfigNormalizer.php @@ -0,0 +1,97 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value) { + $values[$key] = $value; + } + $object->setOptions($values); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values = []; + foreach ($data->getOptions() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Options'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\MountVolumeOptionsDriverConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountVolumeOptionsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountVolumeOptionsNormalizer.php new file mode 100644 index 000000000..d0969dde2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/MountVolumeOptionsNormalizer.php @@ -0,0 +1,118 @@ +setNoCopy($data['NoCopy']); + unset($data['NoCopy']); + } elseif (\array_key_exists('NoCopy', $data) && null === $data['NoCopy']) { + $object->setNoCopy(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('DriverConfig', $data) && null !== $data['DriverConfig']) { + $object->setDriverConfig($this->denormalizer->denormalize($data['DriverConfig'], \Docker\API\Model\MountVolumeOptionsDriverConfig::class, 'json', $context)); + unset($data['DriverConfig']); + } elseif (\array_key_exists('DriverConfig', $data) && null === $data['DriverConfig']) { + $object->setDriverConfig(null); + } + if (\array_key_exists('Subpath', $data) && null !== $data['Subpath']) { + $object->setSubpath($data['Subpath']); + unset($data['Subpath']); + } elseif (\array_key_exists('Subpath', $data) && null === $data['Subpath']) { + $object->setSubpath(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('noCopy') && null !== $data->getNoCopy()) { + $dataArray['NoCopy'] = $data->getNoCopy(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('driverConfig') && null !== $data->getDriverConfig()) { + $dataArray['DriverConfig'] = $this->normalizer->normalize($data->getDriverConfig(), 'json', $context); + } + if ($data->isInitialized('subpath') && null !== $data->getSubpath()) { + $dataArray['Subpath'] = $data->getSubpath(); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\MountVolumeOptions::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkAttachmentConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkAttachmentConfigNormalizer.php new file mode 100644 index 000000000..ea6e15d9c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkAttachmentConfigNormalizer.php @@ -0,0 +1,114 @@ +setTarget($data['Target']); + unset($data['Target']); + } elseif (\array_key_exists('Target', $data) && null === $data['Target']) { + $object->setTarget(null); + } + if (\array_key_exists('Aliases', $data) && null !== $data['Aliases']) { + $values = []; + foreach ($data['Aliases'] as $value) { + $values[] = $value; + } + $object->setAliases($values); + unset($data['Aliases']); + } elseif (\array_key_exists('Aliases', $data) && null === $data['Aliases']) { + $object->setAliases(null); + } + if (\array_key_exists('DriverOpts', $data) && null !== $data['DriverOpts']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['DriverOpts'] as $key => $value_1) { + $values_1[$key] = $value_1; + } + $object->setDriverOpts($values_1); + unset($data['DriverOpts']); + } elseif (\array_key_exists('DriverOpts', $data) && null === $data['DriverOpts']) { + $object->setDriverOpts(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('target') && null !== $data->getTarget()) { + $dataArray['Target'] = $data->getTarget(); + } + if ($data->isInitialized('aliases') && null !== $data->getAliases()) { + $values = []; + foreach ($data->getAliases() as $value) { + $values[] = $value; + } + $dataArray['Aliases'] = $values; + } + if ($data->isInitialized('driverOpts') && null !== $data->getDriverOpts()) { + $values_1 = []; + foreach ($data->getDriverOpts() as $key => $value_1) { + $values_1[$key] = $value_1; + } + $dataArray['DriverOpts'] = $values_1; + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworkAttachmentConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkContainerNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkContainerNormalizer.php new file mode 100644 index 000000000..fbf9b5a75 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkContainerNormalizer.php @@ -0,0 +1,116 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('EndpointID', $data) && null !== $data['EndpointID']) { + $object->setEndpointID($data['EndpointID']); + unset($data['EndpointID']); + } elseif (\array_key_exists('EndpointID', $data) && null === $data['EndpointID']) { + $object->setEndpointID(null); + } + if (\array_key_exists('MacAddress', $data) && null !== $data['MacAddress']) { + $object->setMacAddress($data['MacAddress']); + unset($data['MacAddress']); + } elseif (\array_key_exists('MacAddress', $data) && null === $data['MacAddress']) { + $object->setMacAddress(null); + } + if (\array_key_exists('IPv4Address', $data) && null !== $data['IPv4Address']) { + $object->setIPv4Address($data['IPv4Address']); + unset($data['IPv4Address']); + } elseif (\array_key_exists('IPv4Address', $data) && null === $data['IPv4Address']) { + $object->setIPv4Address(null); + } + if (\array_key_exists('IPv6Address', $data) && null !== $data['IPv6Address']) { + $object->setIPv6Address($data['IPv6Address']); + unset($data['IPv6Address']); + } elseif (\array_key_exists('IPv6Address', $data) && null === $data['IPv6Address']) { + $object->setIPv6Address(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('endpointID') && null !== $data->getEndpointID()) { + $dataArray['EndpointID'] = $data->getEndpointID(); + } + if ($data->isInitialized('macAddress') && null !== $data->getMacAddress()) { + $dataArray['MacAddress'] = $data->getMacAddress(); + } + if ($data->isInitialized('iPv4Address') && null !== $data->getIPv4Address()) { + $dataArray['IPv4Address'] = $data->getIPv4Address(); + } + if ($data->isInitialized('iPv6Address') && null !== $data->getIPv6Address()) { + $dataArray['IPv6Address'] = $data->getIPv6Address(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworkContainer::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkNormalizer.php new file mode 100644 index 000000000..d382ff535 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkNormalizer.php @@ -0,0 +1,224 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Id', $data) && null !== $data['Id']) { + $object->setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Created', $data) && null !== $data['Created']) { + $object->setCreated($data['Created']); + unset($data['Created']); + } elseif (\array_key_exists('Created', $data) && null === $data['Created']) { + $object->setCreated(null); + } + if (\array_key_exists('Scope', $data) && null !== $data['Scope']) { + $object->setScope($data['Scope']); + unset($data['Scope']); + } elseif (\array_key_exists('Scope', $data) && null === $data['Scope']) { + $object->setScope(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('EnableIPv6', $data) && null !== $data['EnableIPv6']) { + $object->setEnableIPv6($data['EnableIPv6']); + unset($data['EnableIPv6']); + } elseif (\array_key_exists('EnableIPv6', $data) && null === $data['EnableIPv6']) { + $object->setEnableIPv6(null); + } + if (\array_key_exists('IPAM', $data) && null !== $data['IPAM']) { + $object->setIPAM($this->denormalizer->denormalize($data['IPAM'], \Docker\API\Model\IPAM::class, 'json', $context)); + unset($data['IPAM']); + } elseif (\array_key_exists('IPAM', $data) && null === $data['IPAM']) { + $object->setIPAM(null); + } + if (\array_key_exists('Internal', $data) && null !== $data['Internal']) { + $object->setInternal($data['Internal']); + unset($data['Internal']); + } elseif (\array_key_exists('Internal', $data) && null === $data['Internal']) { + $object->setInternal(null); + } + if (\array_key_exists('Attachable', $data) && null !== $data['Attachable']) { + $object->setAttachable($data['Attachable']); + unset($data['Attachable']); + } elseif (\array_key_exists('Attachable', $data) && null === $data['Attachable']) { + $object->setAttachable(null); + } + if (\array_key_exists('Ingress', $data) && null !== $data['Ingress']) { + $object->setIngress($data['Ingress']); + unset($data['Ingress']); + } elseif (\array_key_exists('Ingress', $data) && null === $data['Ingress']) { + $object->setIngress(null); + } + if (\array_key_exists('Containers', $data) && null !== $data['Containers']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Containers'] as $key => $value) { + $values[$key] = $this->denormalizer->denormalize($value, \Docker\API\Model\NetworkContainer::class, 'json', $context); + } + $object->setContainers($values); + unset($data['Containers']); + } elseif (\array_key_exists('Containers', $data) && null === $data['Containers']) { + $object->setContainers(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $object->setOptions($values_1); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_2 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key_2 => $value_2) { + $values_2[$key_2] = $value_2; + } + $object->setLabels($values_2); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + foreach ($data as $key_3 => $value_3) { + if (preg_match('/.*/', (string) $key_3)) { + $object[$key_3] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['Id'] = $data->getId(); + } + if ($data->isInitialized('created') && null !== $data->getCreated()) { + $dataArray['Created'] = $data->getCreated(); + } + if ($data->isInitialized('scope') && null !== $data->getScope()) { + $dataArray['Scope'] = $data->getScope(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('enableIPv6') && null !== $data->getEnableIPv6()) { + $dataArray['EnableIPv6'] = $data->getEnableIPv6(); + } + if ($data->isInitialized('iPAM') && null !== $data->getIPAM()) { + $dataArray['IPAM'] = $this->normalizer->normalize($data->getIPAM(), 'json', $context); + } + if ($data->isInitialized('internal') && null !== $data->getInternal()) { + $dataArray['Internal'] = $data->getInternal(); + } + if ($data->isInitialized('attachable') && null !== $data->getAttachable()) { + $dataArray['Attachable'] = $data->getAttachable(); + } + if ($data->isInitialized('ingress') && null !== $data->getIngress()) { + $dataArray['Ingress'] = $data->getIngress(); + } + if ($data->isInitialized('containers') && null !== $data->getContainers()) { + $values = []; + foreach ($data->getContainers() as $key => $value) { + $values[$key] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Containers'] = $values; + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values_1 = []; + foreach ($data->getOptions() as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $dataArray['Options'] = $values_1; + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_2 = []; + foreach ($data->getLabels() as $key_2 => $value_2) { + $values_2[$key_2] = $value_2; + } + $dataArray['Labels'] = $values_2; + } + foreach ($data as $key_3 => $value_3) { + if (preg_match('/.*/', (string) $key_3)) { + $dataArray[$key_3] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Network::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkSettingsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkSettingsNormalizer.php new file mode 100644 index 000000000..f08354882 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkSettingsNormalizer.php @@ -0,0 +1,284 @@ +setBridge($data['Bridge']); + unset($data['Bridge']); + } elseif (\array_key_exists('Bridge', $data) && null === $data['Bridge']) { + $object->setBridge(null); + } + if (\array_key_exists('SandboxID', $data) && null !== $data['SandboxID']) { + $object->setSandboxID($data['SandboxID']); + unset($data['SandboxID']); + } elseif (\array_key_exists('SandboxID', $data) && null === $data['SandboxID']) { + $object->setSandboxID(null); + } + if (\array_key_exists('HairpinMode', $data) && null !== $data['HairpinMode']) { + $object->setHairpinMode($data['HairpinMode']); + unset($data['HairpinMode']); + } elseif (\array_key_exists('HairpinMode', $data) && null === $data['HairpinMode']) { + $object->setHairpinMode(null); + } + if (\array_key_exists('LinkLocalIPv6Address', $data) && null !== $data['LinkLocalIPv6Address']) { + $object->setLinkLocalIPv6Address($data['LinkLocalIPv6Address']); + unset($data['LinkLocalIPv6Address']); + } elseif (\array_key_exists('LinkLocalIPv6Address', $data) && null === $data['LinkLocalIPv6Address']) { + $object->setLinkLocalIPv6Address(null); + } + if (\array_key_exists('LinkLocalIPv6PrefixLen', $data) && null !== $data['LinkLocalIPv6PrefixLen']) { + $object->setLinkLocalIPv6PrefixLen($data['LinkLocalIPv6PrefixLen']); + unset($data['LinkLocalIPv6PrefixLen']); + } elseif (\array_key_exists('LinkLocalIPv6PrefixLen', $data) && null === $data['LinkLocalIPv6PrefixLen']) { + $object->setLinkLocalIPv6PrefixLen(null); + } + if (\array_key_exists('Ports', $data) && null !== $data['Ports']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Ports'] as $key => $value) { + if (null === $value) { + $values[$key] = null; + continue; + } + $values_1 = []; + foreach ($value as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\PortBinding::class, 'json', $context); + } + $values[$key] = $values_1; + } + $object->setPorts($values); + unset($data['Ports']); + } elseif (\array_key_exists('Ports', $data) && null === $data['Ports']) { + $object->setPorts(null); + } + if (\array_key_exists('SandboxKey', $data) && null !== $data['SandboxKey']) { + $object->setSandboxKey($data['SandboxKey']); + unset($data['SandboxKey']); + } elseif (\array_key_exists('SandboxKey', $data) && null === $data['SandboxKey']) { + $object->setSandboxKey(null); + } + if (\array_key_exists('SecondaryIPAddresses', $data) && null !== $data['SecondaryIPAddresses']) { + $values_2 = []; + foreach ($data['SecondaryIPAddresses'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\Address::class, 'json', $context); + } + $object->setSecondaryIPAddresses($values_2); + unset($data['SecondaryIPAddresses']); + } elseif (\array_key_exists('SecondaryIPAddresses', $data) && null === $data['SecondaryIPAddresses']) { + $object->setSecondaryIPAddresses(null); + } + if (\array_key_exists('SecondaryIPv6Addresses', $data) && null !== $data['SecondaryIPv6Addresses']) { + $values_3 = []; + foreach ($data['SecondaryIPv6Addresses'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\Address::class, 'json', $context); + } + $object->setSecondaryIPv6Addresses($values_3); + unset($data['SecondaryIPv6Addresses']); + } elseif (\array_key_exists('SecondaryIPv6Addresses', $data) && null === $data['SecondaryIPv6Addresses']) { + $object->setSecondaryIPv6Addresses(null); + } + if (\array_key_exists('EndpointID', $data) && null !== $data['EndpointID']) { + $object->setEndpointID($data['EndpointID']); + unset($data['EndpointID']); + } elseif (\array_key_exists('EndpointID', $data) && null === $data['EndpointID']) { + $object->setEndpointID(null); + } + if (\array_key_exists('Gateway', $data) && null !== $data['Gateway']) { + $object->setGateway($data['Gateway']); + unset($data['Gateway']); + } elseif (\array_key_exists('Gateway', $data) && null === $data['Gateway']) { + $object->setGateway(null); + } + if (\array_key_exists('GlobalIPv6Address', $data) && null !== $data['GlobalIPv6Address']) { + $object->setGlobalIPv6Address($data['GlobalIPv6Address']); + unset($data['GlobalIPv6Address']); + } elseif (\array_key_exists('GlobalIPv6Address', $data) && null === $data['GlobalIPv6Address']) { + $object->setGlobalIPv6Address(null); + } + if (\array_key_exists('GlobalIPv6PrefixLen', $data) && null !== $data['GlobalIPv6PrefixLen']) { + $object->setGlobalIPv6PrefixLen($data['GlobalIPv6PrefixLen']); + unset($data['GlobalIPv6PrefixLen']); + } elseif (\array_key_exists('GlobalIPv6PrefixLen', $data) && null === $data['GlobalIPv6PrefixLen']) { + $object->setGlobalIPv6PrefixLen(null); + } + if (\array_key_exists('IPAddress', $data) && null !== $data['IPAddress']) { + $object->setIPAddress($data['IPAddress']); + unset($data['IPAddress']); + } elseif (\array_key_exists('IPAddress', $data) && null === $data['IPAddress']) { + $object->setIPAddress(null); + } + if (\array_key_exists('IPPrefixLen', $data) && null !== $data['IPPrefixLen']) { + $object->setIPPrefixLen($data['IPPrefixLen']); + unset($data['IPPrefixLen']); + } elseif (\array_key_exists('IPPrefixLen', $data) && null === $data['IPPrefixLen']) { + $object->setIPPrefixLen(null); + } + if (\array_key_exists('IPv6Gateway', $data) && null !== $data['IPv6Gateway']) { + $object->setIPv6Gateway($data['IPv6Gateway']); + unset($data['IPv6Gateway']); + } elseif (\array_key_exists('IPv6Gateway', $data) && null === $data['IPv6Gateway']) { + $object->setIPv6Gateway(null); + } + if (\array_key_exists('MacAddress', $data) && null !== $data['MacAddress']) { + $object->setMacAddress($data['MacAddress']); + unset($data['MacAddress']); + } elseif (\array_key_exists('MacAddress', $data) && null === $data['MacAddress']) { + $object->setMacAddress(null); + } + if (\array_key_exists('Networks', $data) && null !== $data['Networks']) { + $values_4 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Networks'] as $key_1 => $value_4) { + $values_4[$key_1] = $this->denormalizer->denormalize($value_4, \Docker\API\Model\EndpointSettings::class, 'json', $context); + } + $object->setNetworks($values_4); + unset($data['Networks']); + } elseif (\array_key_exists('Networks', $data) && null === $data['Networks']) { + $object->setNetworks(null); + } + foreach ($data as $key_2 => $value_5) { + if (preg_match('/.*/', (string) $key_2)) { + $object[$key_2] = $value_5; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('bridge') && null !== $data->getBridge()) { + $dataArray['Bridge'] = $data->getBridge(); + } + if ($data->isInitialized('sandboxID') && null !== $data->getSandboxID()) { + $dataArray['SandboxID'] = $data->getSandboxID(); + } + if ($data->isInitialized('hairpinMode') && null !== $data->getHairpinMode()) { + $dataArray['HairpinMode'] = $data->getHairpinMode(); + } + if ($data->isInitialized('linkLocalIPv6Address') && null !== $data->getLinkLocalIPv6Address()) { + $dataArray['LinkLocalIPv6Address'] = $data->getLinkLocalIPv6Address(); + } + if ($data->isInitialized('linkLocalIPv6PrefixLen') && null !== $data->getLinkLocalIPv6PrefixLen()) { + $dataArray['LinkLocalIPv6PrefixLen'] = $data->getLinkLocalIPv6PrefixLen(); + } + if ($data->isInitialized('ports') && null !== $data->getPorts()) { + $values = []; + foreach ($data->getPorts() as $key => $value) { + if (null === $value) { + $values[$key] = null; + continue; + } + $values_1 = []; + foreach ($value as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $values[$key] = $values_1; + } + $dataArray['Ports'] = $values; + } + if ($data->isInitialized('sandboxKey') && null !== $data->getSandboxKey()) { + $dataArray['SandboxKey'] = $data->getSandboxKey(); + } + if ($data->isInitialized('secondaryIPAddresses') && null !== $data->getSecondaryIPAddresses()) { + $values_2 = []; + foreach ($data->getSecondaryIPAddresses() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['SecondaryIPAddresses'] = $values_2; + } + if ($data->isInitialized('secondaryIPv6Addresses') && null !== $data->getSecondaryIPv6Addresses()) { + $values_3 = []; + foreach ($data->getSecondaryIPv6Addresses() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['SecondaryIPv6Addresses'] = $values_3; + } + if ($data->isInitialized('endpointID') && null !== $data->getEndpointID()) { + $dataArray['EndpointID'] = $data->getEndpointID(); + } + if ($data->isInitialized('gateway') && null !== $data->getGateway()) { + $dataArray['Gateway'] = $data->getGateway(); + } + if ($data->isInitialized('globalIPv6Address') && null !== $data->getGlobalIPv6Address()) { + $dataArray['GlobalIPv6Address'] = $data->getGlobalIPv6Address(); + } + if ($data->isInitialized('globalIPv6PrefixLen') && null !== $data->getGlobalIPv6PrefixLen()) { + $dataArray['GlobalIPv6PrefixLen'] = $data->getGlobalIPv6PrefixLen(); + } + if ($data->isInitialized('iPAddress') && null !== $data->getIPAddress()) { + $dataArray['IPAddress'] = $data->getIPAddress(); + } + if ($data->isInitialized('iPPrefixLen') && null !== $data->getIPPrefixLen()) { + $dataArray['IPPrefixLen'] = $data->getIPPrefixLen(); + } + if ($data->isInitialized('iPv6Gateway') && null !== $data->getIPv6Gateway()) { + $dataArray['IPv6Gateway'] = $data->getIPv6Gateway(); + } + if ($data->isInitialized('macAddress') && null !== $data->getMacAddress()) { + $dataArray['MacAddress'] = $data->getMacAddress(); + } + if ($data->isInitialized('networks') && null !== $data->getNetworks()) { + $values_4 = []; + foreach ($data->getNetworks() as $key_1 => $value_4) { + $values_4[$key_1] = $this->normalizer->normalize($value_4, 'json', $context); + } + $dataArray['Networks'] = $values_4; + } + foreach ($data as $key_2 => $value_5) { + if (preg_match('/.*/', (string) $key_2)) { + $dataArray[$key_2] = $value_5; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworkSettings::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkingConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkingConfigNormalizer.php new file mode 100644 index 000000000..2f8094498 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworkingConfigNormalizer.php @@ -0,0 +1,88 @@ + $value) { + $values[$key] = $this->denormalizer->denormalize($value, \Docker\API\Model\EndpointSettings::class, 'json', $context); + } + $object->setEndpointsConfig($values); + unset($data['EndpointsConfig']); + } elseif (\array_key_exists('EndpointsConfig', $data) && null === $data['EndpointsConfig']) { + $object->setEndpointsConfig(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('endpointsConfig') && null !== $data->getEndpointsConfig()) { + $values = []; + foreach ($data->getEndpointsConfig() as $key => $value) { + $values[$key] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['EndpointsConfig'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworkingConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksCreatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksCreatePostBodyNormalizer.php new file mode 100644 index 000000000..14440a861 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksCreatePostBodyNormalizer.php @@ -0,0 +1,190 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('CheckDuplicate', $data) && null !== $data['CheckDuplicate']) { + $object->setCheckDuplicate($data['CheckDuplicate']); + unset($data['CheckDuplicate']); + } elseif (\array_key_exists('CheckDuplicate', $data) && null === $data['CheckDuplicate']) { + $object->setCheckDuplicate(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Internal', $data) && null !== $data['Internal']) { + $object->setInternal($data['Internal']); + unset($data['Internal']); + } elseif (\array_key_exists('Internal', $data) && null === $data['Internal']) { + $object->setInternal(null); + } + if (\array_key_exists('Attachable', $data) && null !== $data['Attachable']) { + $object->setAttachable($data['Attachable']); + unset($data['Attachable']); + } elseif (\array_key_exists('Attachable', $data) && null === $data['Attachable']) { + $object->setAttachable(null); + } + if (\array_key_exists('Ingress', $data) && null !== $data['Ingress']) { + $object->setIngress($data['Ingress']); + unset($data['Ingress']); + } elseif (\array_key_exists('Ingress', $data) && null === $data['Ingress']) { + $object->setIngress(null); + } + if (\array_key_exists('IPAM', $data) && null !== $data['IPAM']) { + $object->setIPAM($this->denormalizer->denormalize($data['IPAM'], \Docker\API\Model\IPAM::class, 'json', $context)); + unset($data['IPAM']); + } elseif (\array_key_exists('IPAM', $data) && null === $data['IPAM']) { + $object->setIPAM(null); + } + if (\array_key_exists('EnableIPv6', $data) && null !== $data['EnableIPv6']) { + $object->setEnableIPv6($data['EnableIPv6']); + unset($data['EnableIPv6']); + } elseif (\array_key_exists('EnableIPv6', $data) && null === $data['EnableIPv6']) { + $object->setEnableIPv6(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value) { + $values[$key] = $value; + } + $object->setOptions($values); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $object->setLabels($values_1); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + foreach ($data as $key_2 => $value_2) { + if (preg_match('/.*/', (string) $key_2)) { + $object[$key_2] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + if ($data->isInitialized('checkDuplicate') && null !== $data->getCheckDuplicate()) { + $dataArray['CheckDuplicate'] = $data->getCheckDuplicate(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('internal') && null !== $data->getInternal()) { + $dataArray['Internal'] = $data->getInternal(); + } + if ($data->isInitialized('attachable') && null !== $data->getAttachable()) { + $dataArray['Attachable'] = $data->getAttachable(); + } + if ($data->isInitialized('ingress') && null !== $data->getIngress()) { + $dataArray['Ingress'] = $data->getIngress(); + } + if ($data->isInitialized('iPAM') && null !== $data->getIPAM()) { + $dataArray['IPAM'] = $this->normalizer->normalize($data->getIPAM(), 'json', $context); + } + if ($data->isInitialized('enableIPv6') && null !== $data->getEnableIPv6()) { + $dataArray['EnableIPv6'] = $data->getEnableIPv6(); + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values = []; + foreach ($data->getOptions() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Options'] = $values; + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_1 = []; + foreach ($data->getLabels() as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $dataArray['Labels'] = $values_1; + } + foreach ($data as $key_2 => $value_2) { + if (preg_match('/.*/', (string) $key_2)) { + $dataArray[$key_2] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworksCreatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksCreatePostResponse201Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksCreatePostResponse201Normalizer.php new file mode 100644 index 000000000..9f8eb8edb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksCreatePostResponse201Normalizer.php @@ -0,0 +1,89 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Warning', $data) && null !== $data['Warning']) { + $object->setWarning($data['Warning']); + unset($data['Warning']); + } elseif (\array_key_exists('Warning', $data) && null === $data['Warning']) { + $object->setWarning(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['Id'] = $data->getId(); + } + if ($data->isInitialized('warning') && null !== $data->getWarning()) { + $dataArray['Warning'] = $data->getWarning(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworksCreatePostResponse201::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksIdConnectPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksIdConnectPostBodyNormalizer.php new file mode 100644 index 000000000..c3970bceb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksIdConnectPostBodyNormalizer.php @@ -0,0 +1,89 @@ +setContainer($data['Container']); + unset($data['Container']); + } elseif (\array_key_exists('Container', $data) && null === $data['Container']) { + $object->setContainer(null); + } + if (\array_key_exists('EndpointConfig', $data) && null !== $data['EndpointConfig']) { + $object->setEndpointConfig($this->denormalizer->denormalize($data['EndpointConfig'], \Docker\API\Model\EndpointSettings::class, 'json', $context)); + unset($data['EndpointConfig']); + } elseif (\array_key_exists('EndpointConfig', $data) && null === $data['EndpointConfig']) { + $object->setEndpointConfig(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('container') && null !== $data->getContainer()) { + $dataArray['Container'] = $data->getContainer(); + } + if ($data->isInitialized('endpointConfig') && null !== $data->getEndpointConfig()) { + $dataArray['EndpointConfig'] = $this->normalizer->normalize($data->getEndpointConfig(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworksIdConnectPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksIdDisconnectPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksIdDisconnectPostBodyNormalizer.php new file mode 100644 index 000000000..e379e8c78 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksIdDisconnectPostBodyNormalizer.php @@ -0,0 +1,92 @@ +setContainer($data['Container']); + unset($data['Container']); + } elseif (\array_key_exists('Container', $data) && null === $data['Container']) { + $object->setContainer(null); + } + if (\array_key_exists('Force', $data) && null !== $data['Force']) { + $object->setForce($data['Force']); + unset($data['Force']); + } elseif (\array_key_exists('Force', $data) && null === $data['Force']) { + $object->setForce(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('container') && null !== $data->getContainer()) { + $dataArray['Container'] = $data->getContainer(); + } + if ($data->isInitialized('force') && null !== $data->getForce()) { + $dataArray['Force'] = $data->getForce(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworksIdDisconnectPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksPrunePostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksPrunePostResponse200Normalizer.php new file mode 100644 index 000000000..c519142f7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NetworksPrunePostResponse200Normalizer.php @@ -0,0 +1,88 @@ +setNetworksDeleted($values); + unset($data['NetworksDeleted']); + } elseif (\array_key_exists('NetworksDeleted', $data) && null === $data['NetworksDeleted']) { + $object->setNetworksDeleted(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('networksDeleted') && null !== $data->getNetworksDeleted()) { + $values = []; + foreach ($data->getNetworksDeleted() as $value) { + $values[] = $value; + } + $dataArray['NetworksDeleted'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NetworksPrunePostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeDescriptionNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeDescriptionNormalizer.php new file mode 100644 index 000000000..6715dc090 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeDescriptionNormalizer.php @@ -0,0 +1,116 @@ +setHostname($data['Hostname']); + unset($data['Hostname']); + } elseif (\array_key_exists('Hostname', $data) && null === $data['Hostname']) { + $object->setHostname(null); + } + if (\array_key_exists('Platform', $data) && null !== $data['Platform']) { + $object->setPlatform($this->denormalizer->denormalize($data['Platform'], \Docker\API\Model\Platform::class, 'json', $context)); + unset($data['Platform']); + } elseif (\array_key_exists('Platform', $data) && null === $data['Platform']) { + $object->setPlatform(null); + } + if (\array_key_exists('Resources', $data) && null !== $data['Resources']) { + $object->setResources($this->denormalizer->denormalize($data['Resources'], \Docker\API\Model\ResourceObject::class, 'json', $context)); + unset($data['Resources']); + } elseif (\array_key_exists('Resources', $data) && null === $data['Resources']) { + $object->setResources(null); + } + if (\array_key_exists('Engine', $data) && null !== $data['Engine']) { + $object->setEngine($this->denormalizer->denormalize($data['Engine'], \Docker\API\Model\EngineDescription::class, 'json', $context)); + unset($data['Engine']); + } elseif (\array_key_exists('Engine', $data) && null === $data['Engine']) { + $object->setEngine(null); + } + if (\array_key_exists('TLSInfo', $data) && null !== $data['TLSInfo']) { + $object->setTLSInfo($this->denormalizer->denormalize($data['TLSInfo'], \Docker\API\Model\TLSInfo::class, 'json', $context)); + unset($data['TLSInfo']); + } elseif (\array_key_exists('TLSInfo', $data) && null === $data['TLSInfo']) { + $object->setTLSInfo(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('hostname') && null !== $data->getHostname()) { + $dataArray['Hostname'] = $data->getHostname(); + } + if ($data->isInitialized('platform') && null !== $data->getPlatform()) { + $dataArray['Platform'] = $this->normalizer->normalize($data->getPlatform(), 'json', $context); + } + if ($data->isInitialized('resources') && null !== $data->getResources()) { + $dataArray['Resources'] = $this->normalizer->normalize($data->getResources(), 'json', $context); + } + if ($data->isInitialized('engine') && null !== $data->getEngine()) { + $dataArray['Engine'] = $this->normalizer->normalize($data->getEngine(), 'json', $context); + } + if ($data->isInitialized('tLSInfo') && null !== $data->getTLSInfo()) { + $dataArray['TLSInfo'] = $this->normalizer->normalize($data->getTLSInfo(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NodeDescription::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeNormalizer.php new file mode 100644 index 000000000..0148ac130 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeNormalizer.php @@ -0,0 +1,143 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\NodeSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($this->denormalizer->denormalize($data['Description'], \Docker\API\Model\NodeDescription::class, 'json', $context)); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Status', $data) && null !== $data['Status']) { + $object->setStatus($this->denormalizer->denormalize($data['Status'], \Docker\API\Model\NodeStatus::class, 'json', $context)); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('ManagerStatus', $data) && null !== $data['ManagerStatus']) { + $object->setManagerStatus($this->denormalizer->denormalize($data['ManagerStatus'], \Docker\API\Model\ManagerStatus::class, 'json', $context)); + unset($data['ManagerStatus']); + } elseif (\array_key_exists('ManagerStatus', $data) && null === $data['ManagerStatus']) { + $object->setManagerStatus(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('description') && null !== $data->getDescription()) { + $dataArray['Description'] = $this->normalizer->normalize($data->getDescription(), 'json', $context); + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['Status'] = $this->normalizer->normalize($data->getStatus(), 'json', $context); + } + if ($data->isInitialized('managerStatus') && null !== $data->getManagerStatus()) { + $dataArray['ManagerStatus'] = $this->normalizer->normalize($data->getManagerStatus(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Node::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeSpecNormalizer.php new file mode 100644 index 000000000..863748d56 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeSpecNormalizer.php @@ -0,0 +1,115 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Role', $data) && null !== $data['Role']) { + $object->setRole($data['Role']); + unset($data['Role']); + } elseif (\array_key_exists('Role', $data) && null === $data['Role']) { + $object->setRole(null); + } + if (\array_key_exists('Availability', $data) && null !== $data['Availability']) { + $object->setAvailability($data['Availability']); + unset($data['Availability']); + } elseif (\array_key_exists('Availability', $data) && null === $data['Availability']) { + $object->setAvailability(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('role') && null !== $data->getRole()) { + $dataArray['Role'] = $data->getRole(); + } + if ($data->isInitialized('availability') && null !== $data->getAvailability()) { + $dataArray['Availability'] = $data->getAvailability(); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NodeSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeStatusNormalizer.php new file mode 100644 index 000000000..df2c5c3fd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/NodeStatusNormalizer.php @@ -0,0 +1,98 @@ +setState($data['State']); + unset($data['State']); + } elseif (\array_key_exists('State', $data) && null === $data['State']) { + $object->setState(null); + } + if (\array_key_exists('Message', $data) && null !== $data['Message']) { + $object->setMessage($data['Message']); + unset($data['Message']); + } elseif (\array_key_exists('Message', $data) && null === $data['Message']) { + $object->setMessage(null); + } + if (\array_key_exists('Addr', $data) && null !== $data['Addr']) { + $object->setAddr($data['Addr']); + unset($data['Addr']); + } elseif (\array_key_exists('Addr', $data) && null === $data['Addr']) { + $object->setAddr(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('state') && null !== $data->getState()) { + $dataArray['State'] = $data->getState(); + } + if ($data->isInitialized('message') && null !== $data->getMessage()) { + $dataArray['Message'] = $data->getMessage(); + } + if ($data->isInitialized('addr') && null !== $data->getAddr()) { + $dataArray['Addr'] = $data->getAddr(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\NodeStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/OCIDescriptorNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/OCIDescriptorNormalizer.php new file mode 100644 index 000000000..16d539f06 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/OCIDescriptorNormalizer.php @@ -0,0 +1,98 @@ +setMediaType($data['mediaType']); + unset($data['mediaType']); + } elseif (\array_key_exists('mediaType', $data) && null === $data['mediaType']) { + $object->setMediaType(null); + } + if (\array_key_exists('digest', $data) && null !== $data['digest']) { + $object->setDigest($data['digest']); + unset($data['digest']); + } elseif (\array_key_exists('digest', $data) && null === $data['digest']) { + $object->setDigest(null); + } + if (\array_key_exists('size', $data) && null !== $data['size']) { + $object->setSize($data['size']); + unset($data['size']); + } elseif (\array_key_exists('size', $data) && null === $data['size']) { + $object->setSize(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('mediaType') && null !== $data->getMediaType()) { + $dataArray['mediaType'] = $data->getMediaType(); + } + if ($data->isInitialized('digest') && null !== $data->getDigest()) { + $dataArray['digest'] = $data->getDigest(); + } + if ($data->isInitialized('size') && null !== $data->getSize()) { + $dataArray['size'] = $data->getSize(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\OCIDescriptor::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/OCIPlatformNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/OCIPlatformNormalizer.php new file mode 100644 index 000000000..d32821784 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/OCIPlatformNormalizer.php @@ -0,0 +1,124 @@ +setArchitecture($data['architecture']); + unset($data['architecture']); + } elseif (\array_key_exists('architecture', $data) && null === $data['architecture']) { + $object->setArchitecture(null); + } + if (\array_key_exists('os', $data) && null !== $data['os']) { + $object->setOs($data['os']); + unset($data['os']); + } elseif (\array_key_exists('os', $data) && null === $data['os']) { + $object->setOs(null); + } + if (\array_key_exists('os.version', $data) && null !== $data['os.version']) { + $object->setOsVersion($data['os.version']); + unset($data['os.version']); + } elseif (\array_key_exists('os.version', $data) && null === $data['os.version']) { + $object->setOsVersion(null); + } + if (\array_key_exists('os.features', $data) && null !== $data['os.features']) { + $values = []; + foreach ($data['os.features'] as $value) { + $values[] = $value; + } + $object->setOsFeatures($values); + unset($data['os.features']); + } elseif (\array_key_exists('os.features', $data) && null === $data['os.features']) { + $object->setOsFeatures(null); + } + if (\array_key_exists('variant', $data) && null !== $data['variant']) { + $object->setVariant($data['variant']); + unset($data['variant']); + } elseif (\array_key_exists('variant', $data) && null === $data['variant']) { + $object->setVariant(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('architecture') && null !== $data->getArchitecture()) { + $dataArray['architecture'] = $data->getArchitecture(); + } + if ($data->isInitialized('os') && null !== $data->getOs()) { + $dataArray['os'] = $data->getOs(); + } + if ($data->isInitialized('osVersion') && null !== $data->getOsVersion()) { + $dataArray['os.version'] = $data->getOsVersion(); + } + if ($data->isInitialized('osFeatures') && null !== $data->getOsFeatures()) { + $values = []; + foreach ($data->getOsFeatures() as $value) { + $values[] = $value; + } + $dataArray['os.features'] = $values; + } + if ($data->isInitialized('variant') && null !== $data->getVariant()) { + $dataArray['variant'] = $data->getVariant(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\OCIPlatform::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ObjectVersionNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ObjectVersionNormalizer.php new file mode 100644 index 000000000..37b40c010 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ObjectVersionNormalizer.php @@ -0,0 +1,80 @@ +setIndex($data['Index']); + unset($data['Index']); + } elseif (\array_key_exists('Index', $data) && null === $data['Index']) { + $object->setIndex(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('index') && null !== $data->getIndex()) { + $dataArray['Index'] = $data->getIndex(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ObjectVersion::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PeerNodeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PeerNodeNormalizer.php new file mode 100644 index 000000000..6862f8e46 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PeerNodeNormalizer.php @@ -0,0 +1,89 @@ +setNodeID($data['NodeID']); + unset($data['NodeID']); + } elseif (\array_key_exists('NodeID', $data) && null === $data['NodeID']) { + $object->setNodeID(null); + } + if (\array_key_exists('Addr', $data) && null !== $data['Addr']) { + $object->setAddr($data['Addr']); + unset($data['Addr']); + } elseif (\array_key_exists('Addr', $data) && null === $data['Addr']) { + $object->setAddr(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nodeID') && null !== $data->getNodeID()) { + $dataArray['NodeID'] = $data->getNodeID(); + } + if ($data->isInitialized('addr') && null !== $data->getAddr()) { + $dataArray['Addr'] = $data->getAddr(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PeerNode::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PlatformNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PlatformNormalizer.php new file mode 100644 index 000000000..104dd090e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PlatformNormalizer.php @@ -0,0 +1,89 @@ +setArchitecture($data['Architecture']); + unset($data['Architecture']); + } elseif (\array_key_exists('Architecture', $data) && null === $data['Architecture']) { + $object->setArchitecture(null); + } + if (\array_key_exists('OS', $data) && null !== $data['OS']) { + $object->setOS($data['OS']); + unset($data['OS']); + } elseif (\array_key_exists('OS', $data) && null === $data['OS']) { + $object->setOS(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('architecture') && null !== $data->getArchitecture()) { + $dataArray['Architecture'] = $data->getArchitecture(); + } + if ($data->isInitialized('oS') && null !== $data->getOS()) { + $dataArray['OS'] = $data->getOS(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Platform::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigArgsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigArgsNormalizer.php new file mode 100644 index 000000000..f2856cbf9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigArgsNormalizer.php @@ -0,0 +1,115 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Settable', $data) && null !== $data['Settable']) { + $values = []; + foreach ($data['Settable'] as $value) { + $values[] = $value; + } + $object->setSettable($values); + unset($data['Settable']); + } elseif (\array_key_exists('Settable', $data) && null === $data['Settable']) { + $object->setSettable(null); + } + if (\array_key_exists('Value', $data) && null !== $data['Value']) { + $values_1 = []; + foreach ($data['Value'] as $value_1) { + $values_1[] = $value_1; + } + $object->setValue($values_1); + unset($data['Value']); + } elseif (\array_key_exists('Value', $data) && null === $data['Value']) { + $object->setValue(null); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $dataArray['Description'] = $data->getDescription(); + $values = []; + foreach ($data->getSettable() as $value) { + $values[] = $value; + } + $dataArray['Settable'] = $values; + $values_1 = []; + foreach ($data->getValue() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Value'] = $values_1; + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfigArgs::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigInterfaceNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigInterfaceNormalizer.php new file mode 100644 index 000000000..5905eb34d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigInterfaceNormalizer.php @@ -0,0 +1,102 @@ +denormalizer->denormalize($value, \Docker\API\Model\PluginInterfaceType::class, 'json', $context); + } + $object->setTypes($values); + unset($data['Types']); + } elseif (\array_key_exists('Types', $data) && null === $data['Types']) { + $object->setTypes(null); + } + if (\array_key_exists('Socket', $data) && null !== $data['Socket']) { + $object->setSocket($data['Socket']); + unset($data['Socket']); + } elseif (\array_key_exists('Socket', $data) && null === $data['Socket']) { + $object->setSocket(null); + } + if (\array_key_exists('ProtocolScheme', $data) && null !== $data['ProtocolScheme']) { + $object->setProtocolScheme($data['ProtocolScheme']); + unset($data['ProtocolScheme']); + } elseif (\array_key_exists('ProtocolScheme', $data) && null === $data['ProtocolScheme']) { + $object->setProtocolScheme(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $values = []; + foreach ($data->getTypes() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Types'] = $values; + $dataArray['Socket'] = $data->getSocket(); + if ($data->isInitialized('protocolScheme') && null !== $data->getProtocolScheme()) { + $dataArray['ProtocolScheme'] = $data->getProtocolScheme(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfigInterface::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigLinuxNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigLinuxNormalizer.php new file mode 100644 index 000000000..a15258424 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigLinuxNormalizer.php @@ -0,0 +1,111 @@ +setCapabilities($values); + unset($data['Capabilities']); + } elseif (\array_key_exists('Capabilities', $data) && null === $data['Capabilities']) { + $object->setCapabilities(null); + } + if (\array_key_exists('AllowAllDevices', $data) && null !== $data['AllowAllDevices']) { + $object->setAllowAllDevices($data['AllowAllDevices']); + unset($data['AllowAllDevices']); + } elseif (\array_key_exists('AllowAllDevices', $data) && null === $data['AllowAllDevices']) { + $object->setAllowAllDevices(null); + } + if (\array_key_exists('Devices', $data) && null !== $data['Devices']) { + $values_1 = []; + foreach ($data['Devices'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\PluginDevice::class, 'json', $context); + } + $object->setDevices($values_1); + unset($data['Devices']); + } elseif (\array_key_exists('Devices', $data) && null === $data['Devices']) { + $object->setDevices(null); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $values = []; + foreach ($data->getCapabilities() as $value) { + $values[] = $value; + } + $dataArray['Capabilities'] = $values; + $dataArray['AllowAllDevices'] = $data->getAllowAllDevices(); + $values_1 = []; + foreach ($data->getDevices() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Devices'] = $values_1; + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfigLinux::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigNetworkNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigNetworkNormalizer.php new file mode 100644 index 000000000..fb12ba4ea --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigNetworkNormalizer.php @@ -0,0 +1,78 @@ +setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Type'] = $data->getType(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfigNetwork::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigNormalizer.php new file mode 100644 index 000000000..d858f516e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigNormalizer.php @@ -0,0 +1,219 @@ +setDockerVersion($data['DockerVersion']); + unset($data['DockerVersion']); + } elseif (\array_key_exists('DockerVersion', $data) && null === $data['DockerVersion']) { + $object->setDockerVersion(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Documentation', $data) && null !== $data['Documentation']) { + $object->setDocumentation($data['Documentation']); + unset($data['Documentation']); + } elseif (\array_key_exists('Documentation', $data) && null === $data['Documentation']) { + $object->setDocumentation(null); + } + if (\array_key_exists('Interface', $data) && null !== $data['Interface']) { + $object->setInterface($this->denormalizer->denormalize($data['Interface'], \Docker\API\Model\PluginConfigInterface::class, 'json', $context)); + unset($data['Interface']); + } elseif (\array_key_exists('Interface', $data) && null === $data['Interface']) { + $object->setInterface(null); + } + if (\array_key_exists('Entrypoint', $data) && null !== $data['Entrypoint']) { + $values = []; + foreach ($data['Entrypoint'] as $value) { + $values[] = $value; + } + $object->setEntrypoint($values); + unset($data['Entrypoint']); + } elseif (\array_key_exists('Entrypoint', $data) && null === $data['Entrypoint']) { + $object->setEntrypoint(null); + } + if (\array_key_exists('WorkDir', $data) && null !== $data['WorkDir']) { + $object->setWorkDir($data['WorkDir']); + unset($data['WorkDir']); + } elseif (\array_key_exists('WorkDir', $data) && null === $data['WorkDir']) { + $object->setWorkDir(null); + } + if (\array_key_exists('User', $data) && null !== $data['User']) { + $object->setUser($this->denormalizer->denormalize($data['User'], \Docker\API\Model\PluginConfigUser::class, 'json', $context)); + unset($data['User']); + } elseif (\array_key_exists('User', $data) && null === $data['User']) { + $object->setUser(null); + } + if (\array_key_exists('Network', $data) && null !== $data['Network']) { + $object->setNetwork($this->denormalizer->denormalize($data['Network'], \Docker\API\Model\PluginConfigNetwork::class, 'json', $context)); + unset($data['Network']); + } elseif (\array_key_exists('Network', $data) && null === $data['Network']) { + $object->setNetwork(null); + } + if (\array_key_exists('Linux', $data) && null !== $data['Linux']) { + $object->setLinux($this->denormalizer->denormalize($data['Linux'], \Docker\API\Model\PluginConfigLinux::class, 'json', $context)); + unset($data['Linux']); + } elseif (\array_key_exists('Linux', $data) && null === $data['Linux']) { + $object->setLinux(null); + } + if (\array_key_exists('PropagatedMount', $data) && null !== $data['PropagatedMount']) { + $object->setPropagatedMount($data['PropagatedMount']); + unset($data['PropagatedMount']); + } elseif (\array_key_exists('PropagatedMount', $data) && null === $data['PropagatedMount']) { + $object->setPropagatedMount(null); + } + if (\array_key_exists('IpcHost', $data) && null !== $data['IpcHost']) { + $object->setIpcHost($data['IpcHost']); + unset($data['IpcHost']); + } elseif (\array_key_exists('IpcHost', $data) && null === $data['IpcHost']) { + $object->setIpcHost(null); + } + if (\array_key_exists('PidHost', $data) && null !== $data['PidHost']) { + $object->setPidHost($data['PidHost']); + unset($data['PidHost']); + } elseif (\array_key_exists('PidHost', $data) && null === $data['PidHost']) { + $object->setPidHost(null); + } + if (\array_key_exists('Mounts', $data) && null !== $data['Mounts']) { + $values_1 = []; + foreach ($data['Mounts'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\PluginMount::class, 'json', $context); + } + $object->setMounts($values_1); + unset($data['Mounts']); + } elseif (\array_key_exists('Mounts', $data) && null === $data['Mounts']) { + $object->setMounts(null); + } + if (\array_key_exists('Env', $data) && null !== $data['Env']) { + $values_2 = []; + foreach ($data['Env'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\PluginEnv::class, 'json', $context); + } + $object->setEnv($values_2); + unset($data['Env']); + } elseif (\array_key_exists('Env', $data) && null === $data['Env']) { + $object->setEnv(null); + } + if (\array_key_exists('Args', $data) && null !== $data['Args']) { + $object->setArgs($this->denormalizer->denormalize($data['Args'], \Docker\API\Model\PluginConfigArgs::class, 'json', $context)); + unset($data['Args']); + } elseif (\array_key_exists('Args', $data) && null === $data['Args']) { + $object->setArgs(null); + } + if (\array_key_exists('rootfs', $data) && null !== $data['rootfs']) { + $object->setRootfs($this->denormalizer->denormalize($data['rootfs'], \Docker\API\Model\PluginConfigRootfs::class, 'json', $context)); + unset($data['rootfs']); + } elseif (\array_key_exists('rootfs', $data) && null === $data['rootfs']) { + $object->setRootfs(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('dockerVersion') && null !== $data->getDockerVersion()) { + $dataArray['DockerVersion'] = $data->getDockerVersion(); + } + $dataArray['Description'] = $data->getDescription(); + $dataArray['Documentation'] = $data->getDocumentation(); + $dataArray['Interface'] = $this->normalizer->normalize($data->getInterface(), 'json', $context); + $values = []; + foreach ($data->getEntrypoint() as $value) { + $values[] = $value; + } + $dataArray['Entrypoint'] = $values; + $dataArray['WorkDir'] = $data->getWorkDir(); + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['User'] = $this->normalizer->normalize($data->getUser(), 'json', $context); + } + $dataArray['Network'] = $this->normalizer->normalize($data->getNetwork(), 'json', $context); + $dataArray['Linux'] = $this->normalizer->normalize($data->getLinux(), 'json', $context); + $dataArray['PropagatedMount'] = $data->getPropagatedMount(); + $dataArray['IpcHost'] = $data->getIpcHost(); + $dataArray['PidHost'] = $data->getPidHost(); + $values_1 = []; + foreach ($data->getMounts() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Mounts'] = $values_1; + $values_2 = []; + foreach ($data->getEnv() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['Env'] = $values_2; + $dataArray['Args'] = $this->normalizer->normalize($data->getArgs(), 'json', $context); + if ($data->isInitialized('rootfs') && null !== $data->getRootfs()) { + $dataArray['rootfs'] = $this->normalizer->normalize($data->getRootfs(), 'json', $context); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigRootfsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigRootfsNormalizer.php new file mode 100644 index 000000000..ad9c6dfb0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigRootfsNormalizer.php @@ -0,0 +1,97 @@ +setType($data['type']); + unset($data['type']); + } elseif (\array_key_exists('type', $data) && null === $data['type']) { + $object->setType(null); + } + if (\array_key_exists('diff_ids', $data) && null !== $data['diff_ids']) { + $values = []; + foreach ($data['diff_ids'] as $value) { + $values[] = $value; + } + $object->setDiffIds($values); + unset($data['diff_ids']); + } elseif (\array_key_exists('diff_ids', $data) && null === $data['diff_ids']) { + $object->setDiffIds(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['type'] = $data->getType(); + } + if ($data->isInitialized('diffIds') && null !== $data->getDiffIds()) { + $values = []; + foreach ($data->getDiffIds() as $value) { + $values[] = $value; + } + $dataArray['diff_ids'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfigRootfs::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigUserNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigUserNormalizer.php new file mode 100644 index 000000000..60d26eceb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginConfigUserNormalizer.php @@ -0,0 +1,89 @@ +setUID($data['UID']); + unset($data['UID']); + } elseif (\array_key_exists('UID', $data) && null === $data['UID']) { + $object->setUID(null); + } + if (\array_key_exists('GID', $data) && null !== $data['GID']) { + $object->setGID($data['GID']); + unset($data['GID']); + } elseif (\array_key_exists('GID', $data) && null === $data['GID']) { + $object->setGID(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('uID') && null !== $data->getUID()) { + $dataArray['UID'] = $data->getUID(); + } + if ($data->isInitialized('gID') && null !== $data->getGID()) { + $dataArray['GID'] = $data->getGID(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginConfigUser::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginDeviceNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginDeviceNormalizer.php new file mode 100644 index 000000000..abb7fd491 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginDeviceNormalizer.php @@ -0,0 +1,107 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Settable', $data) && null !== $data['Settable']) { + $values = []; + foreach ($data['Settable'] as $value) { + $values[] = $value; + } + $object->setSettable($values); + unset($data['Settable']); + } elseif (\array_key_exists('Settable', $data) && null === $data['Settable']) { + $object->setSettable(null); + } + if (\array_key_exists('Path', $data) && null !== $data['Path']) { + $object->setPath($data['Path']); + unset($data['Path']); + } elseif (\array_key_exists('Path', $data) && null === $data['Path']) { + $object->setPath(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $dataArray['Description'] = $data->getDescription(); + $values = []; + foreach ($data->getSettable() as $value) { + $values[] = $value; + } + $dataArray['Settable'] = $values; + $dataArray['Path'] = $data->getPath(); + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginDevice::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginEnvNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginEnvNormalizer.php new file mode 100644 index 000000000..9a7aa1b69 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginEnvNormalizer.php @@ -0,0 +1,107 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Settable', $data) && null !== $data['Settable']) { + $values = []; + foreach ($data['Settable'] as $value) { + $values[] = $value; + } + $object->setSettable($values); + unset($data['Settable']); + } elseif (\array_key_exists('Settable', $data) && null === $data['Settable']) { + $object->setSettable(null); + } + if (\array_key_exists('Value', $data) && null !== $data['Value']) { + $object->setValue($data['Value']); + unset($data['Value']); + } elseif (\array_key_exists('Value', $data) && null === $data['Value']) { + $object->setValue(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $dataArray['Description'] = $data->getDescription(); + $values = []; + foreach ($data->getSettable() as $value) { + $values[] = $value; + } + $dataArray['Settable'] = $values; + $dataArray['Value'] = $data->getValue(); + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginEnv::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginInterfaceTypeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginInterfaceTypeNormalizer.php new file mode 100644 index 000000000..f22e0eeb6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginInterfaceTypeNormalizer.php @@ -0,0 +1,92 @@ +setPrefix($data['Prefix']); + unset($data['Prefix']); + } elseif (\array_key_exists('Prefix', $data) && null === $data['Prefix']) { + $object->setPrefix(null); + } + if (\array_key_exists('Capability', $data) && null !== $data['Capability']) { + $object->setCapability($data['Capability']); + unset($data['Capability']); + } elseif (\array_key_exists('Capability', $data) && null === $data['Capability']) { + $object->setCapability(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($data['Version']); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Prefix'] = $data->getPrefix(); + $dataArray['Capability'] = $data->getCapability(); + $dataArray['Version'] = $data->getVersion(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginInterfaceType::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginMountNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginMountNormalizer.php new file mode 100644 index 000000000..5f8246e13 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginMountNormalizer.php @@ -0,0 +1,136 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Settable', $data) && null !== $data['Settable']) { + $values = []; + foreach ($data['Settable'] as $value) { + $values[] = $value; + } + $object->setSettable($values); + unset($data['Settable']); + } elseif (\array_key_exists('Settable', $data) && null === $data['Settable']) { + $object->setSettable(null); + } + if (\array_key_exists('Source', $data) && null !== $data['Source']) { + $object->setSource($data['Source']); + unset($data['Source']); + } elseif (\array_key_exists('Source', $data) && null === $data['Source']) { + $object->setSource(null); + } + if (\array_key_exists('Destination', $data) && null !== $data['Destination']) { + $object->setDestination($data['Destination']); + unset($data['Destination']); + } elseif (\array_key_exists('Destination', $data) && null === $data['Destination']) { + $object->setDestination(null); + } + if (\array_key_exists('Type', $data) && null !== $data['Type']) { + $object->setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values_1 = []; + foreach ($data['Options'] as $value_1) { + $values_1[] = $value_1; + } + $object->setOptions($values_1); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $dataArray['Description'] = $data->getDescription(); + $values = []; + foreach ($data->getSettable() as $value) { + $values[] = $value; + } + $dataArray['Settable'] = $values; + $dataArray['Source'] = $data->getSource(); + $dataArray['Destination'] = $data->getDestination(); + $dataArray['Type'] = $data->getType(); + $values_1 = []; + foreach ($data->getOptions() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Options'] = $values_1; + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginMount::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginNormalizer.php new file mode 100644 index 000000000..ce410dcce --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginNormalizer.php @@ -0,0 +1,120 @@ +setId($data['Id']); + unset($data['Id']); + } elseif (\array_key_exists('Id', $data) && null === $data['Id']) { + $object->setId(null); + } + if (\array_key_exists('Name', $data) && null !== $data['Name']) { + $object->setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Enabled', $data) && null !== $data['Enabled']) { + $object->setEnabled($data['Enabled']); + unset($data['Enabled']); + } elseif (\array_key_exists('Enabled', $data) && null === $data['Enabled']) { + $object->setEnabled(null); + } + if (\array_key_exists('Settings', $data) && null !== $data['Settings']) { + $object->setSettings($this->denormalizer->denormalize($data['Settings'], \Docker\API\Model\PluginSettings::class, 'json', $context)); + unset($data['Settings']); + } elseif (\array_key_exists('Settings', $data) && null === $data['Settings']) { + $object->setSettings(null); + } + if (\array_key_exists('PluginReference', $data) && null !== $data['PluginReference']) { + $object->setPluginReference($data['PluginReference']); + unset($data['PluginReference']); + } elseif (\array_key_exists('PluginReference', $data) && null === $data['PluginReference']) { + $object->setPluginReference(null); + } + if (\array_key_exists('Config', $data) && null !== $data['Config']) { + $object->setConfig($this->denormalizer->denormalize($data['Config'], \Docker\API\Model\PluginConfig::class, 'json', $context)); + unset($data['Config']); + } elseif (\array_key_exists('Config', $data) && null === $data['Config']) { + $object->setConfig(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('id') && null !== $data->getId()) { + $dataArray['Id'] = $data->getId(); + } + $dataArray['Name'] = $data->getName(); + $dataArray['Enabled'] = $data->getEnabled(); + $dataArray['Settings'] = $this->normalizer->normalize($data->getSettings(), 'json', $context); + if ($data->isInitialized('pluginReference') && null !== $data->getPluginReference()) { + $dataArray['PluginReference'] = $data->getPluginReference(); + } + $dataArray['Config'] = $this->normalizer->normalize($data->getConfig(), 'json', $context); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Plugin::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginPrivilegeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginPrivilegeNormalizer.php new file mode 100644 index 000000000..8fb054412 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginPrivilegeNormalizer.php @@ -0,0 +1,106 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Description', $data) && null !== $data['Description']) { + $object->setDescription($data['Description']); + unset($data['Description']); + } elseif (\array_key_exists('Description', $data) && null === $data['Description']) { + $object->setDescription(null); + } + if (\array_key_exists('Value', $data) && null !== $data['Value']) { + $values = []; + foreach ($data['Value'] as $value) { + $values[] = $value; + } + $object->setValue($values); + unset($data['Value']); + } elseif (\array_key_exists('Value', $data) && null === $data['Value']) { + $object->setValue(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('description') && null !== $data->getDescription()) { + $dataArray['Description'] = $data->getDescription(); + } + if ($data->isInitialized('value') && null !== $data->getValue()) { + $values = []; + foreach ($data->getValue() as $value) { + $values[] = $value; + } + $dataArray['Value'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginPrivilege::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginSettingsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginSettingsNormalizer.php new file mode 100644 index 000000000..31a60a517 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginSettingsNormalizer.php @@ -0,0 +1,131 @@ +denormalizer->denormalize($value, \Docker\API\Model\PluginMount::class, 'json', $context); + } + $object->setMounts($values); + unset($data['Mounts']); + } elseif (\array_key_exists('Mounts', $data) && null === $data['Mounts']) { + $object->setMounts(null); + } + if (\array_key_exists('Env', $data) && null !== $data['Env']) { + $values_1 = []; + foreach ($data['Env'] as $value_1) { + $values_1[] = $value_1; + } + $object->setEnv($values_1); + unset($data['Env']); + } elseif (\array_key_exists('Env', $data) && null === $data['Env']) { + $object->setEnv(null); + } + if (\array_key_exists('Args', $data) && null !== $data['Args']) { + $values_2 = []; + foreach ($data['Args'] as $value_2) { + $values_2[] = $value_2; + } + $object->setArgs($values_2); + unset($data['Args']); + } elseif (\array_key_exists('Args', $data) && null === $data['Args']) { + $object->setArgs(null); + } + if (\array_key_exists('Devices', $data) && null !== $data['Devices']) { + $values_3 = []; + foreach ($data['Devices'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\PluginDevice::class, 'json', $context); + } + $object->setDevices($values_3); + unset($data['Devices']); + } elseif (\array_key_exists('Devices', $data) && null === $data['Devices']) { + $object->setDevices(null); + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $values = []; + foreach ($data->getMounts() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Mounts'] = $values; + $values_1 = []; + foreach ($data->getEnv() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Env'] = $values_1; + $values_2 = []; + foreach ($data->getArgs() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Args'] = $values_2; + $values_3 = []; + foreach ($data->getDevices() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['Devices'] = $values_3; + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginSettings::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginsInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginsInfoNormalizer.php new file mode 100644 index 000000000..1e70509de --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PluginsInfoNormalizer.php @@ -0,0 +1,139 @@ +setVolume($values); + unset($data['Volume']); + } elseif (\array_key_exists('Volume', $data) && null === $data['Volume']) { + $object->setVolume(null); + } + if (\array_key_exists('Network', $data) && null !== $data['Network']) { + $values_1 = []; + foreach ($data['Network'] as $value_1) { + $values_1[] = $value_1; + } + $object->setNetwork($values_1); + unset($data['Network']); + } elseif (\array_key_exists('Network', $data) && null === $data['Network']) { + $object->setNetwork(null); + } + if (\array_key_exists('Authorization', $data) && null !== $data['Authorization']) { + $values_2 = []; + foreach ($data['Authorization'] as $value_2) { + $values_2[] = $value_2; + } + $object->setAuthorization($values_2); + unset($data['Authorization']); + } elseif (\array_key_exists('Authorization', $data) && null === $data['Authorization']) { + $object->setAuthorization(null); + } + if (\array_key_exists('Log', $data) && null !== $data['Log']) { + $values_3 = []; + foreach ($data['Log'] as $value_3) { + $values_3[] = $value_3; + } + $object->setLog($values_3); + unset($data['Log']); + } elseif (\array_key_exists('Log', $data) && null === $data['Log']) { + $object->setLog(null); + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('volume') && null !== $data->getVolume()) { + $values = []; + foreach ($data->getVolume() as $value) { + $values[] = $value; + } + $dataArray['Volume'] = $values; + } + if ($data->isInitialized('network') && null !== $data->getNetwork()) { + $values_1 = []; + foreach ($data->getNetwork() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Network'] = $values_1; + } + if ($data->isInitialized('authorization') && null !== $data->getAuthorization()) { + $values_2 = []; + foreach ($data->getAuthorization() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Authorization'] = $values_2; + } + if ($data->isInitialized('log') && null !== $data->getLog()) { + $values_3 = []; + foreach ($data->getLog() as $value_3) { + $values_3[] = $value_3; + } + $dataArray['Log'] = $values_3; + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PluginsInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortBindingNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortBindingNormalizer.php new file mode 100644 index 000000000..6ae9291d3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortBindingNormalizer.php @@ -0,0 +1,89 @@ +setHostIp($data['HostIp']); + unset($data['HostIp']); + } elseif (\array_key_exists('HostIp', $data) && null === $data['HostIp']) { + $object->setHostIp(null); + } + if (\array_key_exists('HostPort', $data) && null !== $data['HostPort']) { + $object->setHostPort($data['HostPort']); + unset($data['HostPort']); + } elseif (\array_key_exists('HostPort', $data) && null === $data['HostPort']) { + $object->setHostPort(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('hostIp') && null !== $data->getHostIp()) { + $dataArray['HostIp'] = $data->getHostIp(); + } + if ($data->isInitialized('hostPort') && null !== $data->getHostPort()) { + $dataArray['HostPort'] = $data->getHostPort(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PortBinding::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortNormalizer.php new file mode 100644 index 000000000..d2a15e6cb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortNormalizer.php @@ -0,0 +1,103 @@ +setIP($data['IP']); + unset($data['IP']); + } elseif (\array_key_exists('IP', $data) && null === $data['IP']) { + $object->setIP(null); + } + if (\array_key_exists('PrivatePort', $data) && null !== $data['PrivatePort']) { + $object->setPrivatePort($data['PrivatePort']); + unset($data['PrivatePort']); + } elseif (\array_key_exists('PrivatePort', $data) && null === $data['PrivatePort']) { + $object->setPrivatePort(null); + } + if (\array_key_exists('PublicPort', $data) && null !== $data['PublicPort']) { + $object->setPublicPort($data['PublicPort']); + unset($data['PublicPort']); + } elseif (\array_key_exists('PublicPort', $data) && null === $data['PublicPort']) { + $object->setPublicPort(null); + } + if (\array_key_exists('Type', $data) && null !== $data['Type']) { + $object->setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iP') && null !== $data->getIP()) { + $dataArray['IP'] = $data->getIP(); + } + $dataArray['PrivatePort'] = $data->getPrivatePort(); + if ($data->isInitialized('publicPort') && null !== $data->getPublicPort()) { + $dataArray['PublicPort'] = $data->getPublicPort(); + } + $dataArray['Type'] = $data->getType(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Port::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortStatusNormalizer.php new file mode 100644 index 000000000..6a59c4cd9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PortStatusNormalizer.php @@ -0,0 +1,88 @@ +denormalizer->denormalize($value, \Docker\API\Model\EndpointPortConfig::class, 'json', $context); + } + $object->setPorts($values); + unset($data['Ports']); + } elseif (\array_key_exists('Ports', $data) && null === $data['Ports']) { + $object->setPorts(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('ports') && null !== $data->getPorts()) { + $values = []; + foreach ($data->getPorts() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Ports'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PortStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ProcessConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ProcessConfigNormalizer.php new file mode 100644 index 000000000..caac37ddd --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ProcessConfigNormalizer.php @@ -0,0 +1,130 @@ +setPrivileged($data['privileged']); + unset($data['privileged']); + } elseif (\array_key_exists('privileged', $data) && null === $data['privileged']) { + $object->setPrivileged(null); + } + if (\array_key_exists('user', $data) && null !== $data['user']) { + $object->setUser($data['user']); + unset($data['user']); + } elseif (\array_key_exists('user', $data) && null === $data['user']) { + $object->setUser(null); + } + if (\array_key_exists('tty', $data) && null !== $data['tty']) { + $object->setTty($data['tty']); + unset($data['tty']); + } elseif (\array_key_exists('tty', $data) && null === $data['tty']) { + $object->setTty(null); + } + if (\array_key_exists('entrypoint', $data) && null !== $data['entrypoint']) { + $object->setEntrypoint($data['entrypoint']); + unset($data['entrypoint']); + } elseif (\array_key_exists('entrypoint', $data) && null === $data['entrypoint']) { + $object->setEntrypoint(null); + } + if (\array_key_exists('arguments', $data) && null !== $data['arguments']) { + $values = []; + foreach ($data['arguments'] as $value) { + $values[] = $value; + } + $object->setArguments($values); + unset($data['arguments']); + } elseif (\array_key_exists('arguments', $data) && null === $data['arguments']) { + $object->setArguments(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('privileged') && null !== $data->getPrivileged()) { + $dataArray['privileged'] = $data->getPrivileged(); + } + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['user'] = $data->getUser(); + } + if ($data->isInitialized('tty') && null !== $data->getTty()) { + $dataArray['tty'] = $data->getTty(); + } + if ($data->isInitialized('entrypoint') && null !== $data->getEntrypoint()) { + $dataArray['entrypoint'] = $data->getEntrypoint(); + } + if ($data->isInitialized('arguments') && null !== $data->getArguments()) { + $values = []; + foreach ($data->getArguments() as $value) { + $values[] = $value; + } + $dataArray['arguments'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ProcessConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ProgressDetailNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ProgressDetailNormalizer.php new file mode 100644 index 000000000..65f378fcb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ProgressDetailNormalizer.php @@ -0,0 +1,89 @@ +setCurrent($data['current']); + unset($data['current']); + } elseif (\array_key_exists('current', $data) && null === $data['current']) { + $object->setCurrent(null); + } + if (\array_key_exists('total', $data) && null !== $data['total']) { + $object->setTotal($data['total']); + unset($data['total']); + } elseif (\array_key_exists('total', $data) && null === $data['total']) { + $object->setTotal(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('current') && null !== $data->getCurrent()) { + $dataArray['current'] = $data->getCurrent(); + } + if ($data->isInitialized('total') && null !== $data->getTotal()) { + $dataArray['total'] = $data->getTotal(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ProgressDetail::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/PushImageInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PushImageInfoNormalizer.php new file mode 100644 index 000000000..94cb1491f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/PushImageInfoNormalizer.php @@ -0,0 +1,107 @@ +setError($data['error']); + unset($data['error']); + } elseif (\array_key_exists('error', $data) && null === $data['error']) { + $object->setError(null); + } + if (\array_key_exists('status', $data) && null !== $data['status']) { + $object->setStatus($data['status']); + unset($data['status']); + } elseif (\array_key_exists('status', $data) && null === $data['status']) { + $object->setStatus(null); + } + if (\array_key_exists('progress', $data) && null !== $data['progress']) { + $object->setProgress($data['progress']); + unset($data['progress']); + } elseif (\array_key_exists('progress', $data) && null === $data['progress']) { + $object->setProgress(null); + } + if (\array_key_exists('progressDetail', $data) && null !== $data['progressDetail']) { + $object->setProgressDetail($this->denormalizer->denormalize($data['progressDetail'], \Docker\API\Model\ProgressDetail::class, 'json', $context)); + unset($data['progressDetail']); + } elseif (\array_key_exists('progressDetail', $data) && null === $data['progressDetail']) { + $object->setProgressDetail(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('error') && null !== $data->getError()) { + $dataArray['error'] = $data->getError(); + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['status'] = $data->getStatus(); + } + if ($data->isInitialized('progress') && null !== $data->getProgress()) { + $dataArray['progress'] = $data->getProgress(); + } + if ($data->isInitialized('progressDetail') && null !== $data->getProgressDetail()) { + $dataArray['progressDetail'] = $this->normalizer->normalize($data->getProgressDetail(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\PushImageInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/RegistryServiceConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/RegistryServiceConfigNormalizer.php new file mode 100644 index 000000000..d275b03e4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/RegistryServiceConfigNormalizer.php @@ -0,0 +1,156 @@ +setAllowNondistributableArtifactsCIDRs($values); + unset($data['AllowNondistributableArtifactsCIDRs']); + } elseif (\array_key_exists('AllowNondistributableArtifactsCIDRs', $data) && null === $data['AllowNondistributableArtifactsCIDRs']) { + $object->setAllowNondistributableArtifactsCIDRs(null); + } + if (\array_key_exists('AllowNondistributableArtifactsHostnames', $data) && null !== $data['AllowNondistributableArtifactsHostnames']) { + $values_1 = []; + foreach ($data['AllowNondistributableArtifactsHostnames'] as $value_1) { + $values_1[] = $value_1; + } + $object->setAllowNondistributableArtifactsHostnames($values_1); + unset($data['AllowNondistributableArtifactsHostnames']); + } elseif (\array_key_exists('AllowNondistributableArtifactsHostnames', $data) && null === $data['AllowNondistributableArtifactsHostnames']) { + $object->setAllowNondistributableArtifactsHostnames(null); + } + if (\array_key_exists('InsecureRegistryCIDRs', $data) && null !== $data['InsecureRegistryCIDRs']) { + $values_2 = []; + foreach ($data['InsecureRegistryCIDRs'] as $value_2) { + $values_2[] = $value_2; + } + $object->setInsecureRegistryCIDRs($values_2); + unset($data['InsecureRegistryCIDRs']); + } elseif (\array_key_exists('InsecureRegistryCIDRs', $data) && null === $data['InsecureRegistryCIDRs']) { + $object->setInsecureRegistryCIDRs(null); + } + if (\array_key_exists('IndexConfigs', $data) && null !== $data['IndexConfigs']) { + $values_3 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['IndexConfigs'] as $key => $value_3) { + $values_3[$key] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\IndexInfo::class, 'json', $context); + } + $object->setIndexConfigs($values_3); + unset($data['IndexConfigs']); + } elseif (\array_key_exists('IndexConfigs', $data) && null === $data['IndexConfigs']) { + $object->setIndexConfigs(null); + } + if (\array_key_exists('Mirrors', $data) && null !== $data['Mirrors']) { + $values_4 = []; + foreach ($data['Mirrors'] as $value_4) { + $values_4[] = $value_4; + } + $object->setMirrors($values_4); + unset($data['Mirrors']); + } elseif (\array_key_exists('Mirrors', $data) && null === $data['Mirrors']) { + $object->setMirrors(null); + } + foreach ($data as $key_1 => $value_5) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_5; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('allowNondistributableArtifactsCIDRs') && null !== $data->getAllowNondistributableArtifactsCIDRs()) { + $values = []; + foreach ($data->getAllowNondistributableArtifactsCIDRs() as $value) { + $values[] = $value; + } + $dataArray['AllowNondistributableArtifactsCIDRs'] = $values; + } + if ($data->isInitialized('allowNondistributableArtifactsHostnames') && null !== $data->getAllowNondistributableArtifactsHostnames()) { + $values_1 = []; + foreach ($data->getAllowNondistributableArtifactsHostnames() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['AllowNondistributableArtifactsHostnames'] = $values_1; + } + if ($data->isInitialized('insecureRegistryCIDRs') && null !== $data->getInsecureRegistryCIDRs()) { + $values_2 = []; + foreach ($data->getInsecureRegistryCIDRs() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['InsecureRegistryCIDRs'] = $values_2; + } + if ($data->isInitialized('indexConfigs') && null !== $data->getIndexConfigs()) { + $values_3 = []; + foreach ($data->getIndexConfigs() as $key => $value_3) { + $values_3[$key] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['IndexConfigs'] = $values_3; + } + if ($data->isInitialized('mirrors') && null !== $data->getMirrors()) { + $values_4 = []; + foreach ($data->getMirrors() as $value_4) { + $values_4[] = $value_4; + } + $dataArray['Mirrors'] = $values_4; + } + foreach ($data as $key_1 => $value_5) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_5; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\RegistryServiceConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourceObjectNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourceObjectNormalizer.php new file mode 100644 index 000000000..a39ec8eeb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourceObjectNormalizer.php @@ -0,0 +1,106 @@ +setNanoCPUs($data['NanoCPUs']); + unset($data['NanoCPUs']); + } elseif (\array_key_exists('NanoCPUs', $data) && null === $data['NanoCPUs']) { + $object->setNanoCPUs(null); + } + if (\array_key_exists('MemoryBytes', $data) && null !== $data['MemoryBytes']) { + $object->setMemoryBytes($data['MemoryBytes']); + unset($data['MemoryBytes']); + } elseif (\array_key_exists('MemoryBytes', $data) && null === $data['MemoryBytes']) { + $object->setMemoryBytes(null); + } + if (\array_key_exists('GenericResources', $data) && null !== $data['GenericResources']) { + $values = []; + foreach ($data['GenericResources'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\GenericResourcesItem::class, 'json', $context); + } + $object->setGenericResources($values); + unset($data['GenericResources']); + } elseif (\array_key_exists('GenericResources', $data) && null === $data['GenericResources']) { + $object->setGenericResources(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nanoCPUs') && null !== $data->getNanoCPUs()) { + $dataArray['NanoCPUs'] = $data->getNanoCPUs(); + } + if ($data->isInitialized('memoryBytes') && null !== $data->getMemoryBytes()) { + $dataArray['MemoryBytes'] = $data->getMemoryBytes(); + } + if ($data->isInitialized('genericResources') && null !== $data->getGenericResources()) { + $values = []; + foreach ($data->getGenericResources() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['GenericResources'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ResourceObject::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesBlkioWeightDeviceItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesBlkioWeightDeviceItemNormalizer.php new file mode 100644 index 000000000..837f83bcb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesBlkioWeightDeviceItemNormalizer.php @@ -0,0 +1,89 @@ +setPath($data['Path']); + unset($data['Path']); + } elseif (\array_key_exists('Path', $data) && null === $data['Path']) { + $object->setPath(null); + } + if (\array_key_exists('Weight', $data) && null !== $data['Weight']) { + $object->setWeight($data['Weight']); + unset($data['Weight']); + } elseif (\array_key_exists('Weight', $data) && null === $data['Weight']) { + $object->setWeight(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('path') && null !== $data->getPath()) { + $dataArray['Path'] = $data->getPath(); + } + if ($data->isInitialized('weight') && null !== $data->getWeight()) { + $dataArray['Weight'] = $data->getWeight(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ResourcesBlkioWeightDeviceItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesNormalizer.php new file mode 100644 index 000000000..6f46c84e0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesNormalizer.php @@ -0,0 +1,428 @@ +setCpuShares($data['CpuShares']); + unset($data['CpuShares']); + } elseif (\array_key_exists('CpuShares', $data) && null === $data['CpuShares']) { + $object->setCpuShares(null); + } + if (\array_key_exists('Memory', $data) && null !== $data['Memory']) { + $object->setMemory($data['Memory']); + unset($data['Memory']); + } elseif (\array_key_exists('Memory', $data) && null === $data['Memory']) { + $object->setMemory(null); + } + if (\array_key_exists('CgroupParent', $data) && null !== $data['CgroupParent']) { + $object->setCgroupParent($data['CgroupParent']); + unset($data['CgroupParent']); + } elseif (\array_key_exists('CgroupParent', $data) && null === $data['CgroupParent']) { + $object->setCgroupParent(null); + } + if (\array_key_exists('BlkioWeight', $data) && null !== $data['BlkioWeight']) { + $object->setBlkioWeight($data['BlkioWeight']); + unset($data['BlkioWeight']); + } elseif (\array_key_exists('BlkioWeight', $data) && null === $data['BlkioWeight']) { + $object->setBlkioWeight(null); + } + if (\array_key_exists('BlkioWeightDevice', $data) && null !== $data['BlkioWeightDevice']) { + $values = []; + foreach ($data['BlkioWeightDevice'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ResourcesBlkioWeightDeviceItem::class, 'json', $context); + } + $object->setBlkioWeightDevice($values); + unset($data['BlkioWeightDevice']); + } elseif (\array_key_exists('BlkioWeightDevice', $data) && null === $data['BlkioWeightDevice']) { + $object->setBlkioWeightDevice(null); + } + if (\array_key_exists('BlkioDeviceReadBps', $data) && null !== $data['BlkioDeviceReadBps']) { + $values_1 = []; + foreach ($data['BlkioDeviceReadBps'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceReadBps($values_1); + unset($data['BlkioDeviceReadBps']); + } elseif (\array_key_exists('BlkioDeviceReadBps', $data) && null === $data['BlkioDeviceReadBps']) { + $object->setBlkioDeviceReadBps(null); + } + if (\array_key_exists('BlkioDeviceWriteBps', $data) && null !== $data['BlkioDeviceWriteBps']) { + $values_2 = []; + foreach ($data['BlkioDeviceWriteBps'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceWriteBps($values_2); + unset($data['BlkioDeviceWriteBps']); + } elseif (\array_key_exists('BlkioDeviceWriteBps', $data) && null === $data['BlkioDeviceWriteBps']) { + $object->setBlkioDeviceWriteBps(null); + } + if (\array_key_exists('BlkioDeviceReadIOps', $data) && null !== $data['BlkioDeviceReadIOps']) { + $values_3 = []; + foreach ($data['BlkioDeviceReadIOps'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceReadIOps($values_3); + unset($data['BlkioDeviceReadIOps']); + } elseif (\array_key_exists('BlkioDeviceReadIOps', $data) && null === $data['BlkioDeviceReadIOps']) { + $object->setBlkioDeviceReadIOps(null); + } + if (\array_key_exists('BlkioDeviceWriteIOps', $data) && null !== $data['BlkioDeviceWriteIOps']) { + $values_4 = []; + foreach ($data['BlkioDeviceWriteIOps'] as $value_4) { + $values_4[] = $this->denormalizer->denormalize($value_4, \Docker\API\Model\ThrottleDevice::class, 'json', $context); + } + $object->setBlkioDeviceWriteIOps($values_4); + unset($data['BlkioDeviceWriteIOps']); + } elseif (\array_key_exists('BlkioDeviceWriteIOps', $data) && null === $data['BlkioDeviceWriteIOps']) { + $object->setBlkioDeviceWriteIOps(null); + } + if (\array_key_exists('CpuPeriod', $data) && null !== $data['CpuPeriod']) { + $object->setCpuPeriod($data['CpuPeriod']); + unset($data['CpuPeriod']); + } elseif (\array_key_exists('CpuPeriod', $data) && null === $data['CpuPeriod']) { + $object->setCpuPeriod(null); + } + if (\array_key_exists('CpuQuota', $data) && null !== $data['CpuQuota']) { + $object->setCpuQuota($data['CpuQuota']); + unset($data['CpuQuota']); + } elseif (\array_key_exists('CpuQuota', $data) && null === $data['CpuQuota']) { + $object->setCpuQuota(null); + } + if (\array_key_exists('CpuRealtimePeriod', $data) && null !== $data['CpuRealtimePeriod']) { + $object->setCpuRealtimePeriod($data['CpuRealtimePeriod']); + unset($data['CpuRealtimePeriod']); + } elseif (\array_key_exists('CpuRealtimePeriod', $data) && null === $data['CpuRealtimePeriod']) { + $object->setCpuRealtimePeriod(null); + } + if (\array_key_exists('CpuRealtimeRuntime', $data) && null !== $data['CpuRealtimeRuntime']) { + $object->setCpuRealtimeRuntime($data['CpuRealtimeRuntime']); + unset($data['CpuRealtimeRuntime']); + } elseif (\array_key_exists('CpuRealtimeRuntime', $data) && null === $data['CpuRealtimeRuntime']) { + $object->setCpuRealtimeRuntime(null); + } + if (\array_key_exists('CpusetCpus', $data) && null !== $data['CpusetCpus']) { + $object->setCpusetCpus($data['CpusetCpus']); + unset($data['CpusetCpus']); + } elseif (\array_key_exists('CpusetCpus', $data) && null === $data['CpusetCpus']) { + $object->setCpusetCpus(null); + } + if (\array_key_exists('CpusetMems', $data) && null !== $data['CpusetMems']) { + $object->setCpusetMems($data['CpusetMems']); + unset($data['CpusetMems']); + } elseif (\array_key_exists('CpusetMems', $data) && null === $data['CpusetMems']) { + $object->setCpusetMems(null); + } + if (\array_key_exists('Devices', $data) && null !== $data['Devices']) { + $values_5 = []; + foreach ($data['Devices'] as $value_5) { + $values_5[] = $this->denormalizer->denormalize($value_5, \Docker\API\Model\DeviceMapping::class, 'json', $context); + } + $object->setDevices($values_5); + unset($data['Devices']); + } elseif (\array_key_exists('Devices', $data) && null === $data['Devices']) { + $object->setDevices(null); + } + if (\array_key_exists('DeviceCgroupRules', $data) && null !== $data['DeviceCgroupRules']) { + $values_6 = []; + foreach ($data['DeviceCgroupRules'] as $value_6) { + $values_6[] = $value_6; + } + $object->setDeviceCgroupRules($values_6); + unset($data['DeviceCgroupRules']); + } elseif (\array_key_exists('DeviceCgroupRules', $data) && null === $data['DeviceCgroupRules']) { + $object->setDeviceCgroupRules(null); + } + if (\array_key_exists('DeviceRequests', $data) && null !== $data['DeviceRequests']) { + $values_7 = []; + foreach ($data['DeviceRequests'] as $value_7) { + $values_7[] = $this->denormalizer->denormalize($value_7, \Docker\API\Model\DeviceRequest::class, 'json', $context); + } + $object->setDeviceRequests($values_7); + unset($data['DeviceRequests']); + } elseif (\array_key_exists('DeviceRequests', $data) && null === $data['DeviceRequests']) { + $object->setDeviceRequests(null); + } + if (\array_key_exists('KernelMemoryTCP', $data) && null !== $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP($data['KernelMemoryTCP']); + unset($data['KernelMemoryTCP']); + } elseif (\array_key_exists('KernelMemoryTCP', $data) && null === $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP(null); + } + if (\array_key_exists('MemoryReservation', $data) && null !== $data['MemoryReservation']) { + $object->setMemoryReservation($data['MemoryReservation']); + unset($data['MemoryReservation']); + } elseif (\array_key_exists('MemoryReservation', $data) && null === $data['MemoryReservation']) { + $object->setMemoryReservation(null); + } + if (\array_key_exists('MemorySwap', $data) && null !== $data['MemorySwap']) { + $object->setMemorySwap($data['MemorySwap']); + unset($data['MemorySwap']); + } elseif (\array_key_exists('MemorySwap', $data) && null === $data['MemorySwap']) { + $object->setMemorySwap(null); + } + if (\array_key_exists('MemorySwappiness', $data) && null !== $data['MemorySwappiness']) { + $object->setMemorySwappiness($data['MemorySwappiness']); + unset($data['MemorySwappiness']); + } elseif (\array_key_exists('MemorySwappiness', $data) && null === $data['MemorySwappiness']) { + $object->setMemorySwappiness(null); + } + if (\array_key_exists('NanoCpus', $data) && null !== $data['NanoCpus']) { + $object->setNanoCpus($data['NanoCpus']); + unset($data['NanoCpus']); + } elseif (\array_key_exists('NanoCpus', $data) && null === $data['NanoCpus']) { + $object->setNanoCpus(null); + } + if (\array_key_exists('OomKillDisable', $data) && null !== $data['OomKillDisable']) { + $object->setOomKillDisable($data['OomKillDisable']); + unset($data['OomKillDisable']); + } elseif (\array_key_exists('OomKillDisable', $data) && null === $data['OomKillDisable']) { + $object->setOomKillDisable(null); + } + if (\array_key_exists('Init', $data) && null !== $data['Init']) { + $object->setInit($data['Init']); + unset($data['Init']); + } elseif (\array_key_exists('Init', $data) && null === $data['Init']) { + $object->setInit(null); + } + if (\array_key_exists('PidsLimit', $data) && null !== $data['PidsLimit']) { + $object->setPidsLimit($data['PidsLimit']); + unset($data['PidsLimit']); + } elseif (\array_key_exists('PidsLimit', $data) && null === $data['PidsLimit']) { + $object->setPidsLimit(null); + } + if (\array_key_exists('Ulimits', $data) && null !== $data['Ulimits']) { + $values_8 = []; + foreach ($data['Ulimits'] as $value_8) { + $values_8[] = $this->denormalizer->denormalize($value_8, \Docker\API\Model\ResourcesUlimitsItem::class, 'json', $context); + } + $object->setUlimits($values_8); + unset($data['Ulimits']); + } elseif (\array_key_exists('Ulimits', $data) && null === $data['Ulimits']) { + $object->setUlimits(null); + } + if (\array_key_exists('CpuCount', $data) && null !== $data['CpuCount']) { + $object->setCpuCount($data['CpuCount']); + unset($data['CpuCount']); + } elseif (\array_key_exists('CpuCount', $data) && null === $data['CpuCount']) { + $object->setCpuCount(null); + } + if (\array_key_exists('CpuPercent', $data) && null !== $data['CpuPercent']) { + $object->setCpuPercent($data['CpuPercent']); + unset($data['CpuPercent']); + } elseif (\array_key_exists('CpuPercent', $data) && null === $data['CpuPercent']) { + $object->setCpuPercent(null); + } + if (\array_key_exists('IOMaximumIOps', $data) && null !== $data['IOMaximumIOps']) { + $object->setIOMaximumIOps($data['IOMaximumIOps']); + unset($data['IOMaximumIOps']); + } elseif (\array_key_exists('IOMaximumIOps', $data) && null === $data['IOMaximumIOps']) { + $object->setIOMaximumIOps(null); + } + if (\array_key_exists('IOMaximumBandwidth', $data) && null !== $data['IOMaximumBandwidth']) { + $object->setIOMaximumBandwidth($data['IOMaximumBandwidth']); + unset($data['IOMaximumBandwidth']); + } elseif (\array_key_exists('IOMaximumBandwidth', $data) && null === $data['IOMaximumBandwidth']) { + $object->setIOMaximumBandwidth(null); + } + foreach ($data as $key => $value_9) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_9; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('cpuShares') && null !== $data->getCpuShares()) { + $dataArray['CpuShares'] = $data->getCpuShares(); + } + if ($data->isInitialized('memory') && null !== $data->getMemory()) { + $dataArray['Memory'] = $data->getMemory(); + } + if ($data->isInitialized('cgroupParent') && null !== $data->getCgroupParent()) { + $dataArray['CgroupParent'] = $data->getCgroupParent(); + } + if ($data->isInitialized('blkioWeight') && null !== $data->getBlkioWeight()) { + $dataArray['BlkioWeight'] = $data->getBlkioWeight(); + } + if ($data->isInitialized('blkioWeightDevice') && null !== $data->getBlkioWeightDevice()) { + $values = []; + foreach ($data->getBlkioWeightDevice() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['BlkioWeightDevice'] = $values; + } + if ($data->isInitialized('blkioDeviceReadBps') && null !== $data->getBlkioDeviceReadBps()) { + $values_1 = []; + foreach ($data->getBlkioDeviceReadBps() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['BlkioDeviceReadBps'] = $values_1; + } + if ($data->isInitialized('blkioDeviceWriteBps') && null !== $data->getBlkioDeviceWriteBps()) { + $values_2 = []; + foreach ($data->getBlkioDeviceWriteBps() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['BlkioDeviceWriteBps'] = $values_2; + } + if ($data->isInitialized('blkioDeviceReadIOps') && null !== $data->getBlkioDeviceReadIOps()) { + $values_3 = []; + foreach ($data->getBlkioDeviceReadIOps() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['BlkioDeviceReadIOps'] = $values_3; + } + if ($data->isInitialized('blkioDeviceWriteIOps') && null !== $data->getBlkioDeviceWriteIOps()) { + $values_4 = []; + foreach ($data->getBlkioDeviceWriteIOps() as $value_4) { + $values_4[] = $this->normalizer->normalize($value_4, 'json', $context); + } + $dataArray['BlkioDeviceWriteIOps'] = $values_4; + } + if ($data->isInitialized('cpuPeriod') && null !== $data->getCpuPeriod()) { + $dataArray['CpuPeriod'] = $data->getCpuPeriod(); + } + if ($data->isInitialized('cpuQuota') && null !== $data->getCpuQuota()) { + $dataArray['CpuQuota'] = $data->getCpuQuota(); + } + if ($data->isInitialized('cpuRealtimePeriod') && null !== $data->getCpuRealtimePeriod()) { + $dataArray['CpuRealtimePeriod'] = $data->getCpuRealtimePeriod(); + } + if ($data->isInitialized('cpuRealtimeRuntime') && null !== $data->getCpuRealtimeRuntime()) { + $dataArray['CpuRealtimeRuntime'] = $data->getCpuRealtimeRuntime(); + } + if ($data->isInitialized('cpusetCpus') && null !== $data->getCpusetCpus()) { + $dataArray['CpusetCpus'] = $data->getCpusetCpus(); + } + if ($data->isInitialized('cpusetMems') && null !== $data->getCpusetMems()) { + $dataArray['CpusetMems'] = $data->getCpusetMems(); + } + if ($data->isInitialized('devices') && null !== $data->getDevices()) { + $values_5 = []; + foreach ($data->getDevices() as $value_5) { + $values_5[] = $this->normalizer->normalize($value_5, 'json', $context); + } + $dataArray['Devices'] = $values_5; + } + if ($data->isInitialized('deviceCgroupRules') && null !== $data->getDeviceCgroupRules()) { + $values_6 = []; + foreach ($data->getDeviceCgroupRules() as $value_6) { + $values_6[] = $value_6; + } + $dataArray['DeviceCgroupRules'] = $values_6; + } + if ($data->isInitialized('deviceRequests') && null !== $data->getDeviceRequests()) { + $values_7 = []; + foreach ($data->getDeviceRequests() as $value_7) { + $values_7[] = $this->normalizer->normalize($value_7, 'json', $context); + } + $dataArray['DeviceRequests'] = $values_7; + } + if ($data->isInitialized('kernelMemoryTCP') && null !== $data->getKernelMemoryTCP()) { + $dataArray['KernelMemoryTCP'] = $data->getKernelMemoryTCP(); + } + if ($data->isInitialized('memoryReservation') && null !== $data->getMemoryReservation()) { + $dataArray['MemoryReservation'] = $data->getMemoryReservation(); + } + if ($data->isInitialized('memorySwap') && null !== $data->getMemorySwap()) { + $dataArray['MemorySwap'] = $data->getMemorySwap(); + } + if ($data->isInitialized('memorySwappiness') && null !== $data->getMemorySwappiness()) { + $dataArray['MemorySwappiness'] = $data->getMemorySwappiness(); + } + if ($data->isInitialized('nanoCpus') && null !== $data->getNanoCpus()) { + $dataArray['NanoCpus'] = $data->getNanoCpus(); + } + if ($data->isInitialized('oomKillDisable') && null !== $data->getOomKillDisable()) { + $dataArray['OomKillDisable'] = $data->getOomKillDisable(); + } + if ($data->isInitialized('init') && null !== $data->getInit()) { + $dataArray['Init'] = $data->getInit(); + } + if ($data->isInitialized('pidsLimit') && null !== $data->getPidsLimit()) { + $dataArray['PidsLimit'] = $data->getPidsLimit(); + } + if ($data->isInitialized('ulimits') && null !== $data->getUlimits()) { + $values_8 = []; + foreach ($data->getUlimits() as $value_8) { + $values_8[] = $this->normalizer->normalize($value_8, 'json', $context); + } + $dataArray['Ulimits'] = $values_8; + } + if ($data->isInitialized('cpuCount') && null !== $data->getCpuCount()) { + $dataArray['CpuCount'] = $data->getCpuCount(); + } + if ($data->isInitialized('cpuPercent') && null !== $data->getCpuPercent()) { + $dataArray['CpuPercent'] = $data->getCpuPercent(); + } + if ($data->isInitialized('iOMaximumIOps') && null !== $data->getIOMaximumIOps()) { + $dataArray['IOMaximumIOps'] = $data->getIOMaximumIOps(); + } + if ($data->isInitialized('iOMaximumBandwidth') && null !== $data->getIOMaximumBandwidth()) { + $dataArray['IOMaximumBandwidth'] = $data->getIOMaximumBandwidth(); + } + foreach ($data as $key => $value_9) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_9; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Resources::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesUlimitsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesUlimitsItemNormalizer.php new file mode 100644 index 000000000..643048f6f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ResourcesUlimitsItemNormalizer.php @@ -0,0 +1,98 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Soft', $data) && null !== $data['Soft']) { + $object->setSoft($data['Soft']); + unset($data['Soft']); + } elseif (\array_key_exists('Soft', $data) && null === $data['Soft']) { + $object->setSoft(null); + } + if (\array_key_exists('Hard', $data) && null !== $data['Hard']) { + $object->setHard($data['Hard']); + unset($data['Hard']); + } elseif (\array_key_exists('Hard', $data) && null === $data['Hard']) { + $object->setHard(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('soft') && null !== $data->getSoft()) { + $dataArray['Soft'] = $data->getSoft(); + } + if ($data->isInitialized('hard') && null !== $data->getHard()) { + $dataArray['Hard'] = $data->getHard(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ResourcesUlimitsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/RestartPolicyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/RestartPolicyNormalizer.php new file mode 100644 index 000000000..cda110246 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/RestartPolicyNormalizer.php @@ -0,0 +1,89 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('MaximumRetryCount', $data) && null !== $data['MaximumRetryCount']) { + $object->setMaximumRetryCount($data['MaximumRetryCount']); + unset($data['MaximumRetryCount']); + } elseif (\array_key_exists('MaximumRetryCount', $data) && null === $data['MaximumRetryCount']) { + $object->setMaximumRetryCount(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('maximumRetryCount') && null !== $data->getMaximumRetryCount()) { + $dataArray['MaximumRetryCount'] = $data->getMaximumRetryCount(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\RestartPolicy::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/RuntimeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/RuntimeNormalizer.php new file mode 100644 index 000000000..b24531aae --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/RuntimeNormalizer.php @@ -0,0 +1,114 @@ +setPath($data['path']); + unset($data['path']); + } elseif (\array_key_exists('path', $data) && null === $data['path']) { + $object->setPath(null); + } + if (\array_key_exists('runtimeArgs', $data) && null !== $data['runtimeArgs']) { + $values = []; + foreach ($data['runtimeArgs'] as $value) { + $values[] = $value; + } + $object->setRuntimeArgs($values); + unset($data['runtimeArgs']); + } elseif (\array_key_exists('runtimeArgs', $data) && null === $data['runtimeArgs']) { + $object->setRuntimeArgs(null); + } + if (\array_key_exists('status', $data) && null !== $data['status']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['status'] as $key => $value_1) { + $values_1[$key] = $value_1; + } + $object->setStatus($values_1); + unset($data['status']); + } elseif (\array_key_exists('status', $data) && null === $data['status']) { + $object->setStatus(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('path') && null !== $data->getPath()) { + $dataArray['path'] = $data->getPath(); + } + if ($data->isInitialized('runtimeArgs') && null !== $data->getRuntimeArgs()) { + $values = []; + foreach ($data->getRuntimeArgs() as $value) { + $values[] = $value; + } + $dataArray['runtimeArgs'] = $values; + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $values_1 = []; + foreach ($data->getStatus() as $key => $value_1) { + $values_1[$key] = $value_1; + } + $dataArray['status'] = $values_1; + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Runtime::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretNormalizer.php new file mode 100644 index 000000000..71c95fe04 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretNormalizer.php @@ -0,0 +1,116 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\SecretSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Secret::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretSpecNormalizer.php new file mode 100644 index 000000000..24364e6de --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretSpecNormalizer.php @@ -0,0 +1,124 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Data', $data) && null !== $data['Data']) { + $object->setData($data['Data']); + unset($data['Data']); + } elseif (\array_key_exists('Data', $data) && null === $data['Data']) { + $object->setData(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($this->denormalizer->denormalize($data['Driver'], \Docker\API\Model\Driver::class, 'json', $context)); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Templating', $data) && null !== $data['Templating']) { + $object->setTemplating($this->denormalizer->denormalize($data['Templating'], \Docker\API\Model\Driver::class, 'json', $context)); + unset($data['Templating']); + } elseif (\array_key_exists('Templating', $data) && null === $data['Templating']) { + $object->setTemplating(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('data') && null !== $data->getData()) { + $dataArray['Data'] = $data->getData(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $this->normalizer->normalize($data->getDriver(), 'json', $context); + } + if ($data->isInitialized('templating') && null !== $data->getTemplating()) { + $dataArray['Templating'] = $this->normalizer->normalize($data->getTemplating(), 'json', $context); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SecretSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretsCreatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretsCreatePostBodyNormalizer.php new file mode 100644 index 000000000..f29ab9a80 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SecretsCreatePostBodyNormalizer.php @@ -0,0 +1,124 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Data', $data) && null !== $data['Data']) { + $object->setData($data['Data']); + unset($data['Data']); + } elseif (\array_key_exists('Data', $data) && null === $data['Data']) { + $object->setData(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($this->denormalizer->denormalize($data['Driver'], \Docker\API\Model\Driver::class, 'json', $context)); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Templating', $data) && null !== $data['Templating']) { + $object->setTemplating($this->denormalizer->denormalize($data['Templating'], \Docker\API\Model\Driver::class, 'json', $context)); + unset($data['Templating']); + } elseif (\array_key_exists('Templating', $data) && null === $data['Templating']) { + $object->setTemplating(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('data') && null !== $data->getData()) { + $dataArray['Data'] = $data->getData(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $this->normalizer->normalize($data->getDriver(), 'json', $context); + } + if ($data->isInitialized('templating') && null !== $data->getTemplating()) { + $dataArray['Templating'] = $this->normalizer->normalize($data->getTemplating(), 'json', $context); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SecretsCreatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceCreateResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceCreateResponseNormalizer.php new file mode 100644 index 000000000..800ac13e9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceCreateResponseNormalizer.php @@ -0,0 +1,97 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Warnings', $data) && null !== $data['Warnings']) { + $values = []; + foreach ($data['Warnings'] as $value) { + $values[] = $value; + } + $object->setWarnings($values); + unset($data['Warnings']); + } elseif (\array_key_exists('Warnings', $data) && null === $data['Warnings']) { + $object->setWarnings(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('warnings') && null !== $data->getWarnings()) { + $values = []; + foreach ($data->getWarnings() as $value) { + $values[] = $value; + } + $dataArray['Warnings'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceCreateResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceEndpointNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceEndpointNormalizer.php new file mode 100644 index 000000000..73df8b97a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceEndpointNormalizer.php @@ -0,0 +1,114 @@ +setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\EndpointSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('Ports', $data) && null !== $data['Ports']) { + $values = []; + foreach ($data['Ports'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\EndpointPortConfig::class, 'json', $context); + } + $object->setPorts($values); + unset($data['Ports']); + } elseif (\array_key_exists('Ports', $data) && null === $data['Ports']) { + $object->setPorts(null); + } + if (\array_key_exists('VirtualIPs', $data) && null !== $data['VirtualIPs']) { + $values_1 = []; + foreach ($data['VirtualIPs'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\ServiceEndpointVirtualIPsItem::class, 'json', $context); + } + $object->setVirtualIPs($values_1); + unset($data['VirtualIPs']); + } elseif (\array_key_exists('VirtualIPs', $data) && null === $data['VirtualIPs']) { + $object->setVirtualIPs(null); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('ports') && null !== $data->getPorts()) { + $values = []; + foreach ($data->getPorts() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Ports'] = $values; + } + if ($data->isInitialized('virtualIPs') && null !== $data->getVirtualIPs()) { + $values_1 = []; + foreach ($data->getVirtualIPs() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['VirtualIPs'] = $values_1; + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceEndpoint::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceEndpointVirtualIPsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceEndpointVirtualIPsItemNormalizer.php new file mode 100644 index 000000000..d6815bbb1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceEndpointVirtualIPsItemNormalizer.php @@ -0,0 +1,89 @@ +setNetworkID($data['NetworkID']); + unset($data['NetworkID']); + } elseif (\array_key_exists('NetworkID', $data) && null === $data['NetworkID']) { + $object->setNetworkID(null); + } + if (\array_key_exists('Addr', $data) && null !== $data['Addr']) { + $object->setAddr($data['Addr']); + unset($data['Addr']); + } elseif (\array_key_exists('Addr', $data) && null === $data['Addr']) { + $object->setAddr(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('networkID') && null !== $data->getNetworkID()) { + $dataArray['NetworkID'] = $data->getNetworkID(); + } + if ($data->isInitialized('addr') && null !== $data->getAddr()) { + $dataArray['Addr'] = $data->getAddr(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceEndpointVirtualIPsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceJobStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceJobStatusNormalizer.php new file mode 100644 index 000000000..41376853c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceJobStatusNormalizer.php @@ -0,0 +1,89 @@ +setJobIteration($this->denormalizer->denormalize($data['JobIteration'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['JobIteration']); + } elseif (\array_key_exists('JobIteration', $data) && null === $data['JobIteration']) { + $object->setJobIteration(null); + } + if (\array_key_exists('LastExecution', $data) && null !== $data['LastExecution']) { + $object->setLastExecution($data['LastExecution']); + unset($data['LastExecution']); + } elseif (\array_key_exists('LastExecution', $data) && null === $data['LastExecution']) { + $object->setLastExecution(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('jobIteration') && null !== $data->getJobIteration()) { + $dataArray['JobIteration'] = $this->normalizer->normalize($data->getJobIteration(), 'json', $context); + } + if ($data->isInitialized('lastExecution') && null !== $data->getLastExecution()) { + $dataArray['LastExecution'] = $data->getLastExecution(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceJobStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceNormalizer.php new file mode 100644 index 000000000..460f1a86b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceNormalizer.php @@ -0,0 +1,152 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\ServiceSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('Endpoint', $data) && null !== $data['Endpoint']) { + $object->setEndpoint($this->denormalizer->denormalize($data['Endpoint'], \Docker\API\Model\ServiceEndpoint::class, 'json', $context)); + unset($data['Endpoint']); + } elseif (\array_key_exists('Endpoint', $data) && null === $data['Endpoint']) { + $object->setEndpoint(null); + } + if (\array_key_exists('UpdateStatus', $data) && null !== $data['UpdateStatus']) { + $object->setUpdateStatus($this->denormalizer->denormalize($data['UpdateStatus'], \Docker\API\Model\ServiceUpdateStatus::class, 'json', $context)); + unset($data['UpdateStatus']); + } elseif (\array_key_exists('UpdateStatus', $data) && null === $data['UpdateStatus']) { + $object->setUpdateStatus(null); + } + if (\array_key_exists('ServiceStatus', $data) && null !== $data['ServiceStatus']) { + $object->setServiceStatus($this->denormalizer->denormalize($data['ServiceStatus'], \Docker\API\Model\ServiceServiceStatus::class, 'json', $context)); + unset($data['ServiceStatus']); + } elseif (\array_key_exists('ServiceStatus', $data) && null === $data['ServiceStatus']) { + $object->setServiceStatus(null); + } + if (\array_key_exists('JobStatus', $data) && null !== $data['JobStatus']) { + $object->setJobStatus($this->denormalizer->denormalize($data['JobStatus'], \Docker\API\Model\ServiceJobStatus::class, 'json', $context)); + unset($data['JobStatus']); + } elseif (\array_key_exists('JobStatus', $data) && null === $data['JobStatus']) { + $object->setJobStatus(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('endpoint') && null !== $data->getEndpoint()) { + $dataArray['Endpoint'] = $this->normalizer->normalize($data->getEndpoint(), 'json', $context); + } + if ($data->isInitialized('updateStatus') && null !== $data->getUpdateStatus()) { + $dataArray['UpdateStatus'] = $this->normalizer->normalize($data->getUpdateStatus(), 'json', $context); + } + if ($data->isInitialized('serviceStatus') && null !== $data->getServiceStatus()) { + $dataArray['ServiceStatus'] = $this->normalizer->normalize($data->getServiceStatus(), 'json', $context); + } + if ($data->isInitialized('jobStatus') && null !== $data->getJobStatus()) { + $dataArray['JobStatus'] = $this->normalizer->normalize($data->getJobStatus(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Service::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceServiceStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceServiceStatusNormalizer.php new file mode 100644 index 000000000..e1a96bd7a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceServiceStatusNormalizer.php @@ -0,0 +1,98 @@ +setRunningTasks($data['RunningTasks']); + unset($data['RunningTasks']); + } elseif (\array_key_exists('RunningTasks', $data) && null === $data['RunningTasks']) { + $object->setRunningTasks(null); + } + if (\array_key_exists('DesiredTasks', $data) && null !== $data['DesiredTasks']) { + $object->setDesiredTasks($data['DesiredTasks']); + unset($data['DesiredTasks']); + } elseif (\array_key_exists('DesiredTasks', $data) && null === $data['DesiredTasks']) { + $object->setDesiredTasks(null); + } + if (\array_key_exists('CompletedTasks', $data) && null !== $data['CompletedTasks']) { + $object->setCompletedTasks($data['CompletedTasks']); + unset($data['CompletedTasks']); + } elseif (\array_key_exists('CompletedTasks', $data) && null === $data['CompletedTasks']) { + $object->setCompletedTasks(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('runningTasks') && null !== $data->getRunningTasks()) { + $dataArray['RunningTasks'] = $data->getRunningTasks(); + } + if ($data->isInitialized('desiredTasks') && null !== $data->getDesiredTasks()) { + $dataArray['DesiredTasks'] = $data->getDesiredTasks(); + } + if ($data->isInitialized('completedTasks') && null !== $data->getCompletedTasks()) { + $dataArray['CompletedTasks'] = $data->getCompletedTasks(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceServiceStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeGlobalJobNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeGlobalJobNormalizer.php new file mode 100644 index 000000000..d9cdc1be8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeGlobalJobNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecModeGlobalJob::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeGlobalNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeGlobalNormalizer.php new file mode 100644 index 000000000..b09462710 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeGlobalNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecModeGlobal::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeNormalizer.php new file mode 100644 index 000000000..357ab5d63 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeNormalizer.php @@ -0,0 +1,107 @@ +setReplicated($this->denormalizer->denormalize($data['Replicated'], \Docker\API\Model\ServiceSpecModeReplicated::class, 'json', $context)); + unset($data['Replicated']); + } elseif (\array_key_exists('Replicated', $data) && null === $data['Replicated']) { + $object->setReplicated(null); + } + if (\array_key_exists('Global', $data) && null !== $data['Global']) { + $object->setGlobal($this->denormalizer->denormalize($data['Global'], \Docker\API\Model\ServiceSpecModeGlobal::class, 'json', $context)); + unset($data['Global']); + } elseif (\array_key_exists('Global', $data) && null === $data['Global']) { + $object->setGlobal(null); + } + if (\array_key_exists('ReplicatedJob', $data) && null !== $data['ReplicatedJob']) { + $object->setReplicatedJob($this->denormalizer->denormalize($data['ReplicatedJob'], \Docker\API\Model\ServiceSpecModeReplicatedJob::class, 'json', $context)); + unset($data['ReplicatedJob']); + } elseif (\array_key_exists('ReplicatedJob', $data) && null === $data['ReplicatedJob']) { + $object->setReplicatedJob(null); + } + if (\array_key_exists('GlobalJob', $data) && null !== $data['GlobalJob']) { + $object->setGlobalJob($this->denormalizer->denormalize($data['GlobalJob'], \Docker\API\Model\ServiceSpecModeGlobalJob::class, 'json', $context)); + unset($data['GlobalJob']); + } elseif (\array_key_exists('GlobalJob', $data) && null === $data['GlobalJob']) { + $object->setGlobalJob(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('replicated') && null !== $data->getReplicated()) { + $dataArray['Replicated'] = $this->normalizer->normalize($data->getReplicated(), 'json', $context); + } + if ($data->isInitialized('global') && null !== $data->getGlobal()) { + $dataArray['Global'] = $this->normalizer->normalize($data->getGlobal(), 'json', $context); + } + if ($data->isInitialized('replicatedJob') && null !== $data->getReplicatedJob()) { + $dataArray['ReplicatedJob'] = $this->normalizer->normalize($data->getReplicatedJob(), 'json', $context); + } + if ($data->isInitialized('globalJob') && null !== $data->getGlobalJob()) { + $dataArray['GlobalJob'] = $this->normalizer->normalize($data->getGlobalJob(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecMode::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeReplicatedJobNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeReplicatedJobNormalizer.php new file mode 100644 index 000000000..b1bc41fcb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeReplicatedJobNormalizer.php @@ -0,0 +1,89 @@ +setMaxConcurrent($data['MaxConcurrent']); + unset($data['MaxConcurrent']); + } elseif (\array_key_exists('MaxConcurrent', $data) && null === $data['MaxConcurrent']) { + $object->setMaxConcurrent(null); + } + if (\array_key_exists('TotalCompletions', $data) && null !== $data['TotalCompletions']) { + $object->setTotalCompletions($data['TotalCompletions']); + unset($data['TotalCompletions']); + } elseif (\array_key_exists('TotalCompletions', $data) && null === $data['TotalCompletions']) { + $object->setTotalCompletions(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('maxConcurrent') && null !== $data->getMaxConcurrent()) { + $dataArray['MaxConcurrent'] = $data->getMaxConcurrent(); + } + if ($data->isInitialized('totalCompletions') && null !== $data->getTotalCompletions()) { + $dataArray['TotalCompletions'] = $data->getTotalCompletions(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecModeReplicatedJob::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeReplicatedNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeReplicatedNormalizer.php new file mode 100644 index 000000000..cec449a85 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecModeReplicatedNormalizer.php @@ -0,0 +1,80 @@ +setReplicas($data['Replicas']); + unset($data['Replicas']); + } elseif (\array_key_exists('Replicas', $data) && null === $data['Replicas']) { + $object->setReplicas(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('replicas') && null !== $data->getReplicas()) { + $dataArray['Replicas'] = $data->getReplicas(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecModeReplicated::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecNormalizer.php new file mode 100644 index 000000000..4c220804f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecNormalizer.php @@ -0,0 +1,159 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('TaskTemplate', $data) && null !== $data['TaskTemplate']) { + $object->setTaskTemplate($this->denormalizer->denormalize($data['TaskTemplate'], \Docker\API\Model\TaskSpec::class, 'json', $context)); + unset($data['TaskTemplate']); + } elseif (\array_key_exists('TaskTemplate', $data) && null === $data['TaskTemplate']) { + $object->setTaskTemplate(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($this->denormalizer->denormalize($data['Mode'], \Docker\API\Model\ServiceSpecMode::class, 'json', $context)); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + if (\array_key_exists('UpdateConfig', $data) && null !== $data['UpdateConfig']) { + $object->setUpdateConfig($this->denormalizer->denormalize($data['UpdateConfig'], \Docker\API\Model\ServiceSpecUpdateConfig::class, 'json', $context)); + unset($data['UpdateConfig']); + } elseif (\array_key_exists('UpdateConfig', $data) && null === $data['UpdateConfig']) { + $object->setUpdateConfig(null); + } + if (\array_key_exists('RollbackConfig', $data) && null !== $data['RollbackConfig']) { + $object->setRollbackConfig($this->denormalizer->denormalize($data['RollbackConfig'], \Docker\API\Model\ServiceSpecRollbackConfig::class, 'json', $context)); + unset($data['RollbackConfig']); + } elseif (\array_key_exists('RollbackConfig', $data) && null === $data['RollbackConfig']) { + $object->setRollbackConfig(null); + } + if (\array_key_exists('Networks', $data) && null !== $data['Networks']) { + $values_1 = []; + foreach ($data['Networks'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\NetworkAttachmentConfig::class, 'json', $context); + } + $object->setNetworks($values_1); + unset($data['Networks']); + } elseif (\array_key_exists('Networks', $data) && null === $data['Networks']) { + $object->setNetworks(null); + } + if (\array_key_exists('EndpointSpec', $data) && null !== $data['EndpointSpec']) { + $object->setEndpointSpec($this->denormalizer->denormalize($data['EndpointSpec'], \Docker\API\Model\EndpointSpec::class, 'json', $context)); + unset($data['EndpointSpec']); + } elseif (\array_key_exists('EndpointSpec', $data) && null === $data['EndpointSpec']) { + $object->setEndpointSpec(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('taskTemplate') && null !== $data->getTaskTemplate()) { + $dataArray['TaskTemplate'] = $this->normalizer->normalize($data->getTaskTemplate(), 'json', $context); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $this->normalizer->normalize($data->getMode(), 'json', $context); + } + if ($data->isInitialized('updateConfig') && null !== $data->getUpdateConfig()) { + $dataArray['UpdateConfig'] = $this->normalizer->normalize($data->getUpdateConfig(), 'json', $context); + } + if ($data->isInitialized('rollbackConfig') && null !== $data->getRollbackConfig()) { + $dataArray['RollbackConfig'] = $this->normalizer->normalize($data->getRollbackConfig(), 'json', $context); + } + if ($data->isInitialized('networks') && null !== $data->getNetworks()) { + $values_1 = []; + foreach ($data->getNetworks() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Networks'] = $values_1; + } + if ($data->isInitialized('endpointSpec') && null !== $data->getEndpointSpec()) { + $dataArray['EndpointSpec'] = $this->normalizer->normalize($data->getEndpointSpec(), 'json', $context); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecRollbackConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecRollbackConfigNormalizer.php new file mode 100644 index 000000000..3d6667662 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecRollbackConfigNormalizer.php @@ -0,0 +1,128 @@ +setParallelism($data['Parallelism']); + unset($data['Parallelism']); + } elseif (\array_key_exists('Parallelism', $data) && null === $data['Parallelism']) { + $object->setParallelism(null); + } + if (\array_key_exists('Delay', $data) && null !== $data['Delay']) { + $object->setDelay($data['Delay']); + unset($data['Delay']); + } elseif (\array_key_exists('Delay', $data) && null === $data['Delay']) { + $object->setDelay(null); + } + if (\array_key_exists('FailureAction', $data) && null !== $data['FailureAction']) { + $object->setFailureAction($data['FailureAction']); + unset($data['FailureAction']); + } elseif (\array_key_exists('FailureAction', $data) && null === $data['FailureAction']) { + $object->setFailureAction(null); + } + if (\array_key_exists('Monitor', $data) && null !== $data['Monitor']) { + $object->setMonitor($data['Monitor']); + unset($data['Monitor']); + } elseif (\array_key_exists('Monitor', $data) && null === $data['Monitor']) { + $object->setMonitor(null); + } + if (\array_key_exists('MaxFailureRatio', $data) && null !== $data['MaxFailureRatio']) { + $object->setMaxFailureRatio($data['MaxFailureRatio']); + unset($data['MaxFailureRatio']); + } elseif (\array_key_exists('MaxFailureRatio', $data) && null === $data['MaxFailureRatio']) { + $object->setMaxFailureRatio(null); + } + if (\array_key_exists('Order', $data) && null !== $data['Order']) { + $object->setOrder($data['Order']); + unset($data['Order']); + } elseif (\array_key_exists('Order', $data) && null === $data['Order']) { + $object->setOrder(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('parallelism') && null !== $data->getParallelism()) { + $dataArray['Parallelism'] = $data->getParallelism(); + } + if ($data->isInitialized('delay') && null !== $data->getDelay()) { + $dataArray['Delay'] = $data->getDelay(); + } + if ($data->isInitialized('failureAction') && null !== $data->getFailureAction()) { + $dataArray['FailureAction'] = $data->getFailureAction(); + } + if ($data->isInitialized('monitor') && null !== $data->getMonitor()) { + $dataArray['Monitor'] = $data->getMonitor(); + } + if ($data->isInitialized('maxFailureRatio') && null !== $data->getMaxFailureRatio()) { + $dataArray['MaxFailureRatio'] = $data->getMaxFailureRatio(); + } + if ($data->isInitialized('order') && null !== $data->getOrder()) { + $dataArray['Order'] = $data->getOrder(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecRollbackConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecUpdateConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecUpdateConfigNormalizer.php new file mode 100644 index 000000000..58dc83381 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceSpecUpdateConfigNormalizer.php @@ -0,0 +1,128 @@ +setParallelism($data['Parallelism']); + unset($data['Parallelism']); + } elseif (\array_key_exists('Parallelism', $data) && null === $data['Parallelism']) { + $object->setParallelism(null); + } + if (\array_key_exists('Delay', $data) && null !== $data['Delay']) { + $object->setDelay($data['Delay']); + unset($data['Delay']); + } elseif (\array_key_exists('Delay', $data) && null === $data['Delay']) { + $object->setDelay(null); + } + if (\array_key_exists('FailureAction', $data) && null !== $data['FailureAction']) { + $object->setFailureAction($data['FailureAction']); + unset($data['FailureAction']); + } elseif (\array_key_exists('FailureAction', $data) && null === $data['FailureAction']) { + $object->setFailureAction(null); + } + if (\array_key_exists('Monitor', $data) && null !== $data['Monitor']) { + $object->setMonitor($data['Monitor']); + unset($data['Monitor']); + } elseif (\array_key_exists('Monitor', $data) && null === $data['Monitor']) { + $object->setMonitor(null); + } + if (\array_key_exists('MaxFailureRatio', $data) && null !== $data['MaxFailureRatio']) { + $object->setMaxFailureRatio($data['MaxFailureRatio']); + unset($data['MaxFailureRatio']); + } elseif (\array_key_exists('MaxFailureRatio', $data) && null === $data['MaxFailureRatio']) { + $object->setMaxFailureRatio(null); + } + if (\array_key_exists('Order', $data) && null !== $data['Order']) { + $object->setOrder($data['Order']); + unset($data['Order']); + } elseif (\array_key_exists('Order', $data) && null === $data['Order']) { + $object->setOrder(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('parallelism') && null !== $data->getParallelism()) { + $dataArray['Parallelism'] = $data->getParallelism(); + } + if ($data->isInitialized('delay') && null !== $data->getDelay()) { + $dataArray['Delay'] = $data->getDelay(); + } + if ($data->isInitialized('failureAction') && null !== $data->getFailureAction()) { + $dataArray['FailureAction'] = $data->getFailureAction(); + } + if ($data->isInitialized('monitor') && null !== $data->getMonitor()) { + $dataArray['Monitor'] = $data->getMonitor(); + } + if ($data->isInitialized('maxFailureRatio') && null !== $data->getMaxFailureRatio()) { + $dataArray['MaxFailureRatio'] = $data->getMaxFailureRatio(); + } + if ($data->isInitialized('order') && null !== $data->getOrder()) { + $dataArray['Order'] = $data->getOrder(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceSpecUpdateConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceUpdateResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceUpdateResponseNormalizer.php new file mode 100644 index 000000000..878ee6b0c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceUpdateResponseNormalizer.php @@ -0,0 +1,88 @@ +setWarnings($values); + unset($data['Warnings']); + } elseif (\array_key_exists('Warnings', $data) && null === $data['Warnings']) { + $object->setWarnings(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('warnings') && null !== $data->getWarnings()) { + $values = []; + foreach ($data->getWarnings() as $value) { + $values[] = $value; + } + $dataArray['Warnings'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceUpdateResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceUpdateStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceUpdateStatusNormalizer.php new file mode 100644 index 000000000..4750d413f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServiceUpdateStatusNormalizer.php @@ -0,0 +1,107 @@ +setState($data['State']); + unset($data['State']); + } elseif (\array_key_exists('State', $data) && null === $data['State']) { + $object->setState(null); + } + if (\array_key_exists('StartedAt', $data) && null !== $data['StartedAt']) { + $object->setStartedAt($data['StartedAt']); + unset($data['StartedAt']); + } elseif (\array_key_exists('StartedAt', $data) && null === $data['StartedAt']) { + $object->setStartedAt(null); + } + if (\array_key_exists('CompletedAt', $data) && null !== $data['CompletedAt']) { + $object->setCompletedAt($data['CompletedAt']); + unset($data['CompletedAt']); + } elseif (\array_key_exists('CompletedAt', $data) && null === $data['CompletedAt']) { + $object->setCompletedAt(null); + } + if (\array_key_exists('Message', $data) && null !== $data['Message']) { + $object->setMessage($data['Message']); + unset($data['Message']); + } elseif (\array_key_exists('Message', $data) && null === $data['Message']) { + $object->setMessage(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('state') && null !== $data->getState()) { + $dataArray['State'] = $data->getState(); + } + if ($data->isInitialized('startedAt') && null !== $data->getStartedAt()) { + $dataArray['StartedAt'] = $data->getStartedAt(); + } + if ($data->isInitialized('completedAt') && null !== $data->getCompletedAt()) { + $dataArray['CompletedAt'] = $data->getCompletedAt(); + } + if ($data->isInitialized('message') && null !== $data->getMessage()) { + $dataArray['Message'] = $data->getMessage(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServiceUpdateStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServicesCreatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServicesCreatePostBodyNormalizer.php new file mode 100644 index 000000000..fa98cb6f0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServicesCreatePostBodyNormalizer.php @@ -0,0 +1,159 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('TaskTemplate', $data) && null !== $data['TaskTemplate']) { + $object->setTaskTemplate($this->denormalizer->denormalize($data['TaskTemplate'], \Docker\API\Model\TaskSpec::class, 'json', $context)); + unset($data['TaskTemplate']); + } elseif (\array_key_exists('TaskTemplate', $data) && null === $data['TaskTemplate']) { + $object->setTaskTemplate(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($this->denormalizer->denormalize($data['Mode'], \Docker\API\Model\ServiceSpecMode::class, 'json', $context)); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + if (\array_key_exists('UpdateConfig', $data) && null !== $data['UpdateConfig']) { + $object->setUpdateConfig($this->denormalizer->denormalize($data['UpdateConfig'], \Docker\API\Model\ServiceSpecUpdateConfig::class, 'json', $context)); + unset($data['UpdateConfig']); + } elseif (\array_key_exists('UpdateConfig', $data) && null === $data['UpdateConfig']) { + $object->setUpdateConfig(null); + } + if (\array_key_exists('RollbackConfig', $data) && null !== $data['RollbackConfig']) { + $object->setRollbackConfig($this->denormalizer->denormalize($data['RollbackConfig'], \Docker\API\Model\ServiceSpecRollbackConfig::class, 'json', $context)); + unset($data['RollbackConfig']); + } elseif (\array_key_exists('RollbackConfig', $data) && null === $data['RollbackConfig']) { + $object->setRollbackConfig(null); + } + if (\array_key_exists('Networks', $data) && null !== $data['Networks']) { + $values_1 = []; + foreach ($data['Networks'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\NetworkAttachmentConfig::class, 'json', $context); + } + $object->setNetworks($values_1); + unset($data['Networks']); + } elseif (\array_key_exists('Networks', $data) && null === $data['Networks']) { + $object->setNetworks(null); + } + if (\array_key_exists('EndpointSpec', $data) && null !== $data['EndpointSpec']) { + $object->setEndpointSpec($this->denormalizer->denormalize($data['EndpointSpec'], \Docker\API\Model\EndpointSpec::class, 'json', $context)); + unset($data['EndpointSpec']); + } elseif (\array_key_exists('EndpointSpec', $data) && null === $data['EndpointSpec']) { + $object->setEndpointSpec(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('taskTemplate') && null !== $data->getTaskTemplate()) { + $dataArray['TaskTemplate'] = $this->normalizer->normalize($data->getTaskTemplate(), 'json', $context); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $this->normalizer->normalize($data->getMode(), 'json', $context); + } + if ($data->isInitialized('updateConfig') && null !== $data->getUpdateConfig()) { + $dataArray['UpdateConfig'] = $this->normalizer->normalize($data->getUpdateConfig(), 'json', $context); + } + if ($data->isInitialized('rollbackConfig') && null !== $data->getRollbackConfig()) { + $dataArray['RollbackConfig'] = $this->normalizer->normalize($data->getRollbackConfig(), 'json', $context); + } + if ($data->isInitialized('networks') && null !== $data->getNetworks()) { + $values_1 = []; + foreach ($data->getNetworks() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Networks'] = $values_1; + } + if ($data->isInitialized('endpointSpec') && null !== $data->getEndpointSpec()) { + $dataArray['EndpointSpec'] = $this->normalizer->normalize($data->getEndpointSpec(), 'json', $context); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServicesCreatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServicesIdUpdatePostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServicesIdUpdatePostBodyNormalizer.php new file mode 100644 index 000000000..46a677dd2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ServicesIdUpdatePostBodyNormalizer.php @@ -0,0 +1,159 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('TaskTemplate', $data) && null !== $data['TaskTemplate']) { + $object->setTaskTemplate($this->denormalizer->denormalize($data['TaskTemplate'], \Docker\API\Model\TaskSpec::class, 'json', $context)); + unset($data['TaskTemplate']); + } elseif (\array_key_exists('TaskTemplate', $data) && null === $data['TaskTemplate']) { + $object->setTaskTemplate(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($this->denormalizer->denormalize($data['Mode'], \Docker\API\Model\ServiceSpecMode::class, 'json', $context)); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + if (\array_key_exists('UpdateConfig', $data) && null !== $data['UpdateConfig']) { + $object->setUpdateConfig($this->denormalizer->denormalize($data['UpdateConfig'], \Docker\API\Model\ServiceSpecUpdateConfig::class, 'json', $context)); + unset($data['UpdateConfig']); + } elseif (\array_key_exists('UpdateConfig', $data) && null === $data['UpdateConfig']) { + $object->setUpdateConfig(null); + } + if (\array_key_exists('RollbackConfig', $data) && null !== $data['RollbackConfig']) { + $object->setRollbackConfig($this->denormalizer->denormalize($data['RollbackConfig'], \Docker\API\Model\ServiceSpecRollbackConfig::class, 'json', $context)); + unset($data['RollbackConfig']); + } elseif (\array_key_exists('RollbackConfig', $data) && null === $data['RollbackConfig']) { + $object->setRollbackConfig(null); + } + if (\array_key_exists('Networks', $data) && null !== $data['Networks']) { + $values_1 = []; + foreach ($data['Networks'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\NetworkAttachmentConfig::class, 'json', $context); + } + $object->setNetworks($values_1); + unset($data['Networks']); + } elseif (\array_key_exists('Networks', $data) && null === $data['Networks']) { + $object->setNetworks(null); + } + if (\array_key_exists('EndpointSpec', $data) && null !== $data['EndpointSpec']) { + $object->setEndpointSpec($this->denormalizer->denormalize($data['EndpointSpec'], \Docker\API\Model\EndpointSpec::class, 'json', $context)); + unset($data['EndpointSpec']); + } elseif (\array_key_exists('EndpointSpec', $data) && null === $data['EndpointSpec']) { + $object->setEndpointSpec(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('taskTemplate') && null !== $data->getTaskTemplate()) { + $dataArray['TaskTemplate'] = $this->normalizer->normalize($data->getTaskTemplate(), 'json', $context); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $this->normalizer->normalize($data->getMode(), 'json', $context); + } + if ($data->isInitialized('updateConfig') && null !== $data->getUpdateConfig()) { + $dataArray['UpdateConfig'] = $this->normalizer->normalize($data->getUpdateConfig(), 'json', $context); + } + if ($data->isInitialized('rollbackConfig') && null !== $data->getRollbackConfig()) { + $dataArray['RollbackConfig'] = $this->normalizer->normalize($data->getRollbackConfig(), 'json', $context); + } + if ($data->isInitialized('networks') && null !== $data->getNetworks()) { + $values_1 = []; + foreach ($data->getNetworks() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Networks'] = $values_1; + } + if ($data->isInitialized('endpointSpec') && null !== $data->getEndpointSpec()) { + $dataArray['EndpointSpec'] = $this->normalizer->normalize($data->getEndpointSpec(), 'json', $context); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ServicesIdUpdatePostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmInfoNormalizer.php new file mode 100644 index 000000000..b91bb2233 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmInfoNormalizer.php @@ -0,0 +1,163 @@ +setNodeID($data['NodeID']); + unset($data['NodeID']); + } elseif (\array_key_exists('NodeID', $data) && null === $data['NodeID']) { + $object->setNodeID(null); + } + if (\array_key_exists('NodeAddr', $data) && null !== $data['NodeAddr']) { + $object->setNodeAddr($data['NodeAddr']); + unset($data['NodeAddr']); + } elseif (\array_key_exists('NodeAddr', $data) && null === $data['NodeAddr']) { + $object->setNodeAddr(null); + } + if (\array_key_exists('LocalNodeState', $data) && null !== $data['LocalNodeState']) { + $object->setLocalNodeState($data['LocalNodeState']); + unset($data['LocalNodeState']); + } elseif (\array_key_exists('LocalNodeState', $data) && null === $data['LocalNodeState']) { + $object->setLocalNodeState(null); + } + if (\array_key_exists('ControlAvailable', $data) && null !== $data['ControlAvailable']) { + $object->setControlAvailable($data['ControlAvailable']); + unset($data['ControlAvailable']); + } elseif (\array_key_exists('ControlAvailable', $data) && null === $data['ControlAvailable']) { + $object->setControlAvailable(null); + } + if (\array_key_exists('Error', $data) && null !== $data['Error']) { + $object->setError($data['Error']); + unset($data['Error']); + } elseif (\array_key_exists('Error', $data) && null === $data['Error']) { + $object->setError(null); + } + if (\array_key_exists('RemoteManagers', $data) && null !== $data['RemoteManagers']) { + $values = []; + foreach ($data['RemoteManagers'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\PeerNode::class, 'json', $context); + } + $object->setRemoteManagers($values); + unset($data['RemoteManagers']); + } elseif (\array_key_exists('RemoteManagers', $data) && null === $data['RemoteManagers']) { + $object->setRemoteManagers(null); + } + if (\array_key_exists('Nodes', $data) && null !== $data['Nodes']) { + $object->setNodes($data['Nodes']); + unset($data['Nodes']); + } elseif (\array_key_exists('Nodes', $data) && null === $data['Nodes']) { + $object->setNodes(null); + } + if (\array_key_exists('Managers', $data) && null !== $data['Managers']) { + $object->setManagers($data['Managers']); + unset($data['Managers']); + } elseif (\array_key_exists('Managers', $data) && null === $data['Managers']) { + $object->setManagers(null); + } + if (\array_key_exists('Cluster', $data) && null !== $data['Cluster']) { + $object->setCluster($this->denormalizer->denormalize($data['Cluster'], \Docker\API\Model\ClusterInfo::class, 'json', $context)); + unset($data['Cluster']); + } elseif (\array_key_exists('Cluster', $data) && null === $data['Cluster']) { + $object->setCluster(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nodeID') && null !== $data->getNodeID()) { + $dataArray['NodeID'] = $data->getNodeID(); + } + if ($data->isInitialized('nodeAddr') && null !== $data->getNodeAddr()) { + $dataArray['NodeAddr'] = $data->getNodeAddr(); + } + if ($data->isInitialized('localNodeState') && null !== $data->getLocalNodeState()) { + $dataArray['LocalNodeState'] = $data->getLocalNodeState(); + } + if ($data->isInitialized('controlAvailable') && null !== $data->getControlAvailable()) { + $dataArray['ControlAvailable'] = $data->getControlAvailable(); + } + if ($data->isInitialized('error') && null !== $data->getError()) { + $dataArray['Error'] = $data->getError(); + } + if ($data->isInitialized('remoteManagers') && null !== $data->getRemoteManagers()) { + $values = []; + foreach ($data->getRemoteManagers() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['RemoteManagers'] = $values; + } + if ($data->isInitialized('nodes') && null !== $data->getNodes()) { + $dataArray['Nodes'] = $data->getNodes(); + } + if ($data->isInitialized('managers') && null !== $data->getManagers()) { + $dataArray['Managers'] = $data->getManagers(); + } + if ($data->isInitialized('cluster') && null !== $data->getCluster()) { + $dataArray['Cluster'] = $this->normalizer->normalize($data->getCluster(), 'json', $context); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmInitPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmInitPostBodyNormalizer.php new file mode 100644 index 000000000..e98b5b725 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmInitPostBodyNormalizer.php @@ -0,0 +1,154 @@ +setListenAddr($data['ListenAddr']); + unset($data['ListenAddr']); + } elseif (\array_key_exists('ListenAddr', $data) && null === $data['ListenAddr']) { + $object->setListenAddr(null); + } + if (\array_key_exists('AdvertiseAddr', $data) && null !== $data['AdvertiseAddr']) { + $object->setAdvertiseAddr($data['AdvertiseAddr']); + unset($data['AdvertiseAddr']); + } elseif (\array_key_exists('AdvertiseAddr', $data) && null === $data['AdvertiseAddr']) { + $object->setAdvertiseAddr(null); + } + if (\array_key_exists('DataPathAddr', $data) && null !== $data['DataPathAddr']) { + $object->setDataPathAddr($data['DataPathAddr']); + unset($data['DataPathAddr']); + } elseif (\array_key_exists('DataPathAddr', $data) && null === $data['DataPathAddr']) { + $object->setDataPathAddr(null); + } + if (\array_key_exists('DataPathPort', $data) && null !== $data['DataPathPort']) { + $object->setDataPathPort($data['DataPathPort']); + unset($data['DataPathPort']); + } elseif (\array_key_exists('DataPathPort', $data) && null === $data['DataPathPort']) { + $object->setDataPathPort(null); + } + if (\array_key_exists('DefaultAddrPool', $data) && null !== $data['DefaultAddrPool']) { + $values = []; + foreach ($data['DefaultAddrPool'] as $value) { + $values[] = $value; + } + $object->setDefaultAddrPool($values); + unset($data['DefaultAddrPool']); + } elseif (\array_key_exists('DefaultAddrPool', $data) && null === $data['DefaultAddrPool']) { + $object->setDefaultAddrPool(null); + } + if (\array_key_exists('ForceNewCluster', $data) && null !== $data['ForceNewCluster']) { + $object->setForceNewCluster($data['ForceNewCluster']); + unset($data['ForceNewCluster']); + } elseif (\array_key_exists('ForceNewCluster', $data) && null === $data['ForceNewCluster']) { + $object->setForceNewCluster(null); + } + if (\array_key_exists('SubnetSize', $data) && null !== $data['SubnetSize']) { + $object->setSubnetSize($data['SubnetSize']); + unset($data['SubnetSize']); + } elseif (\array_key_exists('SubnetSize', $data) && null === $data['SubnetSize']) { + $object->setSubnetSize(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\SwarmSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('listenAddr') && null !== $data->getListenAddr()) { + $dataArray['ListenAddr'] = $data->getListenAddr(); + } + if ($data->isInitialized('advertiseAddr') && null !== $data->getAdvertiseAddr()) { + $dataArray['AdvertiseAddr'] = $data->getAdvertiseAddr(); + } + if ($data->isInitialized('dataPathAddr') && null !== $data->getDataPathAddr()) { + $dataArray['DataPathAddr'] = $data->getDataPathAddr(); + } + if ($data->isInitialized('dataPathPort') && null !== $data->getDataPathPort()) { + $dataArray['DataPathPort'] = $data->getDataPathPort(); + } + if ($data->isInitialized('defaultAddrPool') && null !== $data->getDefaultAddrPool()) { + $values = []; + foreach ($data->getDefaultAddrPool() as $value) { + $values[] = $value; + } + $dataArray['DefaultAddrPool'] = $values; + } + if ($data->isInitialized('forceNewCluster') && null !== $data->getForceNewCluster()) { + $dataArray['ForceNewCluster'] = $data->getForceNewCluster(); + } + if ($data->isInitialized('subnetSize') && null !== $data->getSubnetSize()) { + $dataArray['SubnetSize'] = $data->getSubnetSize(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmInitPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmJoinPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmJoinPostBodyNormalizer.php new file mode 100644 index 000000000..f41f5b082 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmJoinPostBodyNormalizer.php @@ -0,0 +1,124 @@ +setListenAddr($data['ListenAddr']); + unset($data['ListenAddr']); + } elseif (\array_key_exists('ListenAddr', $data) && null === $data['ListenAddr']) { + $object->setListenAddr(null); + } + if (\array_key_exists('AdvertiseAddr', $data) && null !== $data['AdvertiseAddr']) { + $object->setAdvertiseAddr($data['AdvertiseAddr']); + unset($data['AdvertiseAddr']); + } elseif (\array_key_exists('AdvertiseAddr', $data) && null === $data['AdvertiseAddr']) { + $object->setAdvertiseAddr(null); + } + if (\array_key_exists('DataPathAddr', $data) && null !== $data['DataPathAddr']) { + $object->setDataPathAddr($data['DataPathAddr']); + unset($data['DataPathAddr']); + } elseif (\array_key_exists('DataPathAddr', $data) && null === $data['DataPathAddr']) { + $object->setDataPathAddr(null); + } + if (\array_key_exists('RemoteAddrs', $data) && null !== $data['RemoteAddrs']) { + $values = []; + foreach ($data['RemoteAddrs'] as $value) { + $values[] = $value; + } + $object->setRemoteAddrs($values); + unset($data['RemoteAddrs']); + } elseif (\array_key_exists('RemoteAddrs', $data) && null === $data['RemoteAddrs']) { + $object->setRemoteAddrs(null); + } + if (\array_key_exists('JoinToken', $data) && null !== $data['JoinToken']) { + $object->setJoinToken($data['JoinToken']); + unset($data['JoinToken']); + } elseif (\array_key_exists('JoinToken', $data) && null === $data['JoinToken']) { + $object->setJoinToken(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('listenAddr') && null !== $data->getListenAddr()) { + $dataArray['ListenAddr'] = $data->getListenAddr(); + } + if ($data->isInitialized('advertiseAddr') && null !== $data->getAdvertiseAddr()) { + $dataArray['AdvertiseAddr'] = $data->getAdvertiseAddr(); + } + if ($data->isInitialized('dataPathAddr') && null !== $data->getDataPathAddr()) { + $dataArray['DataPathAddr'] = $data->getDataPathAddr(); + } + if ($data->isInitialized('remoteAddrs') && null !== $data->getRemoteAddrs()) { + $values = []; + foreach ($data->getRemoteAddrs() as $value) { + $values[] = $value; + } + $dataArray['RemoteAddrs'] = $values; + } + if ($data->isInitialized('joinToken') && null !== $data->getJoinToken()) { + $dataArray['JoinToken'] = $data->getJoinToken(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmJoinPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmNormalizer.php new file mode 100644 index 000000000..1c4f71d46 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmNormalizer.php @@ -0,0 +1,181 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\SwarmSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('TLSInfo', $data) && null !== $data['TLSInfo']) { + $object->setTLSInfo($this->denormalizer->denormalize($data['TLSInfo'], \Docker\API\Model\TLSInfo::class, 'json', $context)); + unset($data['TLSInfo']); + } elseif (\array_key_exists('TLSInfo', $data) && null === $data['TLSInfo']) { + $object->setTLSInfo(null); + } + if (\array_key_exists('RootRotationInProgress', $data) && null !== $data['RootRotationInProgress']) { + $object->setRootRotationInProgress($data['RootRotationInProgress']); + unset($data['RootRotationInProgress']); + } elseif (\array_key_exists('RootRotationInProgress', $data) && null === $data['RootRotationInProgress']) { + $object->setRootRotationInProgress(null); + } + if (\array_key_exists('DataPathPort', $data) && null !== $data['DataPathPort']) { + $object->setDataPathPort($data['DataPathPort']); + unset($data['DataPathPort']); + } elseif (\array_key_exists('DataPathPort', $data) && null === $data['DataPathPort']) { + $object->setDataPathPort(null); + } + if (\array_key_exists('DefaultAddrPool', $data) && null !== $data['DefaultAddrPool']) { + $values = []; + foreach ($data['DefaultAddrPool'] as $value) { + $values[] = $value; + } + $object->setDefaultAddrPool($values); + unset($data['DefaultAddrPool']); + } elseif (\array_key_exists('DefaultAddrPool', $data) && null === $data['DefaultAddrPool']) { + $object->setDefaultAddrPool(null); + } + if (\array_key_exists('SubnetSize', $data) && null !== $data['SubnetSize']) { + $object->setSubnetSize($data['SubnetSize']); + unset($data['SubnetSize']); + } elseif (\array_key_exists('SubnetSize', $data) && null === $data['SubnetSize']) { + $object->setSubnetSize(null); + } + if (\array_key_exists('JoinTokens', $data) && null !== $data['JoinTokens']) { + $object->setJoinTokens($this->denormalizer->denormalize($data['JoinTokens'], \Docker\API\Model\JoinTokens::class, 'json', $context)); + unset($data['JoinTokens']); + } elseif (\array_key_exists('JoinTokens', $data) && null === $data['JoinTokens']) { + $object->setJoinTokens(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('tLSInfo') && null !== $data->getTLSInfo()) { + $dataArray['TLSInfo'] = $this->normalizer->normalize($data->getTLSInfo(), 'json', $context); + } + if ($data->isInitialized('rootRotationInProgress') && null !== $data->getRootRotationInProgress()) { + $dataArray['RootRotationInProgress'] = $data->getRootRotationInProgress(); + } + if ($data->isInitialized('dataPathPort') && null !== $data->getDataPathPort()) { + $dataArray['DataPathPort'] = $data->getDataPathPort(); + } + if ($data->isInitialized('defaultAddrPool') && null !== $data->getDefaultAddrPool()) { + $values = []; + foreach ($data->getDefaultAddrPool() as $value) { + $values[] = $value; + } + $dataArray['DefaultAddrPool'] = $values; + } + if ($data->isInitialized('subnetSize') && null !== $data->getSubnetSize()) { + $dataArray['SubnetSize'] = $data->getSubnetSize(); + } + if ($data->isInitialized('joinTokens') && null !== $data->getJoinTokens()) { + $dataArray['JoinTokens'] = $this->normalizer->normalize($data->getJoinTokens(), 'json', $context); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Swarm::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecCAConfigExternalCAsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecCAConfigExternalCAsItemNormalizer.php new file mode 100644 index 000000000..16962faaa --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecCAConfigExternalCAsItemNormalizer.php @@ -0,0 +1,115 @@ +setProtocol($data['Protocol']); + unset($data['Protocol']); + } elseif (\array_key_exists('Protocol', $data) && null === $data['Protocol']) { + $object->setProtocol(null); + } + if (\array_key_exists('URL', $data) && null !== $data['URL']) { + $object->setURL($data['URL']); + unset($data['URL']); + } elseif (\array_key_exists('URL', $data) && null === $data['URL']) { + $object->setURL(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value) { + $values[$key] = $value; + } + $object->setOptions($values); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + if (\array_key_exists('CACert', $data) && null !== $data['CACert']) { + $object->setCACert($data['CACert']); + unset($data['CACert']); + } elseif (\array_key_exists('CACert', $data) && null === $data['CACert']) { + $object->setCACert(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('protocol') && null !== $data->getProtocol()) { + $dataArray['Protocol'] = $data->getProtocol(); + } + if ($data->isInitialized('uRL') && null !== $data->getURL()) { + $dataArray['URL'] = $data->getURL(); + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values = []; + foreach ($data->getOptions() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Options'] = $values; + } + if ($data->isInitialized('cACert') && null !== $data->getCACert()) { + $dataArray['CACert'] = $data->getCACert(); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecCAConfigExternalCAsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecCAConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecCAConfigNormalizer.php new file mode 100644 index 000000000..6e3d1c61b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecCAConfigNormalizer.php @@ -0,0 +1,124 @@ +setNodeCertExpiry($data['NodeCertExpiry']); + unset($data['NodeCertExpiry']); + } elseif (\array_key_exists('NodeCertExpiry', $data) && null === $data['NodeCertExpiry']) { + $object->setNodeCertExpiry(null); + } + if (\array_key_exists('ExternalCAs', $data) && null !== $data['ExternalCAs']) { + $values = []; + foreach ($data['ExternalCAs'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\SwarmSpecCAConfigExternalCAsItem::class, 'json', $context); + } + $object->setExternalCAs($values); + unset($data['ExternalCAs']); + } elseif (\array_key_exists('ExternalCAs', $data) && null === $data['ExternalCAs']) { + $object->setExternalCAs(null); + } + if (\array_key_exists('SigningCACert', $data) && null !== $data['SigningCACert']) { + $object->setSigningCACert($data['SigningCACert']); + unset($data['SigningCACert']); + } elseif (\array_key_exists('SigningCACert', $data) && null === $data['SigningCACert']) { + $object->setSigningCACert(null); + } + if (\array_key_exists('SigningCAKey', $data) && null !== $data['SigningCAKey']) { + $object->setSigningCAKey($data['SigningCAKey']); + unset($data['SigningCAKey']); + } elseif (\array_key_exists('SigningCAKey', $data) && null === $data['SigningCAKey']) { + $object->setSigningCAKey(null); + } + if (\array_key_exists('ForceRotate', $data) && null !== $data['ForceRotate']) { + $object->setForceRotate($data['ForceRotate']); + unset($data['ForceRotate']); + } elseif (\array_key_exists('ForceRotate', $data) && null === $data['ForceRotate']) { + $object->setForceRotate(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nodeCertExpiry') && null !== $data->getNodeCertExpiry()) { + $dataArray['NodeCertExpiry'] = $data->getNodeCertExpiry(); + } + if ($data->isInitialized('externalCAs') && null !== $data->getExternalCAs()) { + $values = []; + foreach ($data->getExternalCAs() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['ExternalCAs'] = $values; + } + if ($data->isInitialized('signingCACert') && null !== $data->getSigningCACert()) { + $dataArray['SigningCACert'] = $data->getSigningCACert(); + } + if ($data->isInitialized('signingCAKey') && null !== $data->getSigningCAKey()) { + $dataArray['SigningCAKey'] = $data->getSigningCAKey(); + } + if ($data->isInitialized('forceRotate') && null !== $data->getForceRotate()) { + $dataArray['ForceRotate'] = $data->getForceRotate(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecCAConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecDispatcherNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecDispatcherNormalizer.php new file mode 100644 index 000000000..4f86d3712 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecDispatcherNormalizer.php @@ -0,0 +1,80 @@ +setHeartbeatPeriod($data['HeartbeatPeriod']); + unset($data['HeartbeatPeriod']); + } elseif (\array_key_exists('HeartbeatPeriod', $data) && null === $data['HeartbeatPeriod']) { + $object->setHeartbeatPeriod(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('heartbeatPeriod') && null !== $data->getHeartbeatPeriod()) { + $dataArray['HeartbeatPeriod'] = $data->getHeartbeatPeriod(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecDispatcher::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecEncryptionConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecEncryptionConfigNormalizer.php new file mode 100644 index 000000000..fa328d351 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecEncryptionConfigNormalizer.php @@ -0,0 +1,83 @@ +setAutoLockManagers($data['AutoLockManagers']); + unset($data['AutoLockManagers']); + } elseif (\array_key_exists('AutoLockManagers', $data) && null === $data['AutoLockManagers']) { + $object->setAutoLockManagers(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('autoLockManagers') && null !== $data->getAutoLockManagers()) { + $dataArray['AutoLockManagers'] = $data->getAutoLockManagers(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecEncryptionConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecNormalizer.php new file mode 100644 index 000000000..ed2fa9734 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecNormalizer.php @@ -0,0 +1,151 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Orchestration', $data) && null !== $data['Orchestration']) { + $object->setOrchestration($this->denormalizer->denormalize($data['Orchestration'], \Docker\API\Model\SwarmSpecOrchestration::class, 'json', $context)); + unset($data['Orchestration']); + } elseif (\array_key_exists('Orchestration', $data) && null === $data['Orchestration']) { + $object->setOrchestration(null); + } + if (\array_key_exists('Raft', $data) && null !== $data['Raft']) { + $object->setRaft($this->denormalizer->denormalize($data['Raft'], \Docker\API\Model\SwarmSpecRaft::class, 'json', $context)); + unset($data['Raft']); + } elseif (\array_key_exists('Raft', $data) && null === $data['Raft']) { + $object->setRaft(null); + } + if (\array_key_exists('Dispatcher', $data) && null !== $data['Dispatcher']) { + $object->setDispatcher($this->denormalizer->denormalize($data['Dispatcher'], \Docker\API\Model\SwarmSpecDispatcher::class, 'json', $context)); + unset($data['Dispatcher']); + } elseif (\array_key_exists('Dispatcher', $data) && null === $data['Dispatcher']) { + $object->setDispatcher(null); + } + if (\array_key_exists('CAConfig', $data) && null !== $data['CAConfig']) { + $object->setCAConfig($this->denormalizer->denormalize($data['CAConfig'], \Docker\API\Model\SwarmSpecCAConfig::class, 'json', $context)); + unset($data['CAConfig']); + } elseif (\array_key_exists('CAConfig', $data) && null === $data['CAConfig']) { + $object->setCAConfig(null); + } + if (\array_key_exists('EncryptionConfig', $data) && null !== $data['EncryptionConfig']) { + $object->setEncryptionConfig($this->denormalizer->denormalize($data['EncryptionConfig'], \Docker\API\Model\SwarmSpecEncryptionConfig::class, 'json', $context)); + unset($data['EncryptionConfig']); + } elseif (\array_key_exists('EncryptionConfig', $data) && null === $data['EncryptionConfig']) { + $object->setEncryptionConfig(null); + } + if (\array_key_exists('TaskDefaults', $data) && null !== $data['TaskDefaults']) { + $object->setTaskDefaults($this->denormalizer->denormalize($data['TaskDefaults'], \Docker\API\Model\SwarmSpecTaskDefaults::class, 'json', $context)); + unset($data['TaskDefaults']); + } elseif (\array_key_exists('TaskDefaults', $data) && null === $data['TaskDefaults']) { + $object->setTaskDefaults(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('orchestration') && null !== $data->getOrchestration()) { + $dataArray['Orchestration'] = $this->normalizer->normalize($data->getOrchestration(), 'json', $context); + } + if ($data->isInitialized('raft') && null !== $data->getRaft()) { + $dataArray['Raft'] = $this->normalizer->normalize($data->getRaft(), 'json', $context); + } + if ($data->isInitialized('dispatcher') && null !== $data->getDispatcher()) { + $dataArray['Dispatcher'] = $this->normalizer->normalize($data->getDispatcher(), 'json', $context); + } + if ($data->isInitialized('cAConfig') && null !== $data->getCAConfig()) { + $dataArray['CAConfig'] = $this->normalizer->normalize($data->getCAConfig(), 'json', $context); + } + if ($data->isInitialized('encryptionConfig') && null !== $data->getEncryptionConfig()) { + $dataArray['EncryptionConfig'] = $this->normalizer->normalize($data->getEncryptionConfig(), 'json', $context); + } + if ($data->isInitialized('taskDefaults') && null !== $data->getTaskDefaults()) { + $dataArray['TaskDefaults'] = $this->normalizer->normalize($data->getTaskDefaults(), 'json', $context); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecOrchestrationNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecOrchestrationNormalizer.php new file mode 100644 index 000000000..b5ed9a556 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecOrchestrationNormalizer.php @@ -0,0 +1,80 @@ +setTaskHistoryRetentionLimit($data['TaskHistoryRetentionLimit']); + unset($data['TaskHistoryRetentionLimit']); + } elseif (\array_key_exists('TaskHistoryRetentionLimit', $data) && null === $data['TaskHistoryRetentionLimit']) { + $object->setTaskHistoryRetentionLimit(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('taskHistoryRetentionLimit') && null !== $data->getTaskHistoryRetentionLimit()) { + $dataArray['TaskHistoryRetentionLimit'] = $data->getTaskHistoryRetentionLimit(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecOrchestration::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecRaftNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecRaftNormalizer.php new file mode 100644 index 000000000..1767569e5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecRaftNormalizer.php @@ -0,0 +1,116 @@ +setSnapshotInterval($data['SnapshotInterval']); + unset($data['SnapshotInterval']); + } elseif (\array_key_exists('SnapshotInterval', $data) && null === $data['SnapshotInterval']) { + $object->setSnapshotInterval(null); + } + if (\array_key_exists('KeepOldSnapshots', $data) && null !== $data['KeepOldSnapshots']) { + $object->setKeepOldSnapshots($data['KeepOldSnapshots']); + unset($data['KeepOldSnapshots']); + } elseif (\array_key_exists('KeepOldSnapshots', $data) && null === $data['KeepOldSnapshots']) { + $object->setKeepOldSnapshots(null); + } + if (\array_key_exists('LogEntriesForSlowFollowers', $data) && null !== $data['LogEntriesForSlowFollowers']) { + $object->setLogEntriesForSlowFollowers($data['LogEntriesForSlowFollowers']); + unset($data['LogEntriesForSlowFollowers']); + } elseif (\array_key_exists('LogEntriesForSlowFollowers', $data) && null === $data['LogEntriesForSlowFollowers']) { + $object->setLogEntriesForSlowFollowers(null); + } + if (\array_key_exists('ElectionTick', $data) && null !== $data['ElectionTick']) { + $object->setElectionTick($data['ElectionTick']); + unset($data['ElectionTick']); + } elseif (\array_key_exists('ElectionTick', $data) && null === $data['ElectionTick']) { + $object->setElectionTick(null); + } + if (\array_key_exists('HeartbeatTick', $data) && null !== $data['HeartbeatTick']) { + $object->setHeartbeatTick($data['HeartbeatTick']); + unset($data['HeartbeatTick']); + } elseif (\array_key_exists('HeartbeatTick', $data) && null === $data['HeartbeatTick']) { + $object->setHeartbeatTick(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('snapshotInterval') && null !== $data->getSnapshotInterval()) { + $dataArray['SnapshotInterval'] = $data->getSnapshotInterval(); + } + if ($data->isInitialized('keepOldSnapshots') && null !== $data->getKeepOldSnapshots()) { + $dataArray['KeepOldSnapshots'] = $data->getKeepOldSnapshots(); + } + if ($data->isInitialized('logEntriesForSlowFollowers') && null !== $data->getLogEntriesForSlowFollowers()) { + $dataArray['LogEntriesForSlowFollowers'] = $data->getLogEntriesForSlowFollowers(); + } + if ($data->isInitialized('electionTick') && null !== $data->getElectionTick()) { + $dataArray['ElectionTick'] = $data->getElectionTick(); + } + if ($data->isInitialized('heartbeatTick') && null !== $data->getHeartbeatTick()) { + $dataArray['HeartbeatTick'] = $data->getHeartbeatTick(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecRaft::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecTaskDefaultsLogDriverNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecTaskDefaultsLogDriverNormalizer.php new file mode 100644 index 000000000..b14d6df34 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecTaskDefaultsLogDriverNormalizer.php @@ -0,0 +1,97 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value) { + $values[$key] = $value; + } + $object->setOptions($values); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values = []; + foreach ($data->getOptions() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Options'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecTaskDefaultsLogDriver::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecTaskDefaultsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecTaskDefaultsNormalizer.php new file mode 100644 index 000000000..248c85c79 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmSpecTaskDefaultsNormalizer.php @@ -0,0 +1,80 @@ +setLogDriver($this->denormalizer->denormalize($data['LogDriver'], \Docker\API\Model\SwarmSpecTaskDefaultsLogDriver::class, 'json', $context)); + unset($data['LogDriver']); + } elseif (\array_key_exists('LogDriver', $data) && null === $data['LogDriver']) { + $object->setLogDriver(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('logDriver') && null !== $data->getLogDriver()) { + $dataArray['LogDriver'] = $this->normalizer->normalize($data->getLogDriver(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmSpecTaskDefaults::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockPostBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockPostBodyNormalizer.php new file mode 100644 index 000000000..2b5eb2ad0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockPostBodyNormalizer.php @@ -0,0 +1,80 @@ +setUnlockKey($data['UnlockKey']); + unset($data['UnlockKey']); + } elseif (\array_key_exists('UnlockKey', $data) && null === $data['UnlockKey']) { + $object->setUnlockKey(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('unlockKey') && null !== $data->getUnlockKey()) { + $dataArray['UnlockKey'] = $data->getUnlockKey(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmUnlockPostBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockkeyGetJsonResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockkeyGetJsonResponse200Normalizer.php new file mode 100644 index 000000000..fad9f2c8a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockkeyGetJsonResponse200Normalizer.php @@ -0,0 +1,80 @@ +setUnlockKey($data['UnlockKey']); + unset($data['UnlockKey']); + } elseif (\array_key_exists('UnlockKey', $data) && null === $data['UnlockKey']) { + $object->setUnlockKey(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('unlockKey') && null !== $data->getUnlockKey()) { + $dataArray['UnlockKey'] = $data->getUnlockKey(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmUnlockkeyGetJsonResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockkeyGetTextplainResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockkeyGetTextplainResponse200Normalizer.php new file mode 100644 index 000000000..6b2efb510 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SwarmUnlockkeyGetTextplainResponse200Normalizer.php @@ -0,0 +1,80 @@ +setUnlockKey($data['UnlockKey']); + unset($data['UnlockKey']); + } elseif (\array_key_exists('UnlockKey', $data) && null === $data['UnlockKey']) { + $object->setUnlockKey(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('unlockKey') && null !== $data->getUnlockKey()) { + $dataArray['UnlockKey'] = $data->getUnlockKey(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SwarmUnlockkeyGetTextplainResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemDfGetJsonResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemDfGetJsonResponse200Normalizer.php new file mode 100644 index 000000000..2830ac41d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemDfGetJsonResponse200Normalizer.php @@ -0,0 +1,148 @@ +setLayersSize($data['LayersSize']); + unset($data['LayersSize']); + } elseif (\array_key_exists('LayersSize', $data) && null === $data['LayersSize']) { + $object->setLayersSize(null); + } + if (\array_key_exists('Images', $data) && null !== $data['Images']) { + $values = []; + foreach ($data['Images'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ImageSummary::class, 'json', $context); + } + $object->setImages($values); + unset($data['Images']); + } elseif (\array_key_exists('Images', $data) && null === $data['Images']) { + $object->setImages(null); + } + if (\array_key_exists('Containers', $data) && null !== $data['Containers']) { + $values_1 = []; + foreach ($data['Containers'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\ContainerSummary::class, 'json', $context); + } + $object->setContainers($values_1); + unset($data['Containers']); + } elseif (\array_key_exists('Containers', $data) && null === $data['Containers']) { + $object->setContainers(null); + } + if (\array_key_exists('Volumes', $data) && null !== $data['Volumes']) { + $values_2 = []; + foreach ($data['Volumes'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\Volume::class, 'json', $context); + } + $object->setVolumes($values_2); + unset($data['Volumes']); + } elseif (\array_key_exists('Volumes', $data) && null === $data['Volumes']) { + $object->setVolumes(null); + } + if (\array_key_exists('BuildCache', $data) && null !== $data['BuildCache']) { + $values_3 = []; + foreach ($data['BuildCache'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\BuildCache::class, 'json', $context); + } + $object->setBuildCache($values_3); + unset($data['BuildCache']); + } elseif (\array_key_exists('BuildCache', $data) && null === $data['BuildCache']) { + $object->setBuildCache(null); + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('layersSize') && null !== $data->getLayersSize()) { + $dataArray['LayersSize'] = $data->getLayersSize(); + } + if ($data->isInitialized('images') && null !== $data->getImages()) { + $values = []; + foreach ($data->getImages() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Images'] = $values; + } + if ($data->isInitialized('containers') && null !== $data->getContainers()) { + $values_1 = []; + foreach ($data->getContainers() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Containers'] = $values_1; + } + if ($data->isInitialized('volumes') && null !== $data->getVolumes()) { + $values_2 = []; + foreach ($data->getVolumes() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['Volumes'] = $values_2; + } + if ($data->isInitialized('buildCache') && null !== $data->getBuildCache()) { + $values_3 = []; + foreach ($data->getBuildCache() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['BuildCache'] = $values_3; + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemDfGetJsonResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemDfGetTextplainResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemDfGetTextplainResponse200Normalizer.php new file mode 100644 index 000000000..2de133951 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemDfGetTextplainResponse200Normalizer.php @@ -0,0 +1,148 @@ +setLayersSize($data['LayersSize']); + unset($data['LayersSize']); + } elseif (\array_key_exists('LayersSize', $data) && null === $data['LayersSize']) { + $object->setLayersSize(null); + } + if (\array_key_exists('Images', $data) && null !== $data['Images']) { + $values = []; + foreach ($data['Images'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\ImageSummary::class, 'json', $context); + } + $object->setImages($values); + unset($data['Images']); + } elseif (\array_key_exists('Images', $data) && null === $data['Images']) { + $object->setImages(null); + } + if (\array_key_exists('Containers', $data) && null !== $data['Containers']) { + $values_1 = []; + foreach ($data['Containers'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\ContainerSummary::class, 'json', $context); + } + $object->setContainers($values_1); + unset($data['Containers']); + } elseif (\array_key_exists('Containers', $data) && null === $data['Containers']) { + $object->setContainers(null); + } + if (\array_key_exists('Volumes', $data) && null !== $data['Volumes']) { + $values_2 = []; + foreach ($data['Volumes'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\Volume::class, 'json', $context); + } + $object->setVolumes($values_2); + unset($data['Volumes']); + } elseif (\array_key_exists('Volumes', $data) && null === $data['Volumes']) { + $object->setVolumes(null); + } + if (\array_key_exists('BuildCache', $data) && null !== $data['BuildCache']) { + $values_3 = []; + foreach ($data['BuildCache'] as $value_3) { + $values_3[] = $this->denormalizer->denormalize($value_3, \Docker\API\Model\BuildCache::class, 'json', $context); + } + $object->setBuildCache($values_3); + unset($data['BuildCache']); + } elseif (\array_key_exists('BuildCache', $data) && null === $data['BuildCache']) { + $object->setBuildCache(null); + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_4; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('layersSize') && null !== $data->getLayersSize()) { + $dataArray['LayersSize'] = $data->getLayersSize(); + } + if ($data->isInitialized('images') && null !== $data->getImages()) { + $values = []; + foreach ($data->getImages() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Images'] = $values; + } + if ($data->isInitialized('containers') && null !== $data->getContainers()) { + $values_1 = []; + foreach ($data->getContainers() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Containers'] = $values_1; + } + if ($data->isInitialized('volumes') && null !== $data->getVolumes()) { + $values_2 = []; + foreach ($data->getVolumes() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['Volumes'] = $values_2; + } + if ($data->isInitialized('buildCache') && null !== $data->getBuildCache()) { + $values_3 = []; + foreach ($data->getBuildCache() as $value_3) { + $values_3[] = $this->normalizer->normalize($value_3, 'json', $context); + } + $dataArray['BuildCache'] = $values_3; + } + foreach ($data as $key => $value_4) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_4; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemDfGetTextplainResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemInfoDefaultAddressPoolsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemInfoDefaultAddressPoolsItemNormalizer.php new file mode 100644 index 000000000..becee7763 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemInfoDefaultAddressPoolsItemNormalizer.php @@ -0,0 +1,89 @@ +setBase($data['Base']); + unset($data['Base']); + } elseif (\array_key_exists('Base', $data) && null === $data['Base']) { + $object->setBase(null); + } + if (\array_key_exists('Size', $data) && null !== $data['Size']) { + $object->setSize($data['Size']); + unset($data['Size']); + } elseif (\array_key_exists('Size', $data) && null === $data['Size']) { + $object->setSize(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('base') && null !== $data->getBase()) { + $dataArray['Base'] = $data->getBase(); + } + if ($data->isInitialized('size') && null !== $data->getSize()) { + $dataArray['Size'] = $data->getSize(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemInfoDefaultAddressPoolsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemInfoNormalizer.php new file mode 100644 index 000000000..b863d86c0 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemInfoNormalizer.php @@ -0,0 +1,737 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Containers', $data) && null !== $data['Containers']) { + $object->setContainers($data['Containers']); + unset($data['Containers']); + } elseif (\array_key_exists('Containers', $data) && null === $data['Containers']) { + $object->setContainers(null); + } + if (\array_key_exists('ContainersRunning', $data) && null !== $data['ContainersRunning']) { + $object->setContainersRunning($data['ContainersRunning']); + unset($data['ContainersRunning']); + } elseif (\array_key_exists('ContainersRunning', $data) && null === $data['ContainersRunning']) { + $object->setContainersRunning(null); + } + if (\array_key_exists('ContainersPaused', $data) && null !== $data['ContainersPaused']) { + $object->setContainersPaused($data['ContainersPaused']); + unset($data['ContainersPaused']); + } elseif (\array_key_exists('ContainersPaused', $data) && null === $data['ContainersPaused']) { + $object->setContainersPaused(null); + } + if (\array_key_exists('ContainersStopped', $data) && null !== $data['ContainersStopped']) { + $object->setContainersStopped($data['ContainersStopped']); + unset($data['ContainersStopped']); + } elseif (\array_key_exists('ContainersStopped', $data) && null === $data['ContainersStopped']) { + $object->setContainersStopped(null); + } + if (\array_key_exists('Images', $data) && null !== $data['Images']) { + $object->setImages($data['Images']); + unset($data['Images']); + } elseif (\array_key_exists('Images', $data) && null === $data['Images']) { + $object->setImages(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('DriverStatus', $data) && null !== $data['DriverStatus']) { + $values = []; + foreach ($data['DriverStatus'] as $value) { + $values_1 = []; + foreach ($value as $value_1) { + $values_1[] = $value_1; + } + $values[] = $values_1; + } + $object->setDriverStatus($values); + unset($data['DriverStatus']); + } elseif (\array_key_exists('DriverStatus', $data) && null === $data['DriverStatus']) { + $object->setDriverStatus(null); + } + if (\array_key_exists('DockerRootDir', $data) && null !== $data['DockerRootDir']) { + $object->setDockerRootDir($data['DockerRootDir']); + unset($data['DockerRootDir']); + } elseif (\array_key_exists('DockerRootDir', $data) && null === $data['DockerRootDir']) { + $object->setDockerRootDir(null); + } + if (\array_key_exists('Plugins', $data) && null !== $data['Plugins']) { + $object->setPlugins($this->denormalizer->denormalize($data['Plugins'], \Docker\API\Model\PluginsInfo::class, 'json', $context)); + unset($data['Plugins']); + } elseif (\array_key_exists('Plugins', $data) && null === $data['Plugins']) { + $object->setPlugins(null); + } + if (\array_key_exists('MemoryLimit', $data) && null !== $data['MemoryLimit']) { + $object->setMemoryLimit($data['MemoryLimit']); + unset($data['MemoryLimit']); + } elseif (\array_key_exists('MemoryLimit', $data) && null === $data['MemoryLimit']) { + $object->setMemoryLimit(null); + } + if (\array_key_exists('SwapLimit', $data) && null !== $data['SwapLimit']) { + $object->setSwapLimit($data['SwapLimit']); + unset($data['SwapLimit']); + } elseif (\array_key_exists('SwapLimit', $data) && null === $data['SwapLimit']) { + $object->setSwapLimit(null); + } + if (\array_key_exists('KernelMemoryTCP', $data) && null !== $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP($data['KernelMemoryTCP']); + unset($data['KernelMemoryTCP']); + } elseif (\array_key_exists('KernelMemoryTCP', $data) && null === $data['KernelMemoryTCP']) { + $object->setKernelMemoryTCP(null); + } + if (\array_key_exists('CpuCfsPeriod', $data) && null !== $data['CpuCfsPeriod']) { + $object->setCpuCfsPeriod($data['CpuCfsPeriod']); + unset($data['CpuCfsPeriod']); + } elseif (\array_key_exists('CpuCfsPeriod', $data) && null === $data['CpuCfsPeriod']) { + $object->setCpuCfsPeriod(null); + } + if (\array_key_exists('CpuCfsQuota', $data) && null !== $data['CpuCfsQuota']) { + $object->setCpuCfsQuota($data['CpuCfsQuota']); + unset($data['CpuCfsQuota']); + } elseif (\array_key_exists('CpuCfsQuota', $data) && null === $data['CpuCfsQuota']) { + $object->setCpuCfsQuota(null); + } + if (\array_key_exists('CPUShares', $data) && null !== $data['CPUShares']) { + $object->setCPUShares($data['CPUShares']); + unset($data['CPUShares']); + } elseif (\array_key_exists('CPUShares', $data) && null === $data['CPUShares']) { + $object->setCPUShares(null); + } + if (\array_key_exists('CPUSet', $data) && null !== $data['CPUSet']) { + $object->setCPUSet($data['CPUSet']); + unset($data['CPUSet']); + } elseif (\array_key_exists('CPUSet', $data) && null === $data['CPUSet']) { + $object->setCPUSet(null); + } + if (\array_key_exists('PidsLimit', $data) && null !== $data['PidsLimit']) { + $object->setPidsLimit($data['PidsLimit']); + unset($data['PidsLimit']); + } elseif (\array_key_exists('PidsLimit', $data) && null === $data['PidsLimit']) { + $object->setPidsLimit(null); + } + if (\array_key_exists('OomKillDisable', $data) && null !== $data['OomKillDisable']) { + $object->setOomKillDisable($data['OomKillDisable']); + unset($data['OomKillDisable']); + } elseif (\array_key_exists('OomKillDisable', $data) && null === $data['OomKillDisable']) { + $object->setOomKillDisable(null); + } + if (\array_key_exists('IPv4Forwarding', $data) && null !== $data['IPv4Forwarding']) { + $object->setIPv4Forwarding($data['IPv4Forwarding']); + unset($data['IPv4Forwarding']); + } elseif (\array_key_exists('IPv4Forwarding', $data) && null === $data['IPv4Forwarding']) { + $object->setIPv4Forwarding(null); + } + if (\array_key_exists('BridgeNfIptables', $data) && null !== $data['BridgeNfIptables']) { + $object->setBridgeNfIptables($data['BridgeNfIptables']); + unset($data['BridgeNfIptables']); + } elseif (\array_key_exists('BridgeNfIptables', $data) && null === $data['BridgeNfIptables']) { + $object->setBridgeNfIptables(null); + } + if (\array_key_exists('BridgeNfIp6tables', $data) && null !== $data['BridgeNfIp6tables']) { + $object->setBridgeNfIp6tables($data['BridgeNfIp6tables']); + unset($data['BridgeNfIp6tables']); + } elseif (\array_key_exists('BridgeNfIp6tables', $data) && null === $data['BridgeNfIp6tables']) { + $object->setBridgeNfIp6tables(null); + } + if (\array_key_exists('Debug', $data) && null !== $data['Debug']) { + $object->setDebug($data['Debug']); + unset($data['Debug']); + } elseif (\array_key_exists('Debug', $data) && null === $data['Debug']) { + $object->setDebug(null); + } + if (\array_key_exists('NFd', $data) && null !== $data['NFd']) { + $object->setNFd($data['NFd']); + unset($data['NFd']); + } elseif (\array_key_exists('NFd', $data) && null === $data['NFd']) { + $object->setNFd(null); + } + if (\array_key_exists('NGoroutines', $data) && null !== $data['NGoroutines']) { + $object->setNGoroutines($data['NGoroutines']); + unset($data['NGoroutines']); + } elseif (\array_key_exists('NGoroutines', $data) && null === $data['NGoroutines']) { + $object->setNGoroutines(null); + } + if (\array_key_exists('SystemTime', $data) && null !== $data['SystemTime']) { + $object->setSystemTime($data['SystemTime']); + unset($data['SystemTime']); + } elseif (\array_key_exists('SystemTime', $data) && null === $data['SystemTime']) { + $object->setSystemTime(null); + } + if (\array_key_exists('LoggingDriver', $data) && null !== $data['LoggingDriver']) { + $object->setLoggingDriver($data['LoggingDriver']); + unset($data['LoggingDriver']); + } elseif (\array_key_exists('LoggingDriver', $data) && null === $data['LoggingDriver']) { + $object->setLoggingDriver(null); + } + if (\array_key_exists('CgroupDriver', $data) && null !== $data['CgroupDriver']) { + $object->setCgroupDriver($data['CgroupDriver']); + unset($data['CgroupDriver']); + } elseif (\array_key_exists('CgroupDriver', $data) && null === $data['CgroupDriver']) { + $object->setCgroupDriver(null); + } + if (\array_key_exists('CgroupVersion', $data) && null !== $data['CgroupVersion']) { + $object->setCgroupVersion($data['CgroupVersion']); + unset($data['CgroupVersion']); + } elseif (\array_key_exists('CgroupVersion', $data) && null === $data['CgroupVersion']) { + $object->setCgroupVersion(null); + } + if (\array_key_exists('NEventsListener', $data) && null !== $data['NEventsListener']) { + $object->setNEventsListener($data['NEventsListener']); + unset($data['NEventsListener']); + } elseif (\array_key_exists('NEventsListener', $data) && null === $data['NEventsListener']) { + $object->setNEventsListener(null); + } + if (\array_key_exists('KernelVersion', $data) && null !== $data['KernelVersion']) { + $object->setKernelVersion($data['KernelVersion']); + unset($data['KernelVersion']); + } elseif (\array_key_exists('KernelVersion', $data) && null === $data['KernelVersion']) { + $object->setKernelVersion(null); + } + if (\array_key_exists('OperatingSystem', $data) && null !== $data['OperatingSystem']) { + $object->setOperatingSystem($data['OperatingSystem']); + unset($data['OperatingSystem']); + } elseif (\array_key_exists('OperatingSystem', $data) && null === $data['OperatingSystem']) { + $object->setOperatingSystem(null); + } + if (\array_key_exists('OSVersion', $data) && null !== $data['OSVersion']) { + $object->setOSVersion($data['OSVersion']); + unset($data['OSVersion']); + } elseif (\array_key_exists('OSVersion', $data) && null === $data['OSVersion']) { + $object->setOSVersion(null); + } + if (\array_key_exists('OSType', $data) && null !== $data['OSType']) { + $object->setOSType($data['OSType']); + unset($data['OSType']); + } elseif (\array_key_exists('OSType', $data) && null === $data['OSType']) { + $object->setOSType(null); + } + if (\array_key_exists('Architecture', $data) && null !== $data['Architecture']) { + $object->setArchitecture($data['Architecture']); + unset($data['Architecture']); + } elseif (\array_key_exists('Architecture', $data) && null === $data['Architecture']) { + $object->setArchitecture(null); + } + if (\array_key_exists('NCPU', $data) && null !== $data['NCPU']) { + $object->setNCPU($data['NCPU']); + unset($data['NCPU']); + } elseif (\array_key_exists('NCPU', $data) && null === $data['NCPU']) { + $object->setNCPU(null); + } + if (\array_key_exists('MemTotal', $data) && null !== $data['MemTotal']) { + $object->setMemTotal($data['MemTotal']); + unset($data['MemTotal']); + } elseif (\array_key_exists('MemTotal', $data) && null === $data['MemTotal']) { + $object->setMemTotal(null); + } + if (\array_key_exists('IndexServerAddress', $data) && null !== $data['IndexServerAddress']) { + $object->setIndexServerAddress($data['IndexServerAddress']); + unset($data['IndexServerAddress']); + } elseif (\array_key_exists('IndexServerAddress', $data) && null === $data['IndexServerAddress']) { + $object->setIndexServerAddress(null); + } + if (\array_key_exists('RegistryConfig', $data) && null !== $data['RegistryConfig']) { + $object->setRegistryConfig($this->denormalizer->denormalize($data['RegistryConfig'], \Docker\API\Model\RegistryServiceConfig::class, 'json', $context)); + unset($data['RegistryConfig']); + } elseif (\array_key_exists('RegistryConfig', $data) && null === $data['RegistryConfig']) { + $object->setRegistryConfig(null); + } + if (\array_key_exists('GenericResources', $data) && null !== $data['GenericResources']) { + $values_2 = []; + foreach ($data['GenericResources'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\GenericResourcesItem::class, 'json', $context); + } + $object->setGenericResources($values_2); + unset($data['GenericResources']); + } elseif (\array_key_exists('GenericResources', $data) && null === $data['GenericResources']) { + $object->setGenericResources(null); + } + if (\array_key_exists('HttpProxy', $data) && null !== $data['HttpProxy']) { + $object->setHttpProxy($data['HttpProxy']); + unset($data['HttpProxy']); + } elseif (\array_key_exists('HttpProxy', $data) && null === $data['HttpProxy']) { + $object->setHttpProxy(null); + } + if (\array_key_exists('HttpsProxy', $data) && null !== $data['HttpsProxy']) { + $object->setHttpsProxy($data['HttpsProxy']); + unset($data['HttpsProxy']); + } elseif (\array_key_exists('HttpsProxy', $data) && null === $data['HttpsProxy']) { + $object->setHttpsProxy(null); + } + if (\array_key_exists('NoProxy', $data) && null !== $data['NoProxy']) { + $object->setNoProxy($data['NoProxy']); + unset($data['NoProxy']); + } elseif (\array_key_exists('NoProxy', $data) && null === $data['NoProxy']) { + $object->setNoProxy(null); + } + if (\array_key_exists('Name', $data) && null !== $data['Name']) { + $object->setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_3 = []; + foreach ($data['Labels'] as $value_3) { + $values_3[] = $value_3; + } + $object->setLabels($values_3); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('ExperimentalBuild', $data) && null !== $data['ExperimentalBuild']) { + $object->setExperimentalBuild($data['ExperimentalBuild']); + unset($data['ExperimentalBuild']); + } elseif (\array_key_exists('ExperimentalBuild', $data) && null === $data['ExperimentalBuild']) { + $object->setExperimentalBuild(null); + } + if (\array_key_exists('ServerVersion', $data) && null !== $data['ServerVersion']) { + $object->setServerVersion($data['ServerVersion']); + unset($data['ServerVersion']); + } elseif (\array_key_exists('ServerVersion', $data) && null === $data['ServerVersion']) { + $object->setServerVersion(null); + } + if (\array_key_exists('Runtimes', $data) && null !== $data['Runtimes']) { + $values_4 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Runtimes'] as $key => $value_4) { + $values_4[$key] = $this->denormalizer->denormalize($value_4, \Docker\API\Model\Runtime::class, 'json', $context); + } + $object->setRuntimes($values_4); + unset($data['Runtimes']); + } elseif (\array_key_exists('Runtimes', $data) && null === $data['Runtimes']) { + $object->setRuntimes(null); + } + if (\array_key_exists('DefaultRuntime', $data) && null !== $data['DefaultRuntime']) { + $object->setDefaultRuntime($data['DefaultRuntime']); + unset($data['DefaultRuntime']); + } elseif (\array_key_exists('DefaultRuntime', $data) && null === $data['DefaultRuntime']) { + $object->setDefaultRuntime(null); + } + if (\array_key_exists('Swarm', $data) && null !== $data['Swarm']) { + $object->setSwarm($this->denormalizer->denormalize($data['Swarm'], \Docker\API\Model\SwarmInfo::class, 'json', $context)); + unset($data['Swarm']); + } elseif (\array_key_exists('Swarm', $data) && null === $data['Swarm']) { + $object->setSwarm(null); + } + if (\array_key_exists('LiveRestoreEnabled', $data) && null !== $data['LiveRestoreEnabled']) { + $object->setLiveRestoreEnabled($data['LiveRestoreEnabled']); + unset($data['LiveRestoreEnabled']); + } elseif (\array_key_exists('LiveRestoreEnabled', $data) && null === $data['LiveRestoreEnabled']) { + $object->setLiveRestoreEnabled(null); + } + if (\array_key_exists('Isolation', $data) && null !== $data['Isolation']) { + $object->setIsolation($data['Isolation']); + unset($data['Isolation']); + } elseif (\array_key_exists('Isolation', $data) && null === $data['Isolation']) { + $object->setIsolation(null); + } + if (\array_key_exists('InitBinary', $data) && null !== $data['InitBinary']) { + $object->setInitBinary($data['InitBinary']); + unset($data['InitBinary']); + } elseif (\array_key_exists('InitBinary', $data) && null === $data['InitBinary']) { + $object->setInitBinary(null); + } + if (\array_key_exists('ContainerdCommit', $data) && null !== $data['ContainerdCommit']) { + $object->setContainerdCommit($this->denormalizer->denormalize($data['ContainerdCommit'], \Docker\API\Model\Commit::class, 'json', $context)); + unset($data['ContainerdCommit']); + } elseif (\array_key_exists('ContainerdCommit', $data) && null === $data['ContainerdCommit']) { + $object->setContainerdCommit(null); + } + if (\array_key_exists('RuncCommit', $data) && null !== $data['RuncCommit']) { + $object->setRuncCommit($this->denormalizer->denormalize($data['RuncCommit'], \Docker\API\Model\Commit::class, 'json', $context)); + unset($data['RuncCommit']); + } elseif (\array_key_exists('RuncCommit', $data) && null === $data['RuncCommit']) { + $object->setRuncCommit(null); + } + if (\array_key_exists('InitCommit', $data) && null !== $data['InitCommit']) { + $object->setInitCommit($this->denormalizer->denormalize($data['InitCommit'], \Docker\API\Model\Commit::class, 'json', $context)); + unset($data['InitCommit']); + } elseif (\array_key_exists('InitCommit', $data) && null === $data['InitCommit']) { + $object->setInitCommit(null); + } + if (\array_key_exists('SecurityOptions', $data) && null !== $data['SecurityOptions']) { + $values_5 = []; + foreach ($data['SecurityOptions'] as $value_5) { + $values_5[] = $value_5; + } + $object->setSecurityOptions($values_5); + unset($data['SecurityOptions']); + } elseif (\array_key_exists('SecurityOptions', $data) && null === $data['SecurityOptions']) { + $object->setSecurityOptions(null); + } + if (\array_key_exists('ProductLicense', $data) && null !== $data['ProductLicense']) { + $object->setProductLicense($data['ProductLicense']); + unset($data['ProductLicense']); + } elseif (\array_key_exists('ProductLicense', $data) && null === $data['ProductLicense']) { + $object->setProductLicense(null); + } + if (\array_key_exists('DefaultAddressPools', $data) && null !== $data['DefaultAddressPools']) { + $values_6 = []; + foreach ($data['DefaultAddressPools'] as $value_6) { + $values_6[] = $this->denormalizer->denormalize($value_6, \Docker\API\Model\SystemInfoDefaultAddressPoolsItem::class, 'json', $context); + } + $object->setDefaultAddressPools($values_6); + unset($data['DefaultAddressPools']); + } elseif (\array_key_exists('DefaultAddressPools', $data) && null === $data['DefaultAddressPools']) { + $object->setDefaultAddressPools(null); + } + if (\array_key_exists('Warnings', $data) && null !== $data['Warnings']) { + $values_7 = []; + foreach ($data['Warnings'] as $value_7) { + $values_7[] = $value_7; + } + $object->setWarnings($values_7); + unset($data['Warnings']); + } elseif (\array_key_exists('Warnings', $data) && null === $data['Warnings']) { + $object->setWarnings(null); + } + if (\array_key_exists('CDISpecDirs', $data) && null !== $data['CDISpecDirs']) { + $values_8 = []; + foreach ($data['CDISpecDirs'] as $value_8) { + $values_8[] = $value_8; + } + $object->setCDISpecDirs($values_8); + unset($data['CDISpecDirs']); + } elseif (\array_key_exists('CDISpecDirs', $data) && null === $data['CDISpecDirs']) { + $object->setCDISpecDirs(null); + } + foreach ($data as $key_1 => $value_9) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_9; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('containers') && null !== $data->getContainers()) { + $dataArray['Containers'] = $data->getContainers(); + } + if ($data->isInitialized('containersRunning') && null !== $data->getContainersRunning()) { + $dataArray['ContainersRunning'] = $data->getContainersRunning(); + } + if ($data->isInitialized('containersPaused') && null !== $data->getContainersPaused()) { + $dataArray['ContainersPaused'] = $data->getContainersPaused(); + } + if ($data->isInitialized('containersStopped') && null !== $data->getContainersStopped()) { + $dataArray['ContainersStopped'] = $data->getContainersStopped(); + } + if ($data->isInitialized('images') && null !== $data->getImages()) { + $dataArray['Images'] = $data->getImages(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('driverStatus') && null !== $data->getDriverStatus()) { + $values = []; + foreach ($data->getDriverStatus() as $value) { + $values_1 = []; + foreach ($value as $value_1) { + $values_1[] = $value_1; + } + $values[] = $values_1; + } + $dataArray['DriverStatus'] = $values; + } + if ($data->isInitialized('dockerRootDir') && null !== $data->getDockerRootDir()) { + $dataArray['DockerRootDir'] = $data->getDockerRootDir(); + } + if ($data->isInitialized('plugins') && null !== $data->getPlugins()) { + $dataArray['Plugins'] = $this->normalizer->normalize($data->getPlugins(), 'json', $context); + } + if ($data->isInitialized('memoryLimit') && null !== $data->getMemoryLimit()) { + $dataArray['MemoryLimit'] = $data->getMemoryLimit(); + } + if ($data->isInitialized('swapLimit') && null !== $data->getSwapLimit()) { + $dataArray['SwapLimit'] = $data->getSwapLimit(); + } + if ($data->isInitialized('kernelMemoryTCP') && null !== $data->getKernelMemoryTCP()) { + $dataArray['KernelMemoryTCP'] = $data->getKernelMemoryTCP(); + } + if ($data->isInitialized('cpuCfsPeriod') && null !== $data->getCpuCfsPeriod()) { + $dataArray['CpuCfsPeriod'] = $data->getCpuCfsPeriod(); + } + if ($data->isInitialized('cpuCfsQuota') && null !== $data->getCpuCfsQuota()) { + $dataArray['CpuCfsQuota'] = $data->getCpuCfsQuota(); + } + if ($data->isInitialized('cPUShares') && null !== $data->getCPUShares()) { + $dataArray['CPUShares'] = $data->getCPUShares(); + } + if ($data->isInitialized('cPUSet') && null !== $data->getCPUSet()) { + $dataArray['CPUSet'] = $data->getCPUSet(); + } + if ($data->isInitialized('pidsLimit') && null !== $data->getPidsLimit()) { + $dataArray['PidsLimit'] = $data->getPidsLimit(); + } + if ($data->isInitialized('oomKillDisable') && null !== $data->getOomKillDisable()) { + $dataArray['OomKillDisable'] = $data->getOomKillDisable(); + } + if ($data->isInitialized('iPv4Forwarding') && null !== $data->getIPv4Forwarding()) { + $dataArray['IPv4Forwarding'] = $data->getIPv4Forwarding(); + } + if ($data->isInitialized('bridgeNfIptables') && null !== $data->getBridgeNfIptables()) { + $dataArray['BridgeNfIptables'] = $data->getBridgeNfIptables(); + } + if ($data->isInitialized('bridgeNfIp6tables') && null !== $data->getBridgeNfIp6tables()) { + $dataArray['BridgeNfIp6tables'] = $data->getBridgeNfIp6tables(); + } + if ($data->isInitialized('debug') && null !== $data->getDebug()) { + $dataArray['Debug'] = $data->getDebug(); + } + if ($data->isInitialized('nFd') && null !== $data->getNFd()) { + $dataArray['NFd'] = $data->getNFd(); + } + if ($data->isInitialized('nGoroutines') && null !== $data->getNGoroutines()) { + $dataArray['NGoroutines'] = $data->getNGoroutines(); + } + if ($data->isInitialized('systemTime') && null !== $data->getSystemTime()) { + $dataArray['SystemTime'] = $data->getSystemTime(); + } + if ($data->isInitialized('loggingDriver') && null !== $data->getLoggingDriver()) { + $dataArray['LoggingDriver'] = $data->getLoggingDriver(); + } + if ($data->isInitialized('cgroupDriver') && null !== $data->getCgroupDriver()) { + $dataArray['CgroupDriver'] = $data->getCgroupDriver(); + } + if ($data->isInitialized('cgroupVersion') && null !== $data->getCgroupVersion()) { + $dataArray['CgroupVersion'] = $data->getCgroupVersion(); + } + if ($data->isInitialized('nEventsListener') && null !== $data->getNEventsListener()) { + $dataArray['NEventsListener'] = $data->getNEventsListener(); + } + if ($data->isInitialized('kernelVersion') && null !== $data->getKernelVersion()) { + $dataArray['KernelVersion'] = $data->getKernelVersion(); + } + if ($data->isInitialized('operatingSystem') && null !== $data->getOperatingSystem()) { + $dataArray['OperatingSystem'] = $data->getOperatingSystem(); + } + if ($data->isInitialized('oSVersion') && null !== $data->getOSVersion()) { + $dataArray['OSVersion'] = $data->getOSVersion(); + } + if ($data->isInitialized('oSType') && null !== $data->getOSType()) { + $dataArray['OSType'] = $data->getOSType(); + } + if ($data->isInitialized('architecture') && null !== $data->getArchitecture()) { + $dataArray['Architecture'] = $data->getArchitecture(); + } + if ($data->isInitialized('nCPU') && null !== $data->getNCPU()) { + $dataArray['NCPU'] = $data->getNCPU(); + } + if ($data->isInitialized('memTotal') && null !== $data->getMemTotal()) { + $dataArray['MemTotal'] = $data->getMemTotal(); + } + if ($data->isInitialized('indexServerAddress') && null !== $data->getIndexServerAddress()) { + $dataArray['IndexServerAddress'] = $data->getIndexServerAddress(); + } + if ($data->isInitialized('registryConfig') && null !== $data->getRegistryConfig()) { + $dataArray['RegistryConfig'] = $this->normalizer->normalize($data->getRegistryConfig(), 'json', $context); + } + if ($data->isInitialized('genericResources') && null !== $data->getGenericResources()) { + $values_2 = []; + foreach ($data->getGenericResources() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['GenericResources'] = $values_2; + } + if ($data->isInitialized('httpProxy') && null !== $data->getHttpProxy()) { + $dataArray['HttpProxy'] = $data->getHttpProxy(); + } + if ($data->isInitialized('httpsProxy') && null !== $data->getHttpsProxy()) { + $dataArray['HttpsProxy'] = $data->getHttpsProxy(); + } + if ($data->isInitialized('noProxy') && null !== $data->getNoProxy()) { + $dataArray['NoProxy'] = $data->getNoProxy(); + } + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_3 = []; + foreach ($data->getLabels() as $value_3) { + $values_3[] = $value_3; + } + $dataArray['Labels'] = $values_3; + } + if ($data->isInitialized('experimentalBuild') && null !== $data->getExperimentalBuild()) { + $dataArray['ExperimentalBuild'] = $data->getExperimentalBuild(); + } + if ($data->isInitialized('serverVersion') && null !== $data->getServerVersion()) { + $dataArray['ServerVersion'] = $data->getServerVersion(); + } + if ($data->isInitialized('runtimes') && null !== $data->getRuntimes()) { + $values_4 = []; + foreach ($data->getRuntimes() as $key => $value_4) { + $values_4[$key] = $this->normalizer->normalize($value_4, 'json', $context); + } + $dataArray['Runtimes'] = $values_4; + } + if ($data->isInitialized('defaultRuntime') && null !== $data->getDefaultRuntime()) { + $dataArray['DefaultRuntime'] = $data->getDefaultRuntime(); + } + if ($data->isInitialized('swarm') && null !== $data->getSwarm()) { + $dataArray['Swarm'] = $this->normalizer->normalize($data->getSwarm(), 'json', $context); + } + if ($data->isInitialized('liveRestoreEnabled') && null !== $data->getLiveRestoreEnabled()) { + $dataArray['LiveRestoreEnabled'] = $data->getLiveRestoreEnabled(); + } + if ($data->isInitialized('isolation') && null !== $data->getIsolation()) { + $dataArray['Isolation'] = $data->getIsolation(); + } + if ($data->isInitialized('initBinary') && null !== $data->getInitBinary()) { + $dataArray['InitBinary'] = $data->getInitBinary(); + } + if ($data->isInitialized('containerdCommit') && null !== $data->getContainerdCommit()) { + $dataArray['ContainerdCommit'] = $this->normalizer->normalize($data->getContainerdCommit(), 'json', $context); + } + if ($data->isInitialized('runcCommit') && null !== $data->getRuncCommit()) { + $dataArray['RuncCommit'] = $this->normalizer->normalize($data->getRuncCommit(), 'json', $context); + } + if ($data->isInitialized('initCommit') && null !== $data->getInitCommit()) { + $dataArray['InitCommit'] = $this->normalizer->normalize($data->getInitCommit(), 'json', $context); + } + if ($data->isInitialized('securityOptions') && null !== $data->getSecurityOptions()) { + $values_5 = []; + foreach ($data->getSecurityOptions() as $value_5) { + $values_5[] = $value_5; + } + $dataArray['SecurityOptions'] = $values_5; + } + if ($data->isInitialized('productLicense') && null !== $data->getProductLicense()) { + $dataArray['ProductLicense'] = $data->getProductLicense(); + } + if ($data->isInitialized('defaultAddressPools') && null !== $data->getDefaultAddressPools()) { + $values_6 = []; + foreach ($data->getDefaultAddressPools() as $value_6) { + $values_6[] = $this->normalizer->normalize($value_6, 'json', $context); + } + $dataArray['DefaultAddressPools'] = $values_6; + } + if ($data->isInitialized('warnings') && null !== $data->getWarnings()) { + $values_7 = []; + foreach ($data->getWarnings() as $value_7) { + $values_7[] = $value_7; + } + $dataArray['Warnings'] = $values_7; + } + if ($data->isInitialized('cDISpecDirs') && null !== $data->getCDISpecDirs()) { + $values_8 = []; + foreach ($data->getCDISpecDirs() as $value_8) { + $values_8[] = $value_8; + } + $dataArray['CDISpecDirs'] = $values_8; + } + foreach ($data as $key_1 => $value_9) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_9; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionComponentsItemDetailsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionComponentsItemDetailsNormalizer.php new file mode 100644 index 000000000..98c1e4e90 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionComponentsItemDetailsNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemVersionComponentsItemDetails::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionComponentsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionComponentsItemNormalizer.php new file mode 100644 index 000000000..b0c4c4328 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionComponentsItemNormalizer.php @@ -0,0 +1,94 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($data['Version']); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('Details', $data) && null !== $data['Details']) { + $object->setDetails($this->denormalizer->denormalize($data['Details'], \Docker\API\Model\SystemVersionComponentsItemDetails::class, 'json', $context)); + unset($data['Details']); + } elseif (\array_key_exists('Details', $data) && null === $data['Details']) { + $object->setDetails(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $dataArray['Version'] = $data->getVersion(); + if ($data->isInitialized('details') && null !== $data->getDetails()) { + $dataArray['Details'] = $this->normalizer->normalize($data->getDetails(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemVersionComponentsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionNormalizer.php new file mode 100644 index 000000000..1d203a269 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionNormalizer.php @@ -0,0 +1,190 @@ +setPlatform($this->denormalizer->denormalize($data['Platform'], \Docker\API\Model\SystemVersionPlatform::class, 'json', $context)); + unset($data['Platform']); + } elseif (\array_key_exists('Platform', $data) && null === $data['Platform']) { + $object->setPlatform(null); + } + if (\array_key_exists('Components', $data) && null !== $data['Components']) { + $values = []; + foreach ($data['Components'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\SystemVersionComponentsItem::class, 'json', $context); + } + $object->setComponents($values); + unset($data['Components']); + } elseif (\array_key_exists('Components', $data) && null === $data['Components']) { + $object->setComponents(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($data['Version']); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('ApiVersion', $data) && null !== $data['ApiVersion']) { + $object->setApiVersion($data['ApiVersion']); + unset($data['ApiVersion']); + } elseif (\array_key_exists('ApiVersion', $data) && null === $data['ApiVersion']) { + $object->setApiVersion(null); + } + if (\array_key_exists('MinAPIVersion', $data) && null !== $data['MinAPIVersion']) { + $object->setMinAPIVersion($data['MinAPIVersion']); + unset($data['MinAPIVersion']); + } elseif (\array_key_exists('MinAPIVersion', $data) && null === $data['MinAPIVersion']) { + $object->setMinAPIVersion(null); + } + if (\array_key_exists('GitCommit', $data) && null !== $data['GitCommit']) { + $object->setGitCommit($data['GitCommit']); + unset($data['GitCommit']); + } elseif (\array_key_exists('GitCommit', $data) && null === $data['GitCommit']) { + $object->setGitCommit(null); + } + if (\array_key_exists('GoVersion', $data) && null !== $data['GoVersion']) { + $object->setGoVersion($data['GoVersion']); + unset($data['GoVersion']); + } elseif (\array_key_exists('GoVersion', $data) && null === $data['GoVersion']) { + $object->setGoVersion(null); + } + if (\array_key_exists('Os', $data) && null !== $data['Os']) { + $object->setOs($data['Os']); + unset($data['Os']); + } elseif (\array_key_exists('Os', $data) && null === $data['Os']) { + $object->setOs(null); + } + if (\array_key_exists('Arch', $data) && null !== $data['Arch']) { + $object->setArch($data['Arch']); + unset($data['Arch']); + } elseif (\array_key_exists('Arch', $data) && null === $data['Arch']) { + $object->setArch(null); + } + if (\array_key_exists('KernelVersion', $data) && null !== $data['KernelVersion']) { + $object->setKernelVersion($data['KernelVersion']); + unset($data['KernelVersion']); + } elseif (\array_key_exists('KernelVersion', $data) && null === $data['KernelVersion']) { + $object->setKernelVersion(null); + } + if (\array_key_exists('Experimental', $data) && null !== $data['Experimental']) { + $object->setExperimental($data['Experimental']); + unset($data['Experimental']); + } elseif (\array_key_exists('Experimental', $data) && null === $data['Experimental']) { + $object->setExperimental(null); + } + if (\array_key_exists('BuildTime', $data) && null !== $data['BuildTime']) { + $object->setBuildTime($data['BuildTime']); + unset($data['BuildTime']); + } elseif (\array_key_exists('BuildTime', $data) && null === $data['BuildTime']) { + $object->setBuildTime(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('platform') && null !== $data->getPlatform()) { + $dataArray['Platform'] = $this->normalizer->normalize($data->getPlatform(), 'json', $context); + } + if ($data->isInitialized('components') && null !== $data->getComponents()) { + $values = []; + foreach ($data->getComponents() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Components'] = $values; + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $data->getVersion(); + } + if ($data->isInitialized('apiVersion') && null !== $data->getApiVersion()) { + $dataArray['ApiVersion'] = $data->getApiVersion(); + } + if ($data->isInitialized('minAPIVersion') && null !== $data->getMinAPIVersion()) { + $dataArray['MinAPIVersion'] = $data->getMinAPIVersion(); + } + if ($data->isInitialized('gitCommit') && null !== $data->getGitCommit()) { + $dataArray['GitCommit'] = $data->getGitCommit(); + } + if ($data->isInitialized('goVersion') && null !== $data->getGoVersion()) { + $dataArray['GoVersion'] = $data->getGoVersion(); + } + if ($data->isInitialized('os') && null !== $data->getOs()) { + $dataArray['Os'] = $data->getOs(); + } + if ($data->isInitialized('arch') && null !== $data->getArch()) { + $dataArray['Arch'] = $data->getArch(); + } + if ($data->isInitialized('kernelVersion') && null !== $data->getKernelVersion()) { + $dataArray['KernelVersion'] = $data->getKernelVersion(); + } + if ($data->isInitialized('experimental') && null !== $data->getExperimental()) { + $dataArray['Experimental'] = $data->getExperimental(); + } + if ($data->isInitialized('buildTime') && null !== $data->getBuildTime()) { + $dataArray['BuildTime'] = $data->getBuildTime(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemVersion::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionPlatformNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionPlatformNormalizer.php new file mode 100644 index 000000000..bc9789c87 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/SystemVersionPlatformNormalizer.php @@ -0,0 +1,78 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\SystemVersionPlatform::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TLSInfoNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TLSInfoNormalizer.php new file mode 100644 index 000000000..6824356a4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TLSInfoNormalizer.php @@ -0,0 +1,98 @@ +setTrustRoot($data['TrustRoot']); + unset($data['TrustRoot']); + } elseif (\array_key_exists('TrustRoot', $data) && null === $data['TrustRoot']) { + $object->setTrustRoot(null); + } + if (\array_key_exists('CertIssuerSubject', $data) && null !== $data['CertIssuerSubject']) { + $object->setCertIssuerSubject($data['CertIssuerSubject']); + unset($data['CertIssuerSubject']); + } elseif (\array_key_exists('CertIssuerSubject', $data) && null === $data['CertIssuerSubject']) { + $object->setCertIssuerSubject(null); + } + if (\array_key_exists('CertIssuerPublicKey', $data) && null !== $data['CertIssuerPublicKey']) { + $object->setCertIssuerPublicKey($data['CertIssuerPublicKey']); + unset($data['CertIssuerPublicKey']); + } elseif (\array_key_exists('CertIssuerPublicKey', $data) && null === $data['CertIssuerPublicKey']) { + $object->setCertIssuerPublicKey(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('trustRoot') && null !== $data->getTrustRoot()) { + $dataArray['TrustRoot'] = $data->getTrustRoot(); + } + if ($data->isInitialized('certIssuerSubject') && null !== $data->getCertIssuerSubject()) { + $dataArray['CertIssuerSubject'] = $data->getCertIssuerSubject(); + } + if ($data->isInitialized('certIssuerPublicKey') && null !== $data->getCertIssuerPublicKey()) { + $dataArray['CertIssuerPublicKey'] = $data->getCertIssuerPublicKey(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TLSInfo::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskNormalizer.php new file mode 100644 index 000000000..c920f31e4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskNormalizer.php @@ -0,0 +1,213 @@ +setID($data['ID']); + unset($data['ID']); + } elseif (\array_key_exists('ID', $data) && null === $data['ID']) { + $object->setID(null); + } + if (\array_key_exists('Version', $data) && null !== $data['Version']) { + $object->setVersion($this->denormalizer->denormalize($data['Version'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['Version']); + } elseif (\array_key_exists('Version', $data) && null === $data['Version']) { + $object->setVersion(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('UpdatedAt', $data) && null !== $data['UpdatedAt']) { + $object->setUpdatedAt($data['UpdatedAt']); + unset($data['UpdatedAt']); + } elseif (\array_key_exists('UpdatedAt', $data) && null === $data['UpdatedAt']) { + $object->setUpdatedAt(null); + } + if (\array_key_exists('Name', $data) && null !== $data['Name']) { + $object->setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Spec', $data) && null !== $data['Spec']) { + $object->setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\TaskSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + if (\array_key_exists('ServiceID', $data) && null !== $data['ServiceID']) { + $object->setServiceID($data['ServiceID']); + unset($data['ServiceID']); + } elseif (\array_key_exists('ServiceID', $data) && null === $data['ServiceID']) { + $object->setServiceID(null); + } + if (\array_key_exists('Slot', $data) && null !== $data['Slot']) { + $object->setSlot($data['Slot']); + unset($data['Slot']); + } elseif (\array_key_exists('Slot', $data) && null === $data['Slot']) { + $object->setSlot(null); + } + if (\array_key_exists('NodeID', $data) && null !== $data['NodeID']) { + $object->setNodeID($data['NodeID']); + unset($data['NodeID']); + } elseif (\array_key_exists('NodeID', $data) && null === $data['NodeID']) { + $object->setNodeID(null); + } + if (\array_key_exists('AssignedGenericResources', $data) && null !== $data['AssignedGenericResources']) { + $values_1 = []; + foreach ($data['AssignedGenericResources'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\GenericResourcesItem::class, 'json', $context); + } + $object->setAssignedGenericResources($values_1); + unset($data['AssignedGenericResources']); + } elseif (\array_key_exists('AssignedGenericResources', $data) && null === $data['AssignedGenericResources']) { + $object->setAssignedGenericResources(null); + } + if (\array_key_exists('Status', $data) && null !== $data['Status']) { + $object->setStatus($this->denormalizer->denormalize($data['Status'], \Docker\API\Model\TaskStatus::class, 'json', $context)); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('DesiredState', $data) && null !== $data['DesiredState']) { + $object->setDesiredState($data['DesiredState']); + unset($data['DesiredState']); + } elseif (\array_key_exists('DesiredState', $data) && null === $data['DesiredState']) { + $object->setDesiredState(null); + } + if (\array_key_exists('JobIteration', $data) && null !== $data['JobIteration']) { + $object->setJobIteration($this->denormalizer->denormalize($data['JobIteration'], \Docker\API\Model\ObjectVersion::class, 'json', $context)); + unset($data['JobIteration']); + } elseif (\array_key_exists('JobIteration', $data) && null === $data['JobIteration']) { + $object->setJobIteration(null); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('iD') && null !== $data->getID()) { + $dataArray['ID'] = $data->getID(); + } + if ($data->isInitialized('version') && null !== $data->getVersion()) { + $dataArray['Version'] = $this->normalizer->normalize($data->getVersion(), 'json', $context); + } + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('updatedAt') && null !== $data->getUpdatedAt()) { + $dataArray['UpdatedAt'] = $data->getUpdatedAt(); + } + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + if ($data->isInitialized('serviceID') && null !== $data->getServiceID()) { + $dataArray['ServiceID'] = $data->getServiceID(); + } + if ($data->isInitialized('slot') && null !== $data->getSlot()) { + $dataArray['Slot'] = $data->getSlot(); + } + if ($data->isInitialized('nodeID') && null !== $data->getNodeID()) { + $dataArray['NodeID'] = $data->getNodeID(); + } + if ($data->isInitialized('assignedGenericResources') && null !== $data->getAssignedGenericResources()) { + $values_1 = []; + foreach ($data->getAssignedGenericResources() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['AssignedGenericResources'] = $values_1; + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $dataArray['Status'] = $this->normalizer->normalize($data->getStatus(), 'json', $context); + } + if ($data->isInitialized('desiredState') && null !== $data->getDesiredState()) { + $dataArray['DesiredState'] = $data->getDesiredState(); + } + if ($data->isInitialized('jobIteration') && null !== $data->getJobIteration()) { + $dataArray['JobIteration'] = $this->normalizer->normalize($data->getJobIteration(), 'json', $context); + } + foreach ($data as $key_1 => $value_2) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Task::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemFileNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemFileNormalizer.php new file mode 100644 index 000000000..2d8b4c3d1 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemFileNormalizer.php @@ -0,0 +1,107 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('UID', $data) && null !== $data['UID']) { + $object->setUID($data['UID']); + unset($data['UID']); + } elseif (\array_key_exists('UID', $data) && null === $data['UID']) { + $object->setUID(null); + } + if (\array_key_exists('GID', $data) && null !== $data['GID']) { + $object->setGID($data['GID']); + unset($data['GID']); + } elseif (\array_key_exists('GID', $data) && null === $data['GID']) { + $object->setGID(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('uID') && null !== $data->getUID()) { + $dataArray['UID'] = $data->getUID(); + } + if ($data->isInitialized('gID') && null !== $data->getGID()) { + $dataArray['GID'] = $data->getGID(); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecConfigsItemFile::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemNormalizer.php new file mode 100644 index 000000000..6813ae32d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemNormalizer.php @@ -0,0 +1,107 @@ +setFile($this->denormalizer->denormalize($data['File'], \Docker\API\Model\TaskSpecContainerSpecConfigsItemFile::class, 'json', $context)); + unset($data['File']); + } elseif (\array_key_exists('File', $data) && null === $data['File']) { + $object->setFile(null); + } + if (\array_key_exists('Runtime', $data) && null !== $data['Runtime']) { + $object->setRuntime($this->denormalizer->denormalize($data['Runtime'], \Docker\API\Model\TaskSpecContainerSpecConfigsItemRuntime::class, 'json', $context)); + unset($data['Runtime']); + } elseif (\array_key_exists('Runtime', $data) && null === $data['Runtime']) { + $object->setRuntime(null); + } + if (\array_key_exists('ConfigID', $data) && null !== $data['ConfigID']) { + $object->setConfigID($data['ConfigID']); + unset($data['ConfigID']); + } elseif (\array_key_exists('ConfigID', $data) && null === $data['ConfigID']) { + $object->setConfigID(null); + } + if (\array_key_exists('ConfigName', $data) && null !== $data['ConfigName']) { + $object->setConfigName($data['ConfigName']); + unset($data['ConfigName']); + } elseif (\array_key_exists('ConfigName', $data) && null === $data['ConfigName']) { + $object->setConfigName(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('file') && null !== $data->getFile()) { + $dataArray['File'] = $this->normalizer->normalize($data->getFile(), 'json', $context); + } + if ($data->isInitialized('runtime') && null !== $data->getRuntime()) { + $dataArray['Runtime'] = $this->normalizer->normalize($data->getRuntime(), 'json', $context); + } + if ($data->isInitialized('configID') && null !== $data->getConfigID()) { + $dataArray['ConfigID'] = $data->getConfigID(); + } + if ($data->isInitialized('configName') && null !== $data->getConfigName()) { + $dataArray['ConfigName'] = $data->getConfigName(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecConfigsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemRuntimeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemRuntimeNormalizer.php new file mode 100644 index 000000000..0c974e412 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecConfigsItemRuntimeNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecConfigsItemRuntime::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecDNSConfigNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecDNSConfigNormalizer.php new file mode 100644 index 000000000..427029046 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecDNSConfigNormalizer.php @@ -0,0 +1,122 @@ +setNameservers($values); + unset($data['Nameservers']); + } elseif (\array_key_exists('Nameservers', $data) && null === $data['Nameservers']) { + $object->setNameservers(null); + } + if (\array_key_exists('Search', $data) && null !== $data['Search']) { + $values_1 = []; + foreach ($data['Search'] as $value_1) { + $values_1[] = $value_1; + } + $object->setSearch($values_1); + unset($data['Search']); + } elseif (\array_key_exists('Search', $data) && null === $data['Search']) { + $object->setSearch(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values_2 = []; + foreach ($data['Options'] as $value_2) { + $values_2[] = $value_2; + } + $object->setOptions($values_2); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('nameservers') && null !== $data->getNameservers()) { + $values = []; + foreach ($data->getNameservers() as $value) { + $values[] = $value; + } + $dataArray['Nameservers'] = $values; + } + if ($data->isInitialized('search') && null !== $data->getSearch()) { + $values_1 = []; + foreach ($data->getSearch() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Search'] = $values_1; + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values_2 = []; + foreach ($data->getOptions() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Options'] = $values_2; + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecDNSConfig::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecNormalizer.php new file mode 100644 index 000000000..9ad76a638 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecNormalizer.php @@ -0,0 +1,430 @@ +setImage($data['Image']); + unset($data['Image']); + } elseif (\array_key_exists('Image', $data) && null === $data['Image']) { + $object->setImage(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key => $value) { + $values[$key] = $value; + } + $object->setLabels($values); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Command', $data) && null !== $data['Command']) { + $values_1 = []; + foreach ($data['Command'] as $value_1) { + $values_1[] = $value_1; + } + $object->setCommand($values_1); + unset($data['Command']); + } elseif (\array_key_exists('Command', $data) && null === $data['Command']) { + $object->setCommand(null); + } + if (\array_key_exists('Args', $data) && null !== $data['Args']) { + $values_2 = []; + foreach ($data['Args'] as $value_2) { + $values_2[] = $value_2; + } + $object->setArgs($values_2); + unset($data['Args']); + } elseif (\array_key_exists('Args', $data) && null === $data['Args']) { + $object->setArgs(null); + } + if (\array_key_exists('Hostname', $data) && null !== $data['Hostname']) { + $object->setHostname($data['Hostname']); + unset($data['Hostname']); + } elseif (\array_key_exists('Hostname', $data) && null === $data['Hostname']) { + $object->setHostname(null); + } + if (\array_key_exists('Env', $data) && null !== $data['Env']) { + $values_3 = []; + foreach ($data['Env'] as $value_3) { + $values_3[] = $value_3; + } + $object->setEnv($values_3); + unset($data['Env']); + } elseif (\array_key_exists('Env', $data) && null === $data['Env']) { + $object->setEnv(null); + } + if (\array_key_exists('Dir', $data) && null !== $data['Dir']) { + $object->setDir($data['Dir']); + unset($data['Dir']); + } elseif (\array_key_exists('Dir', $data) && null === $data['Dir']) { + $object->setDir(null); + } + if (\array_key_exists('User', $data) && null !== $data['User']) { + $object->setUser($data['User']); + unset($data['User']); + } elseif (\array_key_exists('User', $data) && null === $data['User']) { + $object->setUser(null); + } + if (\array_key_exists('Groups', $data) && null !== $data['Groups']) { + $values_4 = []; + foreach ($data['Groups'] as $value_4) { + $values_4[] = $value_4; + } + $object->setGroups($values_4); + unset($data['Groups']); + } elseif (\array_key_exists('Groups', $data) && null === $data['Groups']) { + $object->setGroups(null); + } + if (\array_key_exists('Privileges', $data) && null !== $data['Privileges']) { + $object->setPrivileges($this->denormalizer->denormalize($data['Privileges'], \Docker\API\Model\TaskSpecContainerSpecPrivileges::class, 'json', $context)); + unset($data['Privileges']); + } elseif (\array_key_exists('Privileges', $data) && null === $data['Privileges']) { + $object->setPrivileges(null); + } + if (\array_key_exists('TTY', $data) && null !== $data['TTY']) { + $object->setTTY($data['TTY']); + unset($data['TTY']); + } elseif (\array_key_exists('TTY', $data) && null === $data['TTY']) { + $object->setTTY(null); + } + if (\array_key_exists('OpenStdin', $data) && null !== $data['OpenStdin']) { + $object->setOpenStdin($data['OpenStdin']); + unset($data['OpenStdin']); + } elseif (\array_key_exists('OpenStdin', $data) && null === $data['OpenStdin']) { + $object->setOpenStdin(null); + } + if (\array_key_exists('ReadOnly', $data) && null !== $data['ReadOnly']) { + $object->setReadOnly($data['ReadOnly']); + unset($data['ReadOnly']); + } elseif (\array_key_exists('ReadOnly', $data) && null === $data['ReadOnly']) { + $object->setReadOnly(null); + } + if (\array_key_exists('Mounts', $data) && null !== $data['Mounts']) { + $values_5 = []; + foreach ($data['Mounts'] as $value_5) { + $values_5[] = $this->denormalizer->denormalize($value_5, \Docker\API\Model\Mount::class, 'json', $context); + } + $object->setMounts($values_5); + unset($data['Mounts']); + } elseif (\array_key_exists('Mounts', $data) && null === $data['Mounts']) { + $object->setMounts(null); + } + if (\array_key_exists('StopSignal', $data) && null !== $data['StopSignal']) { + $object->setStopSignal($data['StopSignal']); + unset($data['StopSignal']); + } elseif (\array_key_exists('StopSignal', $data) && null === $data['StopSignal']) { + $object->setStopSignal(null); + } + if (\array_key_exists('StopGracePeriod', $data) && null !== $data['StopGracePeriod']) { + $object->setStopGracePeriod($data['StopGracePeriod']); + unset($data['StopGracePeriod']); + } elseif (\array_key_exists('StopGracePeriod', $data) && null === $data['StopGracePeriod']) { + $object->setStopGracePeriod(null); + } + if (\array_key_exists('HealthCheck', $data) && null !== $data['HealthCheck']) { + $object->setHealthCheck($this->denormalizer->denormalize($data['HealthCheck'], \Docker\API\Model\HealthConfig::class, 'json', $context)); + unset($data['HealthCheck']); + } elseif (\array_key_exists('HealthCheck', $data) && null === $data['HealthCheck']) { + $object->setHealthCheck(null); + } + if (\array_key_exists('Hosts', $data) && null !== $data['Hosts']) { + $values_6 = []; + foreach ($data['Hosts'] as $value_6) { + $values_6[] = $value_6; + } + $object->setHosts($values_6); + unset($data['Hosts']); + } elseif (\array_key_exists('Hosts', $data) && null === $data['Hosts']) { + $object->setHosts(null); + } + if (\array_key_exists('DNSConfig', $data) && null !== $data['DNSConfig']) { + $object->setDNSConfig($this->denormalizer->denormalize($data['DNSConfig'], \Docker\API\Model\TaskSpecContainerSpecDNSConfig::class, 'json', $context)); + unset($data['DNSConfig']); + } elseif (\array_key_exists('DNSConfig', $data) && null === $data['DNSConfig']) { + $object->setDNSConfig(null); + } + if (\array_key_exists('Secrets', $data) && null !== $data['Secrets']) { + $values_7 = []; + foreach ($data['Secrets'] as $value_7) { + $values_7[] = $this->denormalizer->denormalize($value_7, \Docker\API\Model\TaskSpecContainerSpecSecretsItem::class, 'json', $context); + } + $object->setSecrets($values_7); + unset($data['Secrets']); + } elseif (\array_key_exists('Secrets', $data) && null === $data['Secrets']) { + $object->setSecrets(null); + } + if (\array_key_exists('Configs', $data) && null !== $data['Configs']) { + $values_8 = []; + foreach ($data['Configs'] as $value_8) { + $values_8[] = $this->denormalizer->denormalize($value_8, \Docker\API\Model\TaskSpecContainerSpecConfigsItem::class, 'json', $context); + } + $object->setConfigs($values_8); + unset($data['Configs']); + } elseif (\array_key_exists('Configs', $data) && null === $data['Configs']) { + $object->setConfigs(null); + } + if (\array_key_exists('Isolation', $data) && null !== $data['Isolation']) { + $object->setIsolation($data['Isolation']); + unset($data['Isolation']); + } elseif (\array_key_exists('Isolation', $data) && null === $data['Isolation']) { + $object->setIsolation(null); + } + if (\array_key_exists('Init', $data) && null !== $data['Init']) { + $object->setInit($data['Init']); + unset($data['Init']); + } elseif (\array_key_exists('Init', $data) && null === $data['Init']) { + $object->setInit(null); + } + if (\array_key_exists('Sysctls', $data) && null !== $data['Sysctls']) { + $values_9 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Sysctls'] as $key_1 => $value_9) { + $values_9[$key_1] = $value_9; + } + $object->setSysctls($values_9); + unset($data['Sysctls']); + } elseif (\array_key_exists('Sysctls', $data) && null === $data['Sysctls']) { + $object->setSysctls(null); + } + if (\array_key_exists('CapabilityAdd', $data) && null !== $data['CapabilityAdd']) { + $values_10 = []; + foreach ($data['CapabilityAdd'] as $value_10) { + $values_10[] = $value_10; + } + $object->setCapabilityAdd($values_10); + unset($data['CapabilityAdd']); + } elseif (\array_key_exists('CapabilityAdd', $data) && null === $data['CapabilityAdd']) { + $object->setCapabilityAdd(null); + } + if (\array_key_exists('CapabilityDrop', $data) && null !== $data['CapabilityDrop']) { + $values_11 = []; + foreach ($data['CapabilityDrop'] as $value_11) { + $values_11[] = $value_11; + } + $object->setCapabilityDrop($values_11); + unset($data['CapabilityDrop']); + } elseif (\array_key_exists('CapabilityDrop', $data) && null === $data['CapabilityDrop']) { + $object->setCapabilityDrop(null); + } + if (\array_key_exists('Ulimits', $data) && null !== $data['Ulimits']) { + $values_12 = []; + foreach ($data['Ulimits'] as $value_12) { + $values_12[] = $this->denormalizer->denormalize($value_12, \Docker\API\Model\TaskSpecContainerSpecUlimitsItem::class, 'json', $context); + } + $object->setUlimits($values_12); + unset($data['Ulimits']); + } elseif (\array_key_exists('Ulimits', $data) && null === $data['Ulimits']) { + $object->setUlimits(null); + } + foreach ($data as $key_2 => $value_13) { + if (preg_match('/.*/', (string) $key_2)) { + $object[$key_2] = $value_13; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('image') && null !== $data->getImage()) { + $dataArray['Image'] = $data->getImage(); + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values = []; + foreach ($data->getLabels() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Labels'] = $values; + } + if ($data->isInitialized('command') && null !== $data->getCommand()) { + $values_1 = []; + foreach ($data->getCommand() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Command'] = $values_1; + } + if ($data->isInitialized('args') && null !== $data->getArgs()) { + $values_2 = []; + foreach ($data->getArgs() as $value_2) { + $values_2[] = $value_2; + } + $dataArray['Args'] = $values_2; + } + if ($data->isInitialized('hostname') && null !== $data->getHostname()) { + $dataArray['Hostname'] = $data->getHostname(); + } + if ($data->isInitialized('env') && null !== $data->getEnv()) { + $values_3 = []; + foreach ($data->getEnv() as $value_3) { + $values_3[] = $value_3; + } + $dataArray['Env'] = $values_3; + } + if ($data->isInitialized('dir') && null !== $data->getDir()) { + $dataArray['Dir'] = $data->getDir(); + } + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['User'] = $data->getUser(); + } + if ($data->isInitialized('groups') && null !== $data->getGroups()) { + $values_4 = []; + foreach ($data->getGroups() as $value_4) { + $values_4[] = $value_4; + } + $dataArray['Groups'] = $values_4; + } + if ($data->isInitialized('privileges') && null !== $data->getPrivileges()) { + $dataArray['Privileges'] = $this->normalizer->normalize($data->getPrivileges(), 'json', $context); + } + if ($data->isInitialized('tTY') && null !== $data->getTTY()) { + $dataArray['TTY'] = $data->getTTY(); + } + if ($data->isInitialized('openStdin') && null !== $data->getOpenStdin()) { + $dataArray['OpenStdin'] = $data->getOpenStdin(); + } + if ($data->isInitialized('readOnly') && null !== $data->getReadOnly()) { + $dataArray['ReadOnly'] = $data->getReadOnly(); + } + if ($data->isInitialized('mounts') && null !== $data->getMounts()) { + $values_5 = []; + foreach ($data->getMounts() as $value_5) { + $values_5[] = $this->normalizer->normalize($value_5, 'json', $context); + } + $dataArray['Mounts'] = $values_5; + } + if ($data->isInitialized('stopSignal') && null !== $data->getStopSignal()) { + $dataArray['StopSignal'] = $data->getStopSignal(); + } + if ($data->isInitialized('stopGracePeriod') && null !== $data->getStopGracePeriod()) { + $dataArray['StopGracePeriod'] = $data->getStopGracePeriod(); + } + if ($data->isInitialized('healthCheck') && null !== $data->getHealthCheck()) { + $dataArray['HealthCheck'] = $this->normalizer->normalize($data->getHealthCheck(), 'json', $context); + } + if ($data->isInitialized('hosts') && null !== $data->getHosts()) { + $values_6 = []; + foreach ($data->getHosts() as $value_6) { + $values_6[] = $value_6; + } + $dataArray['Hosts'] = $values_6; + } + if ($data->isInitialized('dNSConfig') && null !== $data->getDNSConfig()) { + $dataArray['DNSConfig'] = $this->normalizer->normalize($data->getDNSConfig(), 'json', $context); + } + if ($data->isInitialized('secrets') && null !== $data->getSecrets()) { + $values_7 = []; + foreach ($data->getSecrets() as $value_7) { + $values_7[] = $this->normalizer->normalize($value_7, 'json', $context); + } + $dataArray['Secrets'] = $values_7; + } + if ($data->isInitialized('configs') && null !== $data->getConfigs()) { + $values_8 = []; + foreach ($data->getConfigs() as $value_8) { + $values_8[] = $this->normalizer->normalize($value_8, 'json', $context); + } + $dataArray['Configs'] = $values_8; + } + if ($data->isInitialized('isolation') && null !== $data->getIsolation()) { + $dataArray['Isolation'] = $data->getIsolation(); + } + if ($data->isInitialized('init') && null !== $data->getInit()) { + $dataArray['Init'] = $data->getInit(); + } + if ($data->isInitialized('sysctls') && null !== $data->getSysctls()) { + $values_9 = []; + foreach ($data->getSysctls() as $key_1 => $value_9) { + $values_9[$key_1] = $value_9; + } + $dataArray['Sysctls'] = $values_9; + } + if ($data->isInitialized('capabilityAdd') && null !== $data->getCapabilityAdd()) { + $values_10 = []; + foreach ($data->getCapabilityAdd() as $value_10) { + $values_10[] = $value_10; + } + $dataArray['CapabilityAdd'] = $values_10; + } + if ($data->isInitialized('capabilityDrop') && null !== $data->getCapabilityDrop()) { + $values_11 = []; + foreach ($data->getCapabilityDrop() as $value_11) { + $values_11[] = $value_11; + } + $dataArray['CapabilityDrop'] = $values_11; + } + if ($data->isInitialized('ulimits') && null !== $data->getUlimits()) { + $values_12 = []; + foreach ($data->getUlimits() as $value_12) { + $values_12[] = $this->normalizer->normalize($value_12, 'json', $context); + } + $dataArray['Ulimits'] = $values_12; + } + foreach ($data as $key_2 => $value_13) { + if (preg_match('/.*/', (string) $key_2)) { + $dataArray[$key_2] = $value_13; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesAppArmorNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesAppArmorNormalizer.php new file mode 100644 index 000000000..d296764fb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesAppArmorNormalizer.php @@ -0,0 +1,80 @@ +setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecPrivilegesAppArmor::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesCredentialSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesCredentialSpecNormalizer.php new file mode 100644 index 000000000..977fe850d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesCredentialSpecNormalizer.php @@ -0,0 +1,98 @@ +setConfig($data['Config']); + unset($data['Config']); + } elseif (\array_key_exists('Config', $data) && null === $data['Config']) { + $object->setConfig(null); + } + if (\array_key_exists('File', $data) && null !== $data['File']) { + $object->setFile($data['File']); + unset($data['File']); + } elseif (\array_key_exists('File', $data) && null === $data['File']) { + $object->setFile(null); + } + if (\array_key_exists('Registry', $data) && null !== $data['Registry']) { + $object->setRegistry($data['Registry']); + unset($data['Registry']); + } elseif (\array_key_exists('Registry', $data) && null === $data['Registry']) { + $object->setRegistry(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('config') && null !== $data->getConfig()) { + $dataArray['Config'] = $data->getConfig(); + } + if ($data->isInitialized('file') && null !== $data->getFile()) { + $dataArray['File'] = $data->getFile(); + } + if ($data->isInitialized('registry') && null !== $data->getRegistry()) { + $dataArray['Registry'] = $data->getRegistry(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecPrivilegesCredentialSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesNormalizer.php new file mode 100644 index 000000000..01bbeeb9c --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesNormalizer.php @@ -0,0 +1,119 @@ +setCredentialSpec($this->denormalizer->denormalize($data['CredentialSpec'], \Docker\API\Model\TaskSpecContainerSpecPrivilegesCredentialSpec::class, 'json', $context)); + unset($data['CredentialSpec']); + } elseif (\array_key_exists('CredentialSpec', $data) && null === $data['CredentialSpec']) { + $object->setCredentialSpec(null); + } + if (\array_key_exists('SELinuxContext', $data) && null !== $data['SELinuxContext']) { + $object->setSELinuxContext($this->denormalizer->denormalize($data['SELinuxContext'], \Docker\API\Model\TaskSpecContainerSpecPrivilegesSELinuxContext::class, 'json', $context)); + unset($data['SELinuxContext']); + } elseif (\array_key_exists('SELinuxContext', $data) && null === $data['SELinuxContext']) { + $object->setSELinuxContext(null); + } + if (\array_key_exists('Seccomp', $data) && null !== $data['Seccomp']) { + $object->setSeccomp($this->denormalizer->denormalize($data['Seccomp'], \Docker\API\Model\TaskSpecContainerSpecPrivilegesSeccomp::class, 'json', $context)); + unset($data['Seccomp']); + } elseif (\array_key_exists('Seccomp', $data) && null === $data['Seccomp']) { + $object->setSeccomp(null); + } + if (\array_key_exists('AppArmor', $data) && null !== $data['AppArmor']) { + $object->setAppArmor($this->denormalizer->denormalize($data['AppArmor'], \Docker\API\Model\TaskSpecContainerSpecPrivilegesAppArmor::class, 'json', $context)); + unset($data['AppArmor']); + } elseif (\array_key_exists('AppArmor', $data) && null === $data['AppArmor']) { + $object->setAppArmor(null); + } + if (\array_key_exists('NoNewPrivileges', $data) && null !== $data['NoNewPrivileges']) { + $object->setNoNewPrivileges($data['NoNewPrivileges']); + unset($data['NoNewPrivileges']); + } elseif (\array_key_exists('NoNewPrivileges', $data) && null === $data['NoNewPrivileges']) { + $object->setNoNewPrivileges(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('credentialSpec') && null !== $data->getCredentialSpec()) { + $dataArray['CredentialSpec'] = $this->normalizer->normalize($data->getCredentialSpec(), 'json', $context); + } + if ($data->isInitialized('sELinuxContext') && null !== $data->getSELinuxContext()) { + $dataArray['SELinuxContext'] = $this->normalizer->normalize($data->getSELinuxContext(), 'json', $context); + } + if ($data->isInitialized('seccomp') && null !== $data->getSeccomp()) { + $dataArray['Seccomp'] = $this->normalizer->normalize($data->getSeccomp(), 'json', $context); + } + if ($data->isInitialized('appArmor') && null !== $data->getAppArmor()) { + $dataArray['AppArmor'] = $this->normalizer->normalize($data->getAppArmor(), 'json', $context); + } + if ($data->isInitialized('noNewPrivileges') && null !== $data->getNoNewPrivileges()) { + $dataArray['NoNewPrivileges'] = $data->getNoNewPrivileges(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecPrivileges::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesSELinuxContextNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesSELinuxContextNormalizer.php new file mode 100644 index 000000000..0a7d436c2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesSELinuxContextNormalizer.php @@ -0,0 +1,119 @@ +setDisable($data['Disable']); + unset($data['Disable']); + } elseif (\array_key_exists('Disable', $data) && null === $data['Disable']) { + $object->setDisable(null); + } + if (\array_key_exists('User', $data) && null !== $data['User']) { + $object->setUser($data['User']); + unset($data['User']); + } elseif (\array_key_exists('User', $data) && null === $data['User']) { + $object->setUser(null); + } + if (\array_key_exists('Role', $data) && null !== $data['Role']) { + $object->setRole($data['Role']); + unset($data['Role']); + } elseif (\array_key_exists('Role', $data) && null === $data['Role']) { + $object->setRole(null); + } + if (\array_key_exists('Type', $data) && null !== $data['Type']) { + $object->setType($data['Type']); + unset($data['Type']); + } elseif (\array_key_exists('Type', $data) && null === $data['Type']) { + $object->setType(null); + } + if (\array_key_exists('Level', $data) && null !== $data['Level']) { + $object->setLevel($data['Level']); + unset($data['Level']); + } elseif (\array_key_exists('Level', $data) && null === $data['Level']) { + $object->setLevel(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('disable') && null !== $data->getDisable()) { + $dataArray['Disable'] = $data->getDisable(); + } + if ($data->isInitialized('user') && null !== $data->getUser()) { + $dataArray['User'] = $data->getUser(); + } + if ($data->isInitialized('role') && null !== $data->getRole()) { + $dataArray['Role'] = $data->getRole(); + } + if ($data->isInitialized('type') && null !== $data->getType()) { + $dataArray['Type'] = $data->getType(); + } + if ($data->isInitialized('level') && null !== $data->getLevel()) { + $dataArray['Level'] = $data->getLevel(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecPrivilegesSELinuxContext::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesSeccompNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesSeccompNormalizer.php new file mode 100644 index 000000000..d77e254d8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecPrivilegesSeccompNormalizer.php @@ -0,0 +1,89 @@ +setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + if (\array_key_exists('Profile', $data) && null !== $data['Profile']) { + $object->setProfile($data['Profile']); + unset($data['Profile']); + } elseif (\array_key_exists('Profile', $data) && null === $data['Profile']) { + $object->setProfile(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + if ($data->isInitialized('profile') && null !== $data->getProfile()) { + $dataArray['Profile'] = $data->getProfile(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecPrivilegesSeccomp::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecSecretsItemFileNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecSecretsItemFileNormalizer.php new file mode 100644 index 000000000..48fde7715 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecSecretsItemFileNormalizer.php @@ -0,0 +1,107 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('UID', $data) && null !== $data['UID']) { + $object->setUID($data['UID']); + unset($data['UID']); + } elseif (\array_key_exists('UID', $data) && null === $data['UID']) { + $object->setUID(null); + } + if (\array_key_exists('GID', $data) && null !== $data['GID']) { + $object->setGID($data['GID']); + unset($data['GID']); + } elseif (\array_key_exists('GID', $data) && null === $data['GID']) { + $object->setGID(null); + } + if (\array_key_exists('Mode', $data) && null !== $data['Mode']) { + $object->setMode($data['Mode']); + unset($data['Mode']); + } elseif (\array_key_exists('Mode', $data) && null === $data['Mode']) { + $object->setMode(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('uID') && null !== $data->getUID()) { + $dataArray['UID'] = $data->getUID(); + } + if ($data->isInitialized('gID') && null !== $data->getGID()) { + $dataArray['GID'] = $data->getGID(); + } + if ($data->isInitialized('mode') && null !== $data->getMode()) { + $dataArray['Mode'] = $data->getMode(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecSecretsItemFile::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecSecretsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecSecretsItemNormalizer.php new file mode 100644 index 000000000..b5a06b290 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecSecretsItemNormalizer.php @@ -0,0 +1,98 @@ +setFile($this->denormalizer->denormalize($data['File'], \Docker\API\Model\TaskSpecContainerSpecSecretsItemFile::class, 'json', $context)); + unset($data['File']); + } elseif (\array_key_exists('File', $data) && null === $data['File']) { + $object->setFile(null); + } + if (\array_key_exists('SecretID', $data) && null !== $data['SecretID']) { + $object->setSecretID($data['SecretID']); + unset($data['SecretID']); + } elseif (\array_key_exists('SecretID', $data) && null === $data['SecretID']) { + $object->setSecretID(null); + } + if (\array_key_exists('SecretName', $data) && null !== $data['SecretName']) { + $object->setSecretName($data['SecretName']); + unset($data['SecretName']); + } elseif (\array_key_exists('SecretName', $data) && null === $data['SecretName']) { + $object->setSecretName(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('file') && null !== $data->getFile()) { + $dataArray['File'] = $this->normalizer->normalize($data->getFile(), 'json', $context); + } + if ($data->isInitialized('secretID') && null !== $data->getSecretID()) { + $dataArray['SecretID'] = $data->getSecretID(); + } + if ($data->isInitialized('secretName') && null !== $data->getSecretName()) { + $dataArray['SecretName'] = $data->getSecretName(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecSecretsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecUlimitsItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecUlimitsItemNormalizer.php new file mode 100644 index 000000000..5c27e793d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecContainerSpecUlimitsItemNormalizer.php @@ -0,0 +1,98 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Soft', $data) && null !== $data['Soft']) { + $object->setSoft($data['Soft']); + unset($data['Soft']); + } elseif (\array_key_exists('Soft', $data) && null === $data['Soft']) { + $object->setSoft(null); + } + if (\array_key_exists('Hard', $data) && null !== $data['Hard']) { + $object->setHard($data['Hard']); + unset($data['Hard']); + } elseif (\array_key_exists('Hard', $data) && null === $data['Hard']) { + $object->setHard(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('soft') && null !== $data->getSoft()) { + $dataArray['Soft'] = $data->getSoft(); + } + if ($data->isInitialized('hard') && null !== $data->getHard()) { + $dataArray['Hard'] = $data->getHard(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecContainerSpecUlimitsItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecLogDriverNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecLogDriverNormalizer.php new file mode 100644 index 000000000..ab29fee38 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecLogDriverNormalizer.php @@ -0,0 +1,97 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key => $value) { + $values[$key] = $value; + } + $object->setOptions($values); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $object[$key_1] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('options') && null !== $data->getOptions()) { + $values = []; + foreach ($data->getOptions() as $key => $value) { + $values[$key] = $value; + } + $dataArray['Options'] = $values; + } + foreach ($data as $key_1 => $value_1) { + if (preg_match('/.*/', (string) $key_1)) { + $dataArray[$key_1] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecLogDriver::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecNetworkAttachmentSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecNetworkAttachmentSpecNormalizer.php new file mode 100644 index 000000000..917f862f8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecNetworkAttachmentSpecNormalizer.php @@ -0,0 +1,80 @@ +setContainerID($data['ContainerID']); + unset($data['ContainerID']); + } elseif (\array_key_exists('ContainerID', $data) && null === $data['ContainerID']) { + $object->setContainerID(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('containerID') && null !== $data->getContainerID()) { + $dataArray['ContainerID'] = $data->getContainerID(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecNetworkAttachmentSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecNormalizer.php new file mode 100644 index 000000000..ad6e1b212 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecNormalizer.php @@ -0,0 +1,169 @@ +setPluginSpec($this->denormalizer->denormalize($data['PluginSpec'], \Docker\API\Model\TaskSpecPluginSpec::class, 'json', $context)); + unset($data['PluginSpec']); + } elseif (\array_key_exists('PluginSpec', $data) && null === $data['PluginSpec']) { + $object->setPluginSpec(null); + } + if (\array_key_exists('ContainerSpec', $data) && null !== $data['ContainerSpec']) { + $object->setContainerSpec($this->denormalizer->denormalize($data['ContainerSpec'], \Docker\API\Model\TaskSpecContainerSpec::class, 'json', $context)); + unset($data['ContainerSpec']); + } elseif (\array_key_exists('ContainerSpec', $data) && null === $data['ContainerSpec']) { + $object->setContainerSpec(null); + } + if (\array_key_exists('NetworkAttachmentSpec', $data) && null !== $data['NetworkAttachmentSpec']) { + $object->setNetworkAttachmentSpec($this->denormalizer->denormalize($data['NetworkAttachmentSpec'], \Docker\API\Model\TaskSpecNetworkAttachmentSpec::class, 'json', $context)); + unset($data['NetworkAttachmentSpec']); + } elseif (\array_key_exists('NetworkAttachmentSpec', $data) && null === $data['NetworkAttachmentSpec']) { + $object->setNetworkAttachmentSpec(null); + } + if (\array_key_exists('Resources', $data) && null !== $data['Resources']) { + $object->setResources($this->denormalizer->denormalize($data['Resources'], \Docker\API\Model\TaskSpecResources::class, 'json', $context)); + unset($data['Resources']); + } elseif (\array_key_exists('Resources', $data) && null === $data['Resources']) { + $object->setResources(null); + } + if (\array_key_exists('RestartPolicy', $data) && null !== $data['RestartPolicy']) { + $object->setRestartPolicy($this->denormalizer->denormalize($data['RestartPolicy'], \Docker\API\Model\TaskSpecRestartPolicy::class, 'json', $context)); + unset($data['RestartPolicy']); + } elseif (\array_key_exists('RestartPolicy', $data) && null === $data['RestartPolicy']) { + $object->setRestartPolicy(null); + } + if (\array_key_exists('Placement', $data) && null !== $data['Placement']) { + $object->setPlacement($this->denormalizer->denormalize($data['Placement'], \Docker\API\Model\TaskSpecPlacement::class, 'json', $context)); + unset($data['Placement']); + } elseif (\array_key_exists('Placement', $data) && null === $data['Placement']) { + $object->setPlacement(null); + } + if (\array_key_exists('ForceUpdate', $data) && null !== $data['ForceUpdate']) { + $object->setForceUpdate($data['ForceUpdate']); + unset($data['ForceUpdate']); + } elseif (\array_key_exists('ForceUpdate', $data) && null === $data['ForceUpdate']) { + $object->setForceUpdate(null); + } + if (\array_key_exists('Runtime', $data) && null !== $data['Runtime']) { + $object->setRuntime($data['Runtime']); + unset($data['Runtime']); + } elseif (\array_key_exists('Runtime', $data) && null === $data['Runtime']) { + $object->setRuntime(null); + } + if (\array_key_exists('Networks', $data) && null !== $data['Networks']) { + $values = []; + foreach ($data['Networks'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\NetworkAttachmentConfig::class, 'json', $context); + } + $object->setNetworks($values); + unset($data['Networks']); + } elseif (\array_key_exists('Networks', $data) && null === $data['Networks']) { + $object->setNetworks(null); + } + if (\array_key_exists('LogDriver', $data) && null !== $data['LogDriver']) { + $object->setLogDriver($this->denormalizer->denormalize($data['LogDriver'], \Docker\API\Model\TaskSpecLogDriver::class, 'json', $context)); + unset($data['LogDriver']); + } elseif (\array_key_exists('LogDriver', $data) && null === $data['LogDriver']) { + $object->setLogDriver(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('pluginSpec') && null !== $data->getPluginSpec()) { + $dataArray['PluginSpec'] = $this->normalizer->normalize($data->getPluginSpec(), 'json', $context); + } + if ($data->isInitialized('containerSpec') && null !== $data->getContainerSpec()) { + $dataArray['ContainerSpec'] = $this->normalizer->normalize($data->getContainerSpec(), 'json', $context); + } + if ($data->isInitialized('networkAttachmentSpec') && null !== $data->getNetworkAttachmentSpec()) { + $dataArray['NetworkAttachmentSpec'] = $this->normalizer->normalize($data->getNetworkAttachmentSpec(), 'json', $context); + } + if ($data->isInitialized('resources') && null !== $data->getResources()) { + $dataArray['Resources'] = $this->normalizer->normalize($data->getResources(), 'json', $context); + } + if ($data->isInitialized('restartPolicy') && null !== $data->getRestartPolicy()) { + $dataArray['RestartPolicy'] = $this->normalizer->normalize($data->getRestartPolicy(), 'json', $context); + } + if ($data->isInitialized('placement') && null !== $data->getPlacement()) { + $dataArray['Placement'] = $this->normalizer->normalize($data->getPlacement(), 'json', $context); + } + if ($data->isInitialized('forceUpdate') && null !== $data->getForceUpdate()) { + $dataArray['ForceUpdate'] = $data->getForceUpdate(); + } + if ($data->isInitialized('runtime') && null !== $data->getRuntime()) { + $dataArray['Runtime'] = $data->getRuntime(); + } + if ($data->isInitialized('networks') && null !== $data->getNetworks()) { + $values = []; + foreach ($data->getNetworks() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Networks'] = $values; + } + if ($data->isInitialized('logDriver') && null !== $data->getLogDriver()) { + $dataArray['LogDriver'] = $this->normalizer->normalize($data->getLogDriver(), 'json', $context); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementNormalizer.php new file mode 100644 index 000000000..81664c712 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementNormalizer.php @@ -0,0 +1,131 @@ +setConstraints($values); + unset($data['Constraints']); + } elseif (\array_key_exists('Constraints', $data) && null === $data['Constraints']) { + $object->setConstraints(null); + } + if (\array_key_exists('Preferences', $data) && null !== $data['Preferences']) { + $values_1 = []; + foreach ($data['Preferences'] as $value_1) { + $values_1[] = $this->denormalizer->denormalize($value_1, \Docker\API\Model\TaskSpecPlacementPreferencesItem::class, 'json', $context); + } + $object->setPreferences($values_1); + unset($data['Preferences']); + } elseif (\array_key_exists('Preferences', $data) && null === $data['Preferences']) { + $object->setPreferences(null); + } + if (\array_key_exists('MaxReplicas', $data) && null !== $data['MaxReplicas']) { + $object->setMaxReplicas($data['MaxReplicas']); + unset($data['MaxReplicas']); + } elseif (\array_key_exists('MaxReplicas', $data) && null === $data['MaxReplicas']) { + $object->setMaxReplicas(null); + } + if (\array_key_exists('Platforms', $data) && null !== $data['Platforms']) { + $values_2 = []; + foreach ($data['Platforms'] as $value_2) { + $values_2[] = $this->denormalizer->denormalize($value_2, \Docker\API\Model\Platform::class, 'json', $context); + } + $object->setPlatforms($values_2); + unset($data['Platforms']); + } elseif (\array_key_exists('Platforms', $data) && null === $data['Platforms']) { + $object->setPlatforms(null); + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('constraints') && null !== $data->getConstraints()) { + $values = []; + foreach ($data->getConstraints() as $value) { + $values[] = $value; + } + $dataArray['Constraints'] = $values; + } + if ($data->isInitialized('preferences') && null !== $data->getPreferences()) { + $values_1 = []; + foreach ($data->getPreferences() as $value_1) { + $values_1[] = $this->normalizer->normalize($value_1, 'json', $context); + } + $dataArray['Preferences'] = $values_1; + } + if ($data->isInitialized('maxReplicas') && null !== $data->getMaxReplicas()) { + $dataArray['MaxReplicas'] = $data->getMaxReplicas(); + } + if ($data->isInitialized('platforms') && null !== $data->getPlatforms()) { + $values_2 = []; + foreach ($data->getPlatforms() as $value_2) { + $values_2[] = $this->normalizer->normalize($value_2, 'json', $context); + } + $dataArray['Platforms'] = $values_2; + } + foreach ($data as $key => $value_3) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecPlacement::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementPreferencesItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementPreferencesItemNormalizer.php new file mode 100644 index 000000000..525a7422a --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementPreferencesItemNormalizer.php @@ -0,0 +1,80 @@ +setSpread($this->denormalizer->denormalize($data['Spread'], \Docker\API\Model\TaskSpecPlacementPreferencesItemSpread::class, 'json', $context)); + unset($data['Spread']); + } elseif (\array_key_exists('Spread', $data) && null === $data['Spread']) { + $object->setSpread(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('spread') && null !== $data->getSpread()) { + $dataArray['Spread'] = $this->normalizer->normalize($data->getSpread(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecPlacementPreferencesItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementPreferencesItemSpreadNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementPreferencesItemSpreadNormalizer.php new file mode 100644 index 000000000..a1e349c4b --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPlacementPreferencesItemSpreadNormalizer.php @@ -0,0 +1,80 @@ +setSpreadDescriptor($data['SpreadDescriptor']); + unset($data['SpreadDescriptor']); + } elseif (\array_key_exists('SpreadDescriptor', $data) && null === $data['SpreadDescriptor']) { + $object->setSpreadDescriptor(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('spreadDescriptor') && null !== $data->getSpreadDescriptor()) { + $dataArray['SpreadDescriptor'] = $data->getSpreadDescriptor(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecPlacementPreferencesItemSpread::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPluginSpecNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPluginSpecNormalizer.php new file mode 100644 index 000000000..d97ed8daf --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecPluginSpecNormalizer.php @@ -0,0 +1,118 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Remote', $data) && null !== $data['Remote']) { + $object->setRemote($data['Remote']); + unset($data['Remote']); + } elseif (\array_key_exists('Remote', $data) && null === $data['Remote']) { + $object->setRemote(null); + } + if (\array_key_exists('Disabled', $data) && null !== $data['Disabled']) { + $object->setDisabled($data['Disabled']); + unset($data['Disabled']); + } elseif (\array_key_exists('Disabled', $data) && null === $data['Disabled']) { + $object->setDisabled(null); + } + if (\array_key_exists('PluginPrivilege', $data) && null !== $data['PluginPrivilege']) { + $values = []; + foreach ($data['PluginPrivilege'] as $value) { + $values[] = $this->denormalizer->denormalize($value, \Docker\API\Model\PluginPrivilege::class, 'json', $context); + } + $object->setPluginPrivilege($values); + unset($data['PluginPrivilege']); + } elseif (\array_key_exists('PluginPrivilege', $data) && null === $data['PluginPrivilege']) { + $object->setPluginPrivilege(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('remote') && null !== $data->getRemote()) { + $dataArray['Remote'] = $data->getRemote(); + } + if ($data->isInitialized('disabled') && null !== $data->getDisabled()) { + $dataArray['Disabled'] = $data->getDisabled(); + } + if ($data->isInitialized('pluginPrivilege') && null !== $data->getPluginPrivilege()) { + $values = []; + foreach ($data->getPluginPrivilege() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['PluginPrivilege'] = $values; + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecPluginSpec::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecResourcesNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecResourcesNormalizer.php new file mode 100644 index 000000000..43a1d1875 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecResourcesNormalizer.php @@ -0,0 +1,89 @@ +setLimits($this->denormalizer->denormalize($data['Limits'], \Docker\API\Model\Limit::class, 'json', $context)); + unset($data['Limits']); + } elseif (\array_key_exists('Limits', $data) && null === $data['Limits']) { + $object->setLimits(null); + } + if (\array_key_exists('Reservations', $data) && null !== $data['Reservations']) { + $object->setReservations($this->denormalizer->denormalize($data['Reservations'], \Docker\API\Model\ResourceObject::class, 'json', $context)); + unset($data['Reservations']); + } elseif (\array_key_exists('Reservations', $data) && null === $data['Reservations']) { + $object->setReservations(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('limits') && null !== $data->getLimits()) { + $dataArray['Limits'] = $this->normalizer->normalize($data->getLimits(), 'json', $context); + } + if ($data->isInitialized('reservations') && null !== $data->getReservations()) { + $dataArray['Reservations'] = $this->normalizer->normalize($data->getReservations(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecResources::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecRestartPolicyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecRestartPolicyNormalizer.php new file mode 100644 index 000000000..8dc2cd39d --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskSpecRestartPolicyNormalizer.php @@ -0,0 +1,107 @@ +setCondition($data['Condition']); + unset($data['Condition']); + } elseif (\array_key_exists('Condition', $data) && null === $data['Condition']) { + $object->setCondition(null); + } + if (\array_key_exists('Delay', $data) && null !== $data['Delay']) { + $object->setDelay($data['Delay']); + unset($data['Delay']); + } elseif (\array_key_exists('Delay', $data) && null === $data['Delay']) { + $object->setDelay(null); + } + if (\array_key_exists('MaxAttempts', $data) && null !== $data['MaxAttempts']) { + $object->setMaxAttempts($data['MaxAttempts']); + unset($data['MaxAttempts']); + } elseif (\array_key_exists('MaxAttempts', $data) && null === $data['MaxAttempts']) { + $object->setMaxAttempts(null); + } + if (\array_key_exists('Window', $data) && null !== $data['Window']) { + $object->setWindow($data['Window']); + unset($data['Window']); + } elseif (\array_key_exists('Window', $data) && null === $data['Window']) { + $object->setWindow(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('condition') && null !== $data->getCondition()) { + $dataArray['Condition'] = $data->getCondition(); + } + if ($data->isInitialized('delay') && null !== $data->getDelay()) { + $dataArray['Delay'] = $data->getDelay(); + } + if ($data->isInitialized('maxAttempts') && null !== $data->getMaxAttempts()) { + $dataArray['MaxAttempts'] = $data->getMaxAttempts(); + } + if ($data->isInitialized('window') && null !== $data->getWindow()) { + $dataArray['Window'] = $data->getWindow(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskSpecRestartPolicy::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskStatusNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskStatusNormalizer.php new file mode 100644 index 000000000..4f78e2445 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/TaskStatusNormalizer.php @@ -0,0 +1,125 @@ +setTimestamp($data['Timestamp']); + unset($data['Timestamp']); + } elseif (\array_key_exists('Timestamp', $data) && null === $data['Timestamp']) { + $object->setTimestamp(null); + } + if (\array_key_exists('State', $data) && null !== $data['State']) { + $object->setState($data['State']); + unset($data['State']); + } elseif (\array_key_exists('State', $data) && null === $data['State']) { + $object->setState(null); + } + if (\array_key_exists('Message', $data) && null !== $data['Message']) { + $object->setMessage($data['Message']); + unset($data['Message']); + } elseif (\array_key_exists('Message', $data) && null === $data['Message']) { + $object->setMessage(null); + } + if (\array_key_exists('Err', $data) && null !== $data['Err']) { + $object->setErr($data['Err']); + unset($data['Err']); + } elseif (\array_key_exists('Err', $data) && null === $data['Err']) { + $object->setErr(null); + } + if (\array_key_exists('ContainerStatus', $data) && null !== $data['ContainerStatus']) { + $object->setContainerStatus($this->denormalizer->denormalize($data['ContainerStatus'], \Docker\API\Model\ContainerStatus::class, 'json', $context)); + unset($data['ContainerStatus']); + } elseif (\array_key_exists('ContainerStatus', $data) && null === $data['ContainerStatus']) { + $object->setContainerStatus(null); + } + if (\array_key_exists('PortStatus', $data) && null !== $data['PortStatus']) { + $object->setPortStatus($this->denormalizer->denormalize($data['PortStatus'], \Docker\API\Model\PortStatus::class, 'json', $context)); + unset($data['PortStatus']); + } elseif (\array_key_exists('PortStatus', $data) && null === $data['PortStatus']) { + $object->setPortStatus(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('timestamp') && null !== $data->getTimestamp()) { + $dataArray['Timestamp'] = $data->getTimestamp(); + } + if ($data->isInitialized('state') && null !== $data->getState()) { + $dataArray['State'] = $data->getState(); + } + if ($data->isInitialized('message') && null !== $data->getMessage()) { + $dataArray['Message'] = $data->getMessage(); + } + if ($data->isInitialized('err') && null !== $data->getErr()) { + $dataArray['Err'] = $data->getErr(); + } + if ($data->isInitialized('containerStatus') && null !== $data->getContainerStatus()) { + $dataArray['ContainerStatus'] = $this->normalizer->normalize($data->getContainerStatus(), 'json', $context); + } + if ($data->isInitialized('portStatus') && null !== $data->getPortStatus()) { + $dataArray['PortStatus'] = $this->normalizer->normalize($data->getPortStatus(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\TaskStatus::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/ThrottleDeviceNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ThrottleDeviceNormalizer.php new file mode 100644 index 000000000..6226b6a09 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/ThrottleDeviceNormalizer.php @@ -0,0 +1,89 @@ +setPath($data['Path']); + unset($data['Path']); + } elseif (\array_key_exists('Path', $data) && null === $data['Path']) { + $object->setPath(null); + } + if (\array_key_exists('Rate', $data) && null !== $data['Rate']) { + $object->setRate($data['Rate']); + unset($data['Rate']); + } elseif (\array_key_exists('Rate', $data) && null === $data['Rate']) { + $object->setRate(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('path') && null !== $data->getPath()) { + $dataArray['Path'] = $data->getPath(); + } + if ($data->isInitialized('rate') && null !== $data->getRate()) { + $dataArray['Rate'] = $data->getRate(); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\ThrottleDevice::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeCreateOptionsNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeCreateOptionsNormalizer.php new file mode 100644 index 000000000..d3782f6a2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeCreateOptionsNormalizer.php @@ -0,0 +1,132 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('DriverOpts', $data) && null !== $data['DriverOpts']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['DriverOpts'] as $key => $value) { + $values[$key] = $value; + } + $object->setDriverOpts($values); + unset($data['DriverOpts']); + } elseif (\array_key_exists('DriverOpts', $data) && null === $data['DriverOpts']) { + $object->setDriverOpts(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $object->setLabels($values_1); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('ClusterVolumeSpec', $data) && null !== $data['ClusterVolumeSpec']) { + $object->setClusterVolumeSpec($this->denormalizer->denormalize($data['ClusterVolumeSpec'], \Docker\API\Model\ClusterVolumeSpec::class, 'json', $context)); + unset($data['ClusterVolumeSpec']); + } elseif (\array_key_exists('ClusterVolumeSpec', $data) && null === $data['ClusterVolumeSpec']) { + $object->setClusterVolumeSpec(null); + } + foreach ($data as $key_2 => $value_2) { + if (preg_match('/.*/', (string) $key_2)) { + $object[$key_2] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('name') && null !== $data->getName()) { + $dataArray['Name'] = $data->getName(); + } + if ($data->isInitialized('driver') && null !== $data->getDriver()) { + $dataArray['Driver'] = $data->getDriver(); + } + if ($data->isInitialized('driverOpts') && null !== $data->getDriverOpts()) { + $values = []; + foreach ($data->getDriverOpts() as $key => $value) { + $values[$key] = $value; + } + $dataArray['DriverOpts'] = $values; + } + if ($data->isInitialized('labels') && null !== $data->getLabels()) { + $values_1 = []; + foreach ($data->getLabels() as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $dataArray['Labels'] = $values_1; + } + if ($data->isInitialized('clusterVolumeSpec') && null !== $data->getClusterVolumeSpec()) { + $dataArray['ClusterVolumeSpec'] = $this->normalizer->normalize($data->getClusterVolumeSpec(), 'json', $context); + } + foreach ($data as $key_2 => $value_2) { + if (preg_match('/.*/', (string) $key_2)) { + $dataArray[$key_2] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\VolumeCreateOptions::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeListResponseNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeListResponseNormalizer.php new file mode 100644 index 000000000..bfe73c742 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeListResponseNormalizer.php @@ -0,0 +1,105 @@ +denormalizer->denormalize($value, \Docker\API\Model\Volume::class, 'json', $context); + } + $object->setVolumes($values); + unset($data['Volumes']); + } elseif (\array_key_exists('Volumes', $data) && null === $data['Volumes']) { + $object->setVolumes(null); + } + if (\array_key_exists('Warnings', $data) && null !== $data['Warnings']) { + $values_1 = []; + foreach ($data['Warnings'] as $value_1) { + $values_1[] = $value_1; + } + $object->setWarnings($values_1); + unset($data['Warnings']); + } elseif (\array_key_exists('Warnings', $data) && null === $data['Warnings']) { + $object->setWarnings(null); + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_2; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('volumes') && null !== $data->getVolumes()) { + $values = []; + foreach ($data->getVolumes() as $value) { + $values[] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Volumes'] = $values; + } + if ($data->isInitialized('warnings') && null !== $data->getWarnings()) { + $values_1 = []; + foreach ($data->getWarnings() as $value_1) { + $values_1[] = $value_1; + } + $dataArray['Warnings'] = $values_1; + } + foreach ($data as $key => $value_2) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_2; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\VolumeListResponse::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeNormalizer.php new file mode 100644 index 000000000..56d563cd9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeNormalizer.php @@ -0,0 +1,173 @@ +setName($data['Name']); + unset($data['Name']); + } elseif (\array_key_exists('Name', $data) && null === $data['Name']) { + $object->setName(null); + } + if (\array_key_exists('Driver', $data) && null !== $data['Driver']) { + $object->setDriver($data['Driver']); + unset($data['Driver']); + } elseif (\array_key_exists('Driver', $data) && null === $data['Driver']) { + $object->setDriver(null); + } + if (\array_key_exists('Mountpoint', $data) && null !== $data['Mountpoint']) { + $object->setMountpoint($data['Mountpoint']); + unset($data['Mountpoint']); + } elseif (\array_key_exists('Mountpoint', $data) && null === $data['Mountpoint']) { + $object->setMountpoint(null); + } + if (\array_key_exists('CreatedAt', $data) && null !== $data['CreatedAt']) { + $object->setCreatedAt($data['CreatedAt']); + unset($data['CreatedAt']); + } elseif (\array_key_exists('CreatedAt', $data) && null === $data['CreatedAt']) { + $object->setCreatedAt(null); + } + if (\array_key_exists('Status', $data) && null !== $data['Status']) { + $values = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Status'] as $key => $value) { + $values[$key] = $this->denormalizer->denormalize($value, \Docker\API\Model\VolumeStatusItem::class, 'json', $context); + } + $object->setStatus($values); + unset($data['Status']); + } elseif (\array_key_exists('Status', $data) && null === $data['Status']) { + $object->setStatus(null); + } + if (\array_key_exists('Labels', $data) && null !== $data['Labels']) { + $values_1 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Labels'] as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $object->setLabels($values_1); + unset($data['Labels']); + } elseif (\array_key_exists('Labels', $data) && null === $data['Labels']) { + $object->setLabels(null); + } + if (\array_key_exists('Scope', $data) && null !== $data['Scope']) { + $object->setScope($data['Scope']); + unset($data['Scope']); + } elseif (\array_key_exists('Scope', $data) && null === $data['Scope']) { + $object->setScope(null); + } + if (\array_key_exists('ClusterVolume', $data) && null !== $data['ClusterVolume']) { + $object->setClusterVolume($this->denormalizer->denormalize($data['ClusterVolume'], \Docker\API\Model\ClusterVolume::class, 'json', $context)); + unset($data['ClusterVolume']); + } elseif (\array_key_exists('ClusterVolume', $data) && null === $data['ClusterVolume']) { + $object->setClusterVolume(null); + } + if (\array_key_exists('Options', $data) && null !== $data['Options']) { + $values_2 = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); + foreach ($data['Options'] as $key_2 => $value_2) { + $values_2[$key_2] = $value_2; + } + $object->setOptions($values_2); + unset($data['Options']); + } elseif (\array_key_exists('Options', $data) && null === $data['Options']) { + $object->setOptions(null); + } + if (\array_key_exists('UsageData', $data) && null !== $data['UsageData']) { + $object->setUsageData($this->denormalizer->denormalize($data['UsageData'], \Docker\API\Model\VolumeUsageData::class, 'json', $context)); + unset($data['UsageData']); + } elseif (\array_key_exists('UsageData', $data) && null === $data['UsageData']) { + $object->setUsageData(null); + } + foreach ($data as $key_3 => $value_3) { + if (preg_match('/.*/', (string) $key_3)) { + $object[$key_3] = $value_3; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Name'] = $data->getName(); + $dataArray['Driver'] = $data->getDriver(); + $dataArray['Mountpoint'] = $data->getMountpoint(); + if ($data->isInitialized('createdAt') && null !== $data->getCreatedAt()) { + $dataArray['CreatedAt'] = $data->getCreatedAt(); + } + if ($data->isInitialized('status') && null !== $data->getStatus()) { + $values = []; + foreach ($data->getStatus() as $key => $value) { + $values[$key] = $this->normalizer->normalize($value, 'json', $context); + } + $dataArray['Status'] = $values; + } + $values_1 = []; + foreach ($data->getLabels() as $key_1 => $value_1) { + $values_1[$key_1] = $value_1; + } + $dataArray['Labels'] = $values_1; + $dataArray['Scope'] = $data->getScope(); + if ($data->isInitialized('clusterVolume') && null !== $data->getClusterVolume()) { + $dataArray['ClusterVolume'] = $this->normalizer->normalize($data->getClusterVolume(), 'json', $context); + } + $values_2 = []; + foreach ($data->getOptions() as $key_2 => $value_2) { + $values_2[$key_2] = $value_2; + } + $dataArray['Options'] = $values_2; + if ($data->isInitialized('usageData') && null !== $data->getUsageData()) { + $dataArray['UsageData'] = $this->normalizer->normalize($data->getUsageData(), 'json', $context); + } + foreach ($data as $key_3 => $value_3) { + if (preg_match('/.*/', (string) $key_3)) { + $dataArray[$key_3] = $value_3; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\Volume::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeStatusItemNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeStatusItemNormalizer.php new file mode 100644 index 000000000..b0cfc6039 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeStatusItemNormalizer.php @@ -0,0 +1,71 @@ + $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\VolumeStatusItem::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeUsageDataNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeUsageDataNormalizer.php new file mode 100644 index 000000000..5fdae9008 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumeUsageDataNormalizer.php @@ -0,0 +1,85 @@ +setSize($data['Size']); + unset($data['Size']); + } elseif (\array_key_exists('Size', $data) && null === $data['Size']) { + $object->setSize(null); + } + if (\array_key_exists('RefCount', $data) && null !== $data['RefCount']) { + $object->setRefCount($data['RefCount']); + unset($data['RefCount']); + } elseif (\array_key_exists('RefCount', $data) && null === $data['RefCount']) { + $object->setRefCount(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + $dataArray['Size'] = $data->getSize(); + $dataArray['RefCount'] = $data->getRefCount(); + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\VolumeUsageData::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumesNamePutBodyNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumesNamePutBodyNormalizer.php new file mode 100644 index 000000000..ee9fc7208 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumesNamePutBodyNormalizer.php @@ -0,0 +1,80 @@ +setSpec($this->denormalizer->denormalize($data['Spec'], \Docker\API\Model\ClusterVolumeSpec::class, 'json', $context)); + unset($data['Spec']); + } elseif (\array_key_exists('Spec', $data) && null === $data['Spec']) { + $object->setSpec(null); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('spec') && null !== $data->getSpec()) { + $dataArray['Spec'] = $this->normalizer->normalize($data->getSpec(), 'json', $context); + } + foreach ($data as $key => $value) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\VolumesNamePutBody::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumesPrunePostResponse200Normalizer.php b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumesPrunePostResponse200Normalizer.php new file mode 100644 index 000000000..f4b2f7732 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Normalizer/VolumesPrunePostResponse200Normalizer.php @@ -0,0 +1,97 @@ +setVolumesDeleted($values); + unset($data['VolumesDeleted']); + } elseif (\array_key_exists('VolumesDeleted', $data) && null === $data['VolumesDeleted']) { + $object->setVolumesDeleted(null); + } + if (\array_key_exists('SpaceReclaimed', $data) && null !== $data['SpaceReclaimed']) { + $object->setSpaceReclaimed($data['SpaceReclaimed']); + unset($data['SpaceReclaimed']); + } elseif (\array_key_exists('SpaceReclaimed', $data) && null === $data['SpaceReclaimed']) { + $object->setSpaceReclaimed(null); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $object[$key] = $value_1; + } + } + + return $object; + } + + public function normalize(mixed $data, ?string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null + { + $dataArray = []; + if ($data->isInitialized('volumesDeleted') && null !== $data->getVolumesDeleted()) { + $values = []; + foreach ($data->getVolumesDeleted() as $value) { + $values[] = $value; + } + $dataArray['VolumesDeleted'] = $values; + } + if ($data->isInitialized('spaceReclaimed') && null !== $data->getSpaceReclaimed()) { + $dataArray['SpaceReclaimed'] = $data->getSpaceReclaimed(); + } + foreach ($data as $key => $value_1) { + if (preg_match('/.*/', (string) $key)) { + $dataArray[$key] = $value_1; + } + } + + return $dataArray; + } + + public function getSupportedTypes(?string $format = null): array + { + return [\Docker\API\Model\VolumesPrunePostResponse200::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/BaseEndpoint.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/BaseEndpoint.php new file mode 100644 index 000000000..cc02bbf84 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/BaseEndpoint.php @@ -0,0 +1,84 @@ +getQueryOptionsResolver()->resolve($this->queryParameters); + $optionsResolved = array_map(static fn ($value) => $value ?? '', $optionsResolved); + + return http_build_query($optionsResolved, '', '&', \PHP_QUERY_RFC3986); + } + + public function getHeaders(array $baseHeaders = []): array + { + return array_merge($this->getExtraHeaders(), $baseHeaders, $this->getHeadersOptionsResolver()->resolve($this->headerParameters)); + } + + protected function getQueryOptionsResolver(): OptionsResolver + { + return new OptionsResolver(); + } + + protected function getHeadersOptionsResolver(): OptionsResolver + { + return new OptionsResolver(); + } + + // ---------------------------------------------------------------------------------------------------- + // Used for OpenApi2 compatibility + protected function getFormBody(): array + { + return [['Content-Type' => ['application/x-www-form-urlencoded']], http_build_query($this->getFormOptionsResolver()->resolve($this->formParameters))]; + } + + protected function getMultipartBody($streamFactory = null): array + { + $bodyBuilder = new MultipartStreamBuilder($streamFactory); + $formParameters = $this->getFormOptionsResolver()->resolve($this->formParameters); + foreach ($formParameters as $key => $value) { + $bodyBuilder->addResource($key, $value); + } + + return [['Content-Type' => ['multipart/form-data; boundary="'.($bodyBuilder->getBoundary().'"')]], $bodyBuilder->build()]; + } + + protected function getFormOptionsResolver(): OptionsResolver + { + return new OptionsResolver(); + } + + protected function getSerializedBody(SerializerInterface $serializer): array + { + return [['Content-Type' => ['application/json']], $serializer->serialize($this->body, 'json')]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/Client.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/Client.php new file mode 100644 index 000000000..12eb73163 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/Client.php @@ -0,0 +1,80 @@ +httpClient = $httpClient; + $this->requestFactory = $requestFactory; + $this->serializer = $serializer; + $this->streamFactory = $streamFactory; + } + + public function executeEndpoint(Endpoint $endpoint, string $fetch = self::FETCH_OBJECT) + { + if (self::FETCH_RESPONSE === $fetch) { + trigger_deprecation('jane-php/open-api-common', '7.3', 'Using %s::%s method with $fetch parameter equals to response is deprecated, use %s::%s instead.', __CLASS__, __METHOD__, __CLASS__, 'executeRawEndpoint'); + + return $this->executeRawEndpoint($endpoint); + } + + return $endpoint->parseResponse($this->processEndpoint($endpoint), $this->serializer, $fetch); + } + + public function executeRawEndpoint(Endpoint $endpoint): ResponseInterface + { + return $this->processEndpoint($endpoint); + } + + private function processEndpoint(Endpoint $endpoint): ResponseInterface + { + [$bodyHeaders, $body] = $endpoint->getBody($this->serializer, $this->streamFactory); + $queryString = $endpoint->getQueryString(); + $uriGlue = !str_contains($endpoint->getUri(), '?') ? '?' : '&'; + $uri = '' !== $queryString ? $endpoint->getUri().$uriGlue.$queryString : $endpoint->getUri(); + $request = $this->requestFactory->createRequest($endpoint->getMethod(), $uri); + if ($body) { + if ($body instanceof StreamInterface) { + $request = $request->withBody($body); + } elseif (\is_resource($body)) { + $request = $request->withBody($this->streamFactory->createStreamFromResource($body)); + } elseif (\strlen($body) <= 4000 && @file_exists($body)) { + // more than 4096 chars will trigger an error + $request = $request->withBody($this->streamFactory->createStreamFromFile($body)); + } else { + $request = $request->withBody($this->streamFactory->createStream($body)); + } + } + foreach ($endpoint->getHeaders($bodyHeaders) as $name => $value) { + $request = $request->withHeader($name, !\is_bool($value) ? $value : ($value ? 'true' : 'false')); + } + if (\count($endpoint->getAuthenticationScopes()) > 0) { + $scopes = []; + foreach ($endpoint->getAuthenticationScopes() as $scope) { + $scopes[] = $scope; + } + $request = $request->withHeader(AuthenticationRegistry::SCOPES_HEADER, $scopes); + } + + return $this->httpClient->sendRequest($request); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/CustomQueryResolver.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/CustomQueryResolver.php new file mode 100644 index 000000000..5586812f2 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Client/CustomQueryResolver.php @@ -0,0 +1,12 @@ +hasHeader('Content-Type') ? current($response->getHeader('Content-Type')) : null; + + return $this->transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/CheckArray.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/CheckArray.php new file mode 100644 index 000000000..74ad5247e --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/CheckArray.php @@ -0,0 +1,13 @@ + is_numeric($key), \ARRAY_FILTER_USE_KEY)) === \count($array); + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ReferenceNormalizer.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ReferenceNormalizer.php new file mode 100644 index 000000000..eb0ab50fb --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ReferenceNormalizer.php @@ -0,0 +1,29 @@ +getReferenceUri(); + + return $ref; + } + + public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool + { + return $data instanceof Reference; + } + + public function getSupportedTypes(?string $format): array + { + return [Reference::class => false]; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ValidationException.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ValidationException.php new file mode 100644 index 000000000..c9c057073 --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ValidationException.php @@ -0,0 +1,26 @@ +violationList = $violationList; + parent::__construct(\sprintf('Model validation failed with %d errors.', $violationList->count()), 400); + } + + public function getViolationList(): ConstraintViolationListInterface + { + return $this->violationList; + } +} diff --git a/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ValidatorTrait.php b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ValidatorTrait.php new file mode 100644 index 000000000..771678b5f --- /dev/null +++ b/app/vendor/beluga-php/docker-php-api/src/Runtime/Normalizer/ValidatorTrait.php @@ -0,0 +1,20 @@ +validate($data, $constraint); + if ($violations->count() > 0) { + throw new ValidationException($violations); + } + } +} diff --git a/app/vendor/beluga-php/docker-php/.editorconfig b/app/vendor/beluga-php/docker-php/.editorconfig new file mode 100644 index 000000000..d95b72a20 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +trim_trailing_whitespace = true + +# JSON files +[*.json] +indent_style = space +indent_size = 4 diff --git a/app/vendor/beluga-php/docker-php/.github/FUNDING.yml b/app/vendor/beluga-php/docker-php/.github/FUNDING.yml new file mode 100644 index 000000000..d018c1530 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.github/FUNDING.yml @@ -0,0 +1,5 @@ +# These are supported funding model platforms + +github: flavioheleno +patreon: flavioheleno +custom: "https://www.buymeacoffee.com/flavioheleno" diff --git a/app/vendor/beluga-php/docker-php/.github/dependabot.yml b/app/vendor/beluga-php/docker-php/.github/dependabot.yml new file mode 100644 index 000000000..e5fae30f4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + # Maintain dependencies for PHP Packages + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "daily" diff --git a/app/vendor/beluga-php/docker-php/.github/workflows/continuous-integration.yml b/app/vendor/beluga-php/docker-php/.github/workflows/continuous-integration.yml new file mode 100644 index 000000000..854f94f74 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.github/workflows/continuous-integration.yml @@ -0,0 +1,54 @@ +name: "Continuous Integration" + +on: + push: + paths-ignore: + - "doc/**" + pull_request: + paths-ignore: + - "doc/**" + +jobs: + phpunit: + name: PHP ${{ matrix.php-version }} (${{ matrix.dependency-versions }}) + + runs-on: ubuntu-latest + continue-on-error: ${{ matrix.experimental }} + + strategy: + fail-fast: false + matrix: + php-version: + - "8.1" + - "8.2" + - "8.3" + - "8.4" + - "8.5" + dependency-versions: [lowest, highest] + experimental: [false] + + steps: + - name: Repository checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 + with: + php-version: ${{ matrix.php-version }} + tools: composer:v2 + coverage: pcov + + - name: Validate composer.json and composer.lock + run: composer validate --strict + + - name: Install dependencies + uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 + with: + dependency-versions: ${{ matrix.dependency-versions }} + composer-options: ${{ matrix.composer-options }} + + - name: Pull the docker image used by the tests. + run: docker pull busybox:latest + + - name: Run PHPUnit test suite + run: composer run-script test-ci diff --git a/app/vendor/beluga-php/docker-php/.github/workflows/static-analysis.yml b/app/vendor/beluga-php/docker-php/.github/workflows/static-analysis.yml new file mode 100644 index 000000000..43f70ce66 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.github/workflows/static-analysis.yml @@ -0,0 +1,39 @@ +name: "Static Analysis" + +on: + push: + paths-ignore: + - 'doc/**' + - '.github/**' + pull_request: + paths-ignore: + - 'doc/**' + - '.github/**' + +jobs: + phpstan: + name: PHPStan + + runs-on: ubuntu-latest + + steps: + - name: Repository checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 + with: + php-version: 8.1 + tools: composer:v2 + coverage: none + + - name: Validate composer.json and composer.lock + run: composer validate --strict + + - name: Install dependencies + uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 + with: + dependency-versions: lowest + + - name: Run PHPStan + run: composer run-script phpstan -- --no-progress diff --git a/app/vendor/beluga-php/docker-php/.gitignore b/app/vendor/beluga-php/docker-php/.gitignore new file mode 100644 index 000000000..8d49b5514 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.gitignore @@ -0,0 +1,6 @@ +vendor/ +bin/ +composer.lock +.vagrant +/.php-cs-fixer.cache +/.phpunit.result.cache diff --git a/app/vendor/beluga-php/docker-php/.php-cs-fixer.php b/app/vendor/beluga-php/docker-php/.php-cs-fixer.php new file mode 100644 index 000000000..3bde3b9fc --- /dev/null +++ b/app/vendor/beluga-php/docker-php/.php-cs-fixer.php @@ -0,0 +1,47 @@ +in([ + __DIR__.'/src', + __DIR__.'/tests', + ]) + ->notPath('/fixtures/') +; + +$config = new \PhpCsFixer\Config(); +return $config + ->setRules([ + '@Symfony' => true, + '@Symfony:risky' => true, + '@PHP56Migration:risky' => true, + '@PHP70Migration' => true, + '@PHP70Migration:risky' => true, + '@PHP71Migration' => true, + '@PHP71Migration:risky' => true, + '@PHP73Migration' => true, + '@PHP74Migration' => true, + '@PHP74Migration:risky' => true, + '@PHP80Migration' => true, + '@PHP80Migration:risky' => true, + '@PHPUnit75Migration:risky' => true, + '@PHPUnit84Migration:risky' => true, + 'array_syntax' => [ + 'syntax' => 'short' + ], + 'combine_consecutive_unsets' => true, + 'declare_strict_types' => true, + 'linebreak_after_opening_tag' => true, + 'modernize_types_casting' => true, + 'native_function_invocation' => true, + 'no_php4_constructor' => true, + 'ordered_imports' => true, + 'php_unit_strict' => true, + 'phpdoc_order' => true, + 'strict_comparison' => true, + 'strict_param' => true, + ]) + ->setRiskyAllowed(true) + ->setIndent(' ') + ->setLineEnding("\n") + ->setFinder($finder) +; diff --git a/app/vendor/beluga-php/docker-php/CHANGELOG.md b/app/vendor/beluga-php/docker-php/CHANGELOG.md new file mode 100644 index 000000000..b3b5716d6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +## 2.0 + + - [BC Break] All endpoints have new names and potentially new parameters + - Add async (with amp artax) support + - It now uses the official swagger specification of docker + - Allow to use from 1.25 to 1.36 api version of Docker + - Add support for more keywords in ContextBuilder + - Lot of bug fixes + +## 1.24.0 - 08/08/2014 + + - [BC Break] Listing containers now return `ContainerInfo` object (instead of `ContainerConfig`) diff --git a/app/vendor/beluga-php/docker-php/CONTRIBUTING.md b/app/vendor/beluga-php/docker-php/CONTRIBUTING.md new file mode 100644 index 000000000..d25bfef16 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/CONTRIBUTING.md @@ -0,0 +1,94 @@ +# Contributing + +If you're here, you would like to contribute to this repository and you're really welcome! + + +## Bug reports + +If you find a bug or a documentation issue, please report it or even better: fix it :). If you report it, +please be as precise as possible. Here is a little list of required information: + + - Precise description of the bug + - Details of your environment (for example: OS, PHP version, installed extensions) + - Backtrace which might help identifying the bug + + +## Feature requests + +If you think a feature is missing, please report it or even better: implement it :). If you report it, describe the more +precisely what you would like to see implemented and we will discuss what is the best approach for it. If you can do +some research before submitting it and link the resources to your description, you're awesome! It will allow us to more +easily understood/implement it. + + +## Sending a Pull Request + +If you're here, you are going to fix a bug or implement a feature and you're the best! To do it, first fork the repository, clone it and create a new branch with the following commands: + +``` bash +$ git clone git@github.com:your-name/docker-php.git +$ git checkout -b feature-or-bug-fix-description +``` + +Then install the dependencies through [Composer](https://getcomposer.org/): + +``` bash +$ composer install +``` + +Write code and tests. When you are ready, run the tests. (This is usually [PHPUnit](http://phpunit.de/) or [PHPSpec](http://phpspec.net/)) + +``` bash +$ composer test +``` + +When you are ready with the code, tested it and documented it, you can commit and push it with the following commands: + +``` bash +$ git commit -m "Feature or bug fix description" +$ git push origin feature-or-bug-fix-description +``` + +**Note:** Please write your commit messages in the imperative and follow the [guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) for clear and concise messages. + +Then [create a pull request](https://help.github.com/articles/creating-a-pull-request/) on GitHub. + +Please make sure that each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting with the following commands (here, we assume you would like to squash 3 commits in a single one): + +``` bash +$ git rebase -i HEAD~3 +``` + +If your branch conflicts with the master branch, you will need to rebase and repush it with the following commands: + +``` bash +$ git remote add upstream git@github.com:docker-php/docker-php.git +$ git pull --rebase upstream master +$ git push -f origin feature-or-bug-fix-description +``` + +## Internal + +This library consist, for the most part, of auto generated code where the reference is an [Open API Specification (Swagger v2)](https://openapis.org/). In order to modify API +endpoint or requested / returned object, you will need to update the `docker-swagger.json` file instead of files in the `generated` directory. + +There is a bash script at the root of this repository `generate.sh` which helps launching the command to generate files according to the +specification. + +When changing the specification don't hesitate to do 2 commits for better reading: + + * One with only changes to the specification + * One with changes on the generated code + +Having this also helps backporting changes to the specification in previous versions. + + +## Coding standard + +This repository follows the [PSR-2 standard](http://www.php-fig.org/psr/psr-2/) and so, if you want to contribute, +you must follow these rules. + + +## Semver + +We are trying to follow [semver](http://semver.org/). When you are making BC breaking changes, please let us know why you think it is important. In this case, your patch can only be included in the next major version. diff --git a/app/vendor/beluga-php/docker-php/LICENSE b/app/vendor/beluga-php/docker-php/LICENSE new file mode 100644 index 000000000..b5b4ca44b --- /dev/null +++ b/app/vendor/beluga-php/docker-php/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013 Geoffrey Bachelet and +contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/app/vendor/beluga-php/docker-php/README.md b/app/vendor/beluga-php/docker-php/README.md new file mode 100644 index 000000000..51495e03b --- /dev/null +++ b/app/vendor/beluga-php/docker-php/README.md @@ -0,0 +1,60 @@ +# Docker PHP + +**Docker PHP** (for lack of a better name) is a [Docker](http://docker.com/) client written in PHP. +This library aim to reach 100% API support of the Docker Engine. + +The test suite currently passes against Docker Remote API v1.25 to v1.36. + +[![Documentation Status](https://readthedocs.org/projects/docker-php/badge/?version=latest)](http://docker-php.readthedocs.org/en/latest/) +[![Latest Version](https://img.shields.io/github/release/beluga-php/docker-php.svg?style=flat-square)](https://github.com/beluga-php/docker-php/releases) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE) +[![Total Downloads](https://img.shields.io/packagist/dt/beluga-php/docker-php.svg?style=flat-square)](https://packagist.org/packages/beluga-php/docker-php) + +## Installation + +The recommended way to install Docker PHP is of course to use [Composer](http://getcomposer.org/): + +```bash +composer require beluga-php/docker-php +``` + +## Docker API Version + +By default it will use the last version of docker api available, if you want to fix a version (like 1.41) you can add this +requirement to composer: + +```bash +composer require "beluga-php/docker-php-api:6.1.41.*" +``` + +## Usage + +See [the documentation](http://docker-php.readthedocs.org/en/latest/). + +## Unit Tests + +Setup the test suite using [Composer](http://getcomposer.org/) if not already done: + +``` +$ composer install --dev +``` + +Run it using [PHPUnit](http://phpunit.de/): + +``` +$ composer test +``` + +## Contributing + +Please see [CONTRIBUTING](CONTRIBUTING.md) for details. + +## Credits + +This README heavily inspired by [willdurand/Negotiation](https://github.com/willdurand/Negotiation) by @willdurand. This guy is pretty awesome. + +This library is a fork of the original [docker-php/docker-php](https://github.com/docker-php/docker-php), created by [Geoffrey Bachelet](https://github.com/ubermuda) and [Joel Wurtz](https://github.com/joelwurtz). + +## License + +The MIT License (MIT). Please see [License File](LICENSE) for more information. diff --git a/app/vendor/beluga-php/docker-php/composer.json b/app/vendor/beluga-php/docker-php/composer.json new file mode 100644 index 000000000..eca91be79 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/composer.json @@ -0,0 +1,90 @@ +{ + "name": "beluga-php/docker-php", + "description": "A Docker PHP client", + "license": "MIT", + "type": "library", + "funding": [ + { + "type": "github", + "url": "https://github.com/flavioheleno" + } + ], + "require": { + "php": ">=8.1", + "beluga-php/docker-php-api": "7.1.45.*", + "nyholm/psr7": "^1.8", + "php-http/client-common": "^2.7", + "php-http/discovery": "^1.19", + "php-http/socket-client": "^2.3", + "psr/http-message": "^2.0", + "symfony/filesystem": "^6.3 || ^7.0 || ^8.0", + "symfony/process": "^6.3 || ^7.0 || ^8.0", + "symfony/serializer": "^6.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.42", + "friendsofphp/php-cs-fixer": "^3.8", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5.46", + "psy/psysh": "^0.12.8", + "roave/security-advisories": "dev-latest" + }, + "conflict": { + "docker-php/docker-php": "*", + "nikic/php-parser": "<4.13", + "php-http/message": "<1.15" + }, + "minimum-stability": "dev", + "prefer-stable": true, + "autoload": { + "psr-4": { + "Docker\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Docker\\Tests\\": "tests/" + } + }, + "config": { + "allow-plugins": { + "ergebnis/composer-normalize": true, + "php-http/discovery": false + }, + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "extra": { + "branch-alias": { + "1.41": "1.41.x-dev", + "1.42": "1.42.x-dev", + "1.43": "1.43.x-dev", + "1.44": "1.44.x-dev", + "dev-master": "1.45.x-dev" + } + }, + "scripts": { + "console": "vendor/bin/psysh", + "lint": "vendor/bin/parallel-lint --exclude vendor .", + "php-cs-fixer": "vendor/bin/php-cs-fixer fix --dry-run --verbose --diff", + "php-cs-fixer-fix": "vendor/bin/php-cs-fixer fix --verbose", + "phpstan": "vendor/bin/phpstan analyse --level 2 src", + "phpunit": "vendor/bin/phpunit ./tests/ --coverage-html=./report/coverage/ --testdox-html=./report/testdox.html --disallow-test-output --process-isolation", + "test": [ + "@lint", + "@phpunit" + ], + "test-ci": "vendor/bin/phpunit ./tests/ --disallow-test-output --process-isolation", + "test-coverage": "vendor/bin/phpunit ./tests/ --whitelist=./src/ --coverage-clover=clover.xml" + }, + "scripts-descriptions": { + "console": "Runs PsySH Console", + "lint": "Runs complete codebase lint testing", + "phpunit": "Runs library test suite", + "test": "Runs all tests", + "test-ci": "Runs library test suite (for continuous integration)", + "test-coverage": "Runs test-coverage analysis" + } +} diff --git a/app/vendor/beluga-php/docker-php/docs/async.md b/app/vendor/beluga-php/docker-php/docs/async.md new file mode 100644 index 000000000..2411e9dc4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/docs/async.md @@ -0,0 +1,52 @@ +# Asynchronous Client + +Starting from 2.0, Docker-PHP proposes an Asynchronous PHP Client using [Amp](https://amphp.org/) and +[Artax](https://amphp.org/artax/). + +## Installation + +Since it's optional you will have to require artax with composer to use it: + +``` +composer require amphp/artax:^3.0 +``` + +## Usage + +Then you can use the `DockerAsync` API Client: + +```php +setImage('busybox:latest'); + $containerConfig->setCmd(['echo', '-n', 'output']); + $containerConfig->setAttachStdout(true); + $containerConfig->setLabels(new \ArrayObject(['docker-php-test' => 'true'])); + + $response = yield $docker->imageCreate(null, [ + 'fromImage' => 'busybox:latest', + ], DockerAsync::FETCH_RESPONSE); + + yield $response->getBody(); + + $containerCreate = yield $docker->containerCreate($containerConfig); + $containerStart = yield $docker->containerStart($containerCreate->getId()); + /** @var \Docker\API\Model\ContainersIdJsonGetResponse200 $containerInfo */ + $containerInfo = yield $docker->containerInspect($containerCreate->getId()); + + var_dump($containerInfo->getName()); +}); +``` + +API of `DockerAsync` is exactly the same as `Docker`, at the exception that each endpoint will always return an `Amp\Promise` +object, which allows to you to do parallelism and await them with the `yield` keyword. + +If you are not familiar with this kind of API, please look at the [Amp documentation on that subject](https://amphp.org/getting-started/) diff --git a/app/vendor/beluga-php/docker-php/docs/basic.md b/app/vendor/beluga-php/docker-php/docs/basic.md new file mode 100644 index 000000000..52a7f200a --- /dev/null +++ b/app/vendor/beluga-php/docker-php/docs/basic.md @@ -0,0 +1,19 @@ +# Basic Usage + +`Docker\Docker` API Client offers all endpoints available for your version of Docker. Each endpoint has a strong PHPDoc +documentation in its comment, so the best way to know what values to set for an endpoint and what it returns is to go +directly to the endpoint documentation in the code. + +As an example for listing container you can do: + +```php +containerList(); + +foreach ($containers as $container) { + var_dump($container->getNames()); +} +``` diff --git a/app/vendor/beluga-php/docker-php/docs/connection.md b/app/vendor/beluga-php/docker-php/docs/connection.md new file mode 100644 index 000000000..92c152125 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/docs/connection.md @@ -0,0 +1,74 @@ +# Connecting to Docker + +## Default, with environment variables + +By default, Docker-PHP uses the the same environment variables as the Docker command line to connect to a running `docker daemon`: + + * `DOCKER_HOST`: tcp address for the docker daemon (i.e. tcp://127.0.0.1:2376) + * `DOCKER_TLS_VERIFY`: if set to true use tls for authentication of the client + * `DOCKER_CERT_PATH`: path for the client certificates to use for authentication + * `DOCKER_PEER_NAME`: peer name of the docker daemon (as set in the certificate) + +If the `DOCKER_HOST` environment variable is not set, it will use `unix:///var/run/docker.sock` as the default tcp address. + +```php + 'tcp://127.0.0.1:2375', + 'ssl' => false, +]); +$docker = Docker::create($client); +``` + +Since `DockerClientFactory` will create a `Http\Client\Socket\Client`, you can go on the +[official documentation of the socket client](http://docs.php-http.org/en/latest/clients/socket-client.html) +to learn about possible options. + +## Custom client + +In fact `Docker\Docker` accepts any client from [Httplug](http://httplug.io/) (respecting the `Http\Client\HttpClient` interface). + +So you can use [React](https://github.com/reactphp/http-client), [Guzzle](http://docs.guzzlephp.org/en/latest/) +or any [other adapters / clients](http://docs.php-http.org/en/latest/clients.html). + + +```php +imageBuild($inputStream); +$buildStream->onFrame(function (BuildInfo $buildInfo) { + echo $buildInfo->getStream(); +}); + +$buildStream->wait(); +``` + +### Docker::FETCH_RESPONSE + +The build function will return the raw [PSR7](http://www.php-fig.org/psr/psr-7/) Response. It's up to you to handle +decoding and receiving correct output in this case. + +## Context + +Docker PHP provides a `ContextInterface` and a default `Context` object for creating the `$inputStream` of the build +method. + +```php +toStream(); +$docker = Docker::create(); + +$docker->imageBuild($inputStream); +``` + +You can safely use this context object to build image with a huge directory to size without consuming any memory or disk +on the PHP side as it will directly pipe the output of a `tar` process into the Docker Remote API. + +### Context Builder + +Additionally you can use the `ContextBuilder` to have a dynamic generation of your `Dockerfile`: + +```php +from('ubuntu:latest'); +$contextBuilder->run('apt-get update && apt-get install -y php5'); + +$docker = Docker::create(); +$docker->imageBuild($contextBuilder->getContext()->toStream()); +``` + diff --git a/app/vendor/beluga-php/docker-php/docs/cookbook/container-run.md b/app/vendor/beluga-php/docker-php/docs/cookbook/container-run.md new file mode 100644 index 000000000..2ee824bff --- /dev/null +++ b/app/vendor/beluga-php/docker-php/docs/cookbook/container-run.md @@ -0,0 +1,251 @@ +# Running a container + +Running a container in Docker PHP like it would be done with the docker client `docker run image command` is not a +single call to api, even with the docker run command, it involves multiple calls to the API. + +## Creating the container + +First step is to create a container and its associated configuration, by creating a `ContainerConfig` instance and +passing to the `create` api endpoint. + +```php +setImage('busybox:latest'); +$containerConfig->setCmd(['echo', 'I am running a command']); + +$containerCreateResult = $docker->containerCreate($containerConfig); +``` + +This will return a `ContainersCreatePostResponse201` object with the id of the created container. If you don't want to use +container id you can also specify a unique name for this container: + +```php +$containerCreateResult = $docker->containerCreate($containerConfig, ['name' => 'my-container-unique-name']); +``` + +Be aware that the container is immutable if you need to change a configuration for a container, you will need to remove +the existing one and create it again with the new configuration. + +## Starting the container + +Once a container has been created, you can start it, this will in fact, only launch the process inside the isolated +container. This is done with the `containerStart` method, you can use the id of the container or the +name: + +```php +$docker->containerStart($containerCreateResult->getId()); +// Or +$docker->containerStart('my-container-unique-name'); +``` + +The start method will always return the raw [PSR7](http://www.php-fig.org/psr/psr-7/) Response, but you don't need +to check it as on failure it will throw an exception. + +## Waiting for the container to end + +Once your container is started you can wait for it end by using the `containerWait` method, be aware that your PHP script will +block until the container has stopped or that the default timeout set on the client has been reached (default to 60 +seconds) + +```php +$docker->containerWait('my-container-unique-name'); +``` + +## Stopping the container + +Once your container is started you can stop it by using the `containerStop` method. You can use the id of the container or the name: + +```php +$docker->containerStop($containerCreateResult->getId()); +// Or +$docker->containerStop('my-container-unique-name'); +``` + + +## Reading logs in real time + +Sometimes you will need to read logs in real time for a container. You can use the `containerAttach` method for that. +Be aware that you will only receive them if you configure the container with +[json log driver](https://docs.docker.com/engine/reference/logging/overview/), which is the default configuration. + +```php +$attachStream = $docker->containerAttach('my-container-unique-name'); +``` + +The `$attachStream` returned will be an instance of a `DockerRawStream`. You can use this object afterwards to add +callbacks on the different streams: + + * `addStdin` to add a callback on the stdin stream + * `addStdout` for the stdout stream + * `addStderr` for the stderr stream + +The callback for each of this method takes a string for the first argument which correspond to the log line. + +Use then the wait method to activate real time logging, this method will only stop when then stream is closed which +correspond to when the container has stopped. + +```php +$attachStream->onStdout(function ($stdout) { + echo $stdout; +}); +$attachStream->onStderr(function ($stderr) { + echo $stderr; +}); + +$attachStream->wait(); +``` + +If you follow all the example, you will not see the log and this normal. In fact the container and the call to the attach +method need extra configuration: + +```php +$containerConfig = new ContainersCreatePostBody(); +$containerConfig->setImage('busybox:latest'); +$containerConfig->setCmd(['echo', 'I am running a command']); +// You need to attach stream of the container to docker +$containerConfig->setAttachStdin(true); +$containerConfig->setAttachStdout(true); +$containerConfig->setAttachStderr(true); + +$docker->containerCreate($containerConfig, ['name' => 'my-container-unique-name']); + +// You also need to set stream to true to get the logs, and tell which stream you want to attach +$attachStream = $docker->containerAttach('my-container-unique-name', [ + 'stream' => true, + 'stdin' => true, + 'stdout' => true, + 'stderr' => true +]); +$docker->containerStart('my-container-unique-name'); + +$attachStream->onStdout(function ($stdout) { + echo $stdout; +}); +$attachStream->onStderr(function ($stderr) { + echo $stderr; +}); + +$attachStream->wait(); +``` + +If you read the following example, you will notice that we call the `containerAttach` method before starting the container with +`containerStart`. This is normal, as otherwise during the time the container is started and the call to the `containerAttach` endpoint +some logs may have been processed and you will loose this information. That's why it is strongly recommended to attach +the container before starting it. + +## Interacting with a container + +WIth the last example we can now read the log a container in real time. However you may need to send input to this +container. This can be done by attaching a websocket with the `containerAttachWebsocket` method:` + +```php +$webSocketStream = $docker->containerAttachWebsocket('my-container-unique-name', [ + 'stream' => true, + 'stdout' => true, + 'stderr' => true, + 'stdin' => true, +]); +``` + +The returned stream will be an instance of `AttachWebsocketStream` and it can be used to both reading and writing to +the container: + +```php +$line = $webSocketStream->read(); +$websocketStream->write('i send input to the container'); +``` + +If the `$line` is `null` then the stream is no longer available (container is certainly stopped), if it's equal to +`false` then the stream is still available but no output was received, otherwise it will return output from the container. + +To actually write on the stream (having the stdin stream open) you will, again, need extra configuration when creating +the container: + +```php +// Open the stdin stream from docker engine to the container +$containerConfig->setOpenStdin(true); +// Needed if you want to use process that rely on a tty, be aware as there is, in fact, no tty this may cause bug to +// the underlying process in your container +$containerConfig->setTty(true); +``` + +Be aware that there is no distinction between stdout and stderr in this mode. + +## Port Mapping + +This example shows how you can map port 8080 on your host machine to port 80 on the container. + +```php +setTty(true); +$containerConfig->setExposedPorts(['80/tcp' => new \stdClass]); + +$portBinding = new PortBinding(); +$portBinding->setHostPort('8080'); +$portBinding->setHostIp('0.0.0.0'); + +$portMap = new \ArrayObject(); +$portMap['80/tcp'] = [$portBinding]; + +$hostConfig = new HostConfig(); +$hostConfig->setPortBindings($portMap); + +$containerConfig->setHostConfig($hostConfig); +``` + +## Executing a command on a running container + +This example shows how you can execute an command on any running container. It is same as `docker exec CONTAINER_ID some_command `. + +```php +setTty(true); +$execConfig->setAttachStdout(true); +$execConfig->setAttachStderr(true); +$execConfig->setCmd(['mkdir', '/tmp/testDir']); + +$execid = $docker->containerExec('android',$execConfig)->getId(); +$execStartConfig = new ExecIdStartPostBody(); +$execStartConfig->setDetach(false); + +// Execute the command +$stream = $docker->execStart($execid,$execStartConfig); + +// To see the output stream of the 'exec' command +$stdoutText = ""; +$stderrText = ""; + +$stream->onStdout(function ($stdout) use (&$stdoutText) { + $stdoutText .= $stdout; +}); + +$stream->onStderr(function ($stderr) use (&$stderrText) { + $stderrText .= $stderr; +}); + +$stream->wait(); +var_dump([ "stdout" => $stdoutText, "stderr" => $stderrText ]) ; +``` diff --git a/app/vendor/beluga-php/docker-php/docs/index.md b/app/vendor/beluga-php/docker-php/docs/index.md new file mode 100644 index 000000000..d00780dc4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/docs/index.md @@ -0,0 +1,22 @@ +# Docker-PHP + +This is the documentation for [docker-php](https://github.com/docker-php/docker-php) library. + +This library aim to reach 100% API support of the Docker Engine. + +## Basics + +First you need to learn the basics of this library : + +* [Installation](installation.md) +* [Connecting to Docker](connection.md) +* [Basic usage](basic.md) +* [Asynchronous Client](async.md) + +## Cookbook + +The cookbook is a collection of recipes that explain how to solve common +problems and advanced usage when using Docker-PHP + +* [Running a container](cookbook/container-run.md) +* [Build an image](cookbook/build-image.md) diff --git a/app/vendor/beluga-php/docker-php/docs/installation.md b/app/vendor/beluga-php/docker-php/docs/installation.md new file mode 100644 index 000000000..2cc4fcecd --- /dev/null +++ b/app/vendor/beluga-php/docker-php/docs/installation.md @@ -0,0 +1,21 @@ +# Installation + +The recommended way to install Docker PHP is to use [Composer](http://getcomposer.org/): + +Run `composer require docker-php/docker-php` to add the dependency + +By default it will use the last API version. However you can specify the API version of docker by setting a specific +version for the `docker-php/docker-php-api`. + +To use the 1.29 version you can do the following: + +``` +composer require docker-php/docker-php-api:4.1.29.* +``` + +Do not use `^4.1.29.0`; otherwise, you will also depend on the latest version. The first digit of this version number matches the +major version of [Jane PHP](https://github.com/janephp/janephp), which is the lib generating the API Client code. + +Note that some endpoints of the Docker API may have BC breaks during minor version updates. This library may +try to hide those BC breaks but it will always be a best effort. Feel free to raise an issue or pull request on github when +you encounter one. diff --git a/app/vendor/beluga-php/docker-php/mkdocs.yml b/app/vendor/beluga-php/docker-php/mkdocs.yml new file mode 100644 index 000000000..1f127ad32 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/mkdocs.yml @@ -0,0 +1,15 @@ +site_name: Docker PHP +site_url: http://docker-php.readthedocs.org/ +site_description: A Docker client in PHP +repo_url: https://github.com/docker-php/docker-php + +pages: + - Home: index.md + - Docker PHP: + - Installation: installation.md + - Connecting to Docker: connection.md + - Basic Usage: basic.md + - Asynchronous Client: async.md + - Cookbook: + - Running a container: cookbook/container-run.md + - Build an image: cookbook/build-image.md diff --git a/app/vendor/beluga-php/docker-php/phpunit.xml.dist b/app/vendor/beluga-php/docker-php/phpunit.xml.dist new file mode 100644 index 000000000..cbc386105 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/phpunit.xml.dist @@ -0,0 +1,23 @@ + + + + + + tests/ + + + + + src + + + diff --git a/app/vendor/beluga-php/docker-php/src/Context/Context.php b/app/vendor/beluga-php/docker-php/src/Context/Context.php new file mode 100644 index 000000000..320f131f4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Context/Context.php @@ -0,0 +1,164 @@ +directory = $directory; + $this->format = $format; + $this->fs = $fs ?? new Filesystem(); + } + + /** + * Get directory of Context. + * + * @return string + */ + public function getDirectory() + { + return $this->directory; + } + + /** + * Set directory of Context. + * + * @param string $directory Targeted directory + */ + public function setDirectory($directory): void + { + $this->directory = $directory; + } + + /** + * Return content of Dockerfile of this context. + * + * @return string Content of dockerfile + */ + public function getDockerfileContent() + { + return file_get_contents($this->directory.\DIRECTORY_SEPARATOR.'Dockerfile'); + } + + /** + * @return bool + */ + public function isStreamed() + { + return self::FORMAT_STREAM === $this->format; + } + + /** + * @return resource|string + */ + public function read() + { + return $this->isStreamed() ? $this->toStream() : $this->toTar(); + } + + /** + * Return the context as a tar archive. + * + * @throws \Symfony\Component\Process\Exception\ProcessFailedException + * + * @return string Tar content + */ + public function toTar() + { + $process = new Process(['/usr/bin/env', 'tar', '-c', '.'], $this->directory); + $process->run(); + + if (!$process->isSuccessful()) { + throw new ProcessFailedException($process); + } + + return $process->getOutput(); + } + + /** + * Return a stream for this context. + * + * @return resource Stream resource in memory + */ + public function toStream() + { + if (!\is_resource($this->process)) { + $this->process = proc_open('/usr/bin/env tar -c .', [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w']], $pipes, $this->directory); + $this->stream = $pipes[1]; + } + + return $this->stream; + } + + public function __destruct() + { + if (\is_resource($this->stream)) { + fclose($this->stream); + } + + if (\is_resource($this->process)) { + proc_close($this->process); + } + + if ($this->cleanup) { + $this->fs->remove($this->directory); + } + } + + /** + * @param bool $value whether to remove the context directory + */ + public function setCleanup(bool $value): void + { + $this->cleanup = $value; + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Context/ContextBuilder.php b/app/vendor/beluga-php/docker-php/src/Context/ContextBuilder.php new file mode 100644 index 000000000..cda9629f5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Context/ContextBuilder.php @@ -0,0 +1,396 @@ +fs = $fs ?: new Filesystem(); + $this->format = Context::FORMAT_STREAM; + } + + /** + * Sets the format of the Context output. + * + * @param string $format + * + * @return \Docker\Context\ContextBuilder + */ + public function setFormat($format) + { + $this->format = $format; + + return $this; + } + + /** + * Add a FROM instruction of Dockerfile. + * + * @param string $from From which image we start + * + * @return \Docker\Context\ContextBuilder + */ + public function from($from) + { + $this->commands[] = ['type' => 'FROM', 'image' => $from]; + + return $this; + } + + /** + * Set the CMD instruction in the Dockerfile. + * + * @param string $command Command to execute + * + * @return \Docker\Context\ContextBuilder + */ + public function command($command) + { + $this->command = $command; + + return $this; + } + + /** + * Set the ENTRYPOINT instruction in the Dockerfile. + * + * @param string $entrypoint The entrypoint + * + * @return \Docker\Context\ContextBuilder + */ + public function entrypoint($entrypoint) + { + $this->entrypoint = $entrypoint; + + return $this; + } + + /** + * Add an ADD instruction to Dockerfile. + * + * @param string $path Path wanted on the image + * @param string $content Content of file + * + * @return \Docker\Context\ContextBuilder + */ + public function add($path, $content) + { + $this->commands[] = ['type' => 'ADD', 'path' => $path, 'content' => $content]; + + return $this; + } + + /** + * Add an ADD instruction to Dockerfile. + * + * @param string $path Path wanted on the image + * @param resource $stream stream that contains file content + * + * @return \Docker\Context\ContextBuilder + */ + public function addStream($path, $stream) + { + $this->commands[] = ['type' => 'ADDSTREAM', 'path' => $path, 'stream' => $stream]; + + return $this; + } + + /** + * Add an ADD instruction to Dockerfile. + * + * @param string $path Path wanted on the image + * @param string $file Source file (or directory) name + * + * @return \Docker\Context\ContextBuilder + */ + public function addFile($path, $file) + { + $this->commands[] = ['type' => 'ADDFILE', 'path' => $path, 'file' => $file]; + + return $this; + } + + /** + * Add a RUN instruction to Dockerfile. + * + * @param string $command Command to run + * + * @return \Docker\Context\ContextBuilder + */ + public function run($command) + { + $this->commands[] = ['type' => 'RUN', 'command' => $command]; + + return $this; + } + + /** + * Add a ENV instruction to Dockerfile. + * + * @param string $name Name of the environment variable + * @param string $value Value of the environment variable + * + * @return \Docker\Context\ContextBuilder + */ + public function env($name, $value) + { + $this->commands[] = ['type' => 'ENV', 'name' => $name, 'value' => $value]; + + return $this; + } + + /** + * Add a COPY instruction to Dockerfile. + * + * @param string $from Path of folder or file to copy + * @param string $to Path of destination + * + * @return \Docker\Context\ContextBuilder + */ + public function copy($from, $to) + { + $this->commands[] = ['type' => 'COPY', 'from' => $from, 'to' => $to]; + + return $this; + } + + /** + * Add a WORKDIR instruction to Dockerfile. + * + * @param string $workdir Working directory + * + * @return \Docker\Context\ContextBuilder + */ + public function workdir($workdir) + { + $this->commands[] = ['type' => 'WORKDIR', 'workdir' => $workdir]; + + return $this; + } + + /** + * Add a EXPOSE instruction to Dockerfile. + * + * @param int $port Port to expose + * + * @return \Docker\Context\ContextBuilder + */ + public function expose($port) + { + $this->commands[] = ['type' => 'EXPOSE', 'port' => $port]; + + return $this; + } + + /** + * Adds an USER instruction to the Dockerfile. + * + * @param string $user User to switch to + * + * @return \Docker\Context\ContextBuilder + */ + public function user($user) + { + $this->commands[] = ['type' => 'USER', 'user' => $user]; + + return $this; + } + + /** + * Adds a VOLUME instruction to the Dockerfile. + * + * @param string $volume Volume path to add + * + * @return \Docker\Context\ContextBuilder + */ + public function volume($volume) + { + $this->commands[] = ['type' => 'VOLUME', 'volume' => $volume]; + + return $this; + } + + /** + * Create context given the state of builder. + * + * @return \Docker\Context\Context + */ + public function getContext() + { + $directory = sys_get_temp_dir().'/ctb-'.microtime(); + $this->fs->mkdir($directory); + $this->write($directory); + + $result = new Context($directory, $this->format, $this->fs); + $result->setCleanup(true); + + return $result; + } + + /** + * Write docker file and associated files in a directory. + * + * @param string $directory Target directory + * + * @void + */ + private function write($directory): void + { + $dockerfile = []; + // Insert a FROM instruction if the file does not start with one. + if (empty($this->commands) || 'FROM' !== $this->commands[0]['type']) { + $dockerfile[] = 'FROM base'; + } + foreach ($this->commands as $command) { + switch ($command['type']) { + case 'FROM': + $dockerfile[] = 'FROM '.$command['image']; + break; + case 'RUN': + $dockerfile[] = 'RUN '.$command['command']; + break; + case 'ADD': + $dockerfile[] = 'ADD '.$this->getFile($directory, $command['content']).' '.$command['path']; + break; + case 'ADDFILE': + $dockerfile[] = 'ADD '.$this->getFileFromDisk($directory, $command['file']).' '.$command['path']; + break; + case 'ADDSTREAM': + $dockerfile[] = 'ADD '.$this->getFileFromStream($directory, $command['stream']).' '.$command['path']; + break; + case 'COPY': + $dockerfile[] = 'COPY '.$command['from'].' '.$command['to']; + break; + case 'ENV': + $dockerfile[] = 'ENV '.$command['name'].' '.$command['value']; + break; + case 'WORKDIR': + $dockerfile[] = 'WORKDIR '.$command['workdir']; + break; + case 'EXPOSE': + $dockerfile[] = 'EXPOSE '.$command['port']; + break; + case 'VOLUME': + $dockerfile[] = 'VOLUME '.$command['volume']; + break; + case 'USER': + $dockerfile[] = 'USER '.$command['user']; + break; + } + } + + if (!empty($this->entrypoint)) { + $dockerfile[] = 'ENTRYPOINT '.$this->entrypoint; + } + + if (!empty($this->command)) { + $dockerfile[] = 'CMD '.$this->command; + } + + $this->fs->dumpFile($directory.\DIRECTORY_SEPARATOR.'Dockerfile', implode(\PHP_EOL, $dockerfile)); + } + + /** + * Generate a file in a directory. + * + * @param string $directory Targeted directory + * @param string $content Content of file + * + * @return string Name of file generated + */ + private function getFile($directory, $content) + { + $hash = md5($content); + + if (!\array_key_exists($hash, $this->files)) { + $file = tempnam($directory, ''); + $this->fs->dumpFile($file, $content); + $this->files[$hash] = basename($file); + } + + return $this->files[$hash]; + } + + /** + * Generated a file in a directory from a stream. + * + * @param string $directory Targeted directory + * @param resource $stream Stream containing file contents + * + * @return string Name of file generated + */ + private function getFileFromStream($directory, $stream) + { + $file = tempnam($directory, ''); + $target = fopen($file, 'w'); + if (0 === stream_copy_to_stream($stream, $target)) { + throw new \RuntimeException('Failed to write stream to file'); + } + fclose($target); + + return basename($file); + } + + /** + * Generated a file in a directory from an existing file. + * + * @param string $directory Targeted directory + * @param string $source Path to the source file + * + * @return string Name of file generated + */ + private function getFileFromDisk($directory, $source) + { + $hash = 'DISK-'.md5(realpath($source)); + if (!\array_key_exists($hash, $this->files)) { + // Check if source is a directory or a file. + if (is_dir($source)) { + $this->fs->mirror($source, $directory.'/'.$hash, null, ['copy_on_windows' => true]); + } else { + $this->fs->copy($source, $directory.'/'.$hash); + } + + $this->files[$hash] = $hash; + } + + return $this->files[$hash]; + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Context/ContextInterface.php b/app/vendor/beluga-php/docker-php/src/Context/ContextInterface.php new file mode 100644 index 000000000..0e1fc2833 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Context/ContextInterface.php @@ -0,0 +1,26 @@ +executeEndpoint(new ContainerAttach($id, $queryParameters, $accept), $fetch); + } + + /** + * {@inheritdoc} + */ + public function containerAttachWebsocket(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new ContainerAttachWebsocket($id, $queryParameters, $accept), $fetch); + } + + /** + * {@inheritdoc} + */ + public function containerLogs(string $id, array $queryParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new ContainerLogs($id, $queryParameters, $accept), $fetch); + } + + /** + * {@inheritdoc} + */ + public function execStart(string $id, ?ExecIdStartPostBody $requestBody = null, string $fetch = self::FETCH_OBJECT, array $accept = []) + { + return $this->executeEndpoint(new ExecStart($id, $requestBody, $accept), $fetch); + } + + /** + * {@inheritdoc} + */ + public function imageBuild($requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new ImageBuild($requestBody, $queryParameters, $headerParameters), $fetch); + } + + /** + * {@inheritdoc} + */ + public function imageCreate(?string $requestBody = null, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new ImageCreate($requestBody, $queryParameters, $headerParameters), $fetch); + } + public function imagePush(string $name, array $queryParameters = [], array $headerParameters = [], string $fetch = self::FETCH_OBJECT, array $accept = []) + { + if (isset($headerParameters['X-Registry-Auth']) && $headerParameters['X-Registry-Auth'] instanceof AuthConfig) { + $headerParameters['X-Registry-Auth'] = base64_encode($this->serializer->serialize($headerParameters['X-Registry-Auth'], 'json')); + } + + return $this->executeEndpoint(new ImagePush($name, $queryParameters, $headerParameters, $accept), $fetch); + } + + /** + * {@inheritdoc} + */ + public function systemEvents(array $queryParameters = [], string $fetch = self::FETCH_OBJECT) + { + return $this->executeEndpoint(new SystemEvents($queryParameters), $fetch); + } + + public static function create( + $httpClient = null, + array $additionalPlugins = [], + array $additionalNormalizers = [] + ): self + { + if (null === $httpClient) { + $httpClient = DockerClientFactory::createFromEnv(); + } + + $client = parent::create($httpClient, $additionalPlugins, $additionalNormalizers); + $testClient = $client->executeRawEndpoint(new SystemInfo())->getBody()->getContents(); + $jsonObj = json_decode($testClient); + + if ($jsonObj !== null) { + if (isset($jsonObj->message)) { + // Check if the client is too new + if (strpos($jsonObj->message, 'client version') !== false && strpos($jsonObj->message, 'is too new') !== false) { + throw new BadRequestException("The client version is not supported by your version of Docker. Message: {$jsonObj->message}"); + } else { + throw new BadRequestException($jsonObj->message); + } + } + } else { + throw new BadRequestException("Failed to decode JSON."); + } + return $client; + } +} diff --git a/app/vendor/beluga-php/docker-php/src/DockerClientFactory.php b/app/vendor/beluga-php/docker-php/src/DockerClientFactory.php new file mode 100644 index 000000000..39b07e890 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/DockerClientFactory.php @@ -0,0 +1,82 @@ +createClient( + $socketClient, + [ + new ContentLengthPlugin(), + new DecoderPlugin(), + new AddPathPlugin($uriFactory->createUri('/v1.45')), + new AddHostPlugin($uriFactory->createUri($host)), + new HeaderDefaultsPlugin([ + 'host' => parse_url($host, \PHP_URL_HOST), + ]), + ], + [ + 'client_name' => 'docker-client', + ] + ); + } + + public static function createFromEnv(?PluginClientFactory $pluginClientFactory = null): PluginClient + { + $options = [ + 'remote_socket' => getenv('DOCKER_HOST') ? getenv('DOCKER_HOST') : 'unix:///var/run/docker.sock', + ]; + + if (getenv('DOCKER_TLS_VERIFY') && '1' === getenv('DOCKER_TLS_VERIFY')) { + if (!getenv('DOCKER_CERT_PATH')) { + throw new \RuntimeException('Connection to docker has been set to use TLS, but no PATH is defined for certificate in DOCKER_CERT_PATH docker environment variable'); + } + + $cafile = getenv('DOCKER_CERT_PATH').\DIRECTORY_SEPARATOR.'ca.pem'; + $certfile = getenv('DOCKER_CERT_PATH').\DIRECTORY_SEPARATOR.'cert.pem'; + $keyfile = getenv('DOCKER_CERT_PATH').\DIRECTORY_SEPARATOR.'key.pem'; + + $stream_context = [ + 'cafile' => $cafile, + 'local_cert' => $certfile, + 'local_pk' => $keyfile, + ]; + + if (getenv('DOCKER_PEER_NAME')) { + $stream_context['peer_name'] = getenv('DOCKER_PEER_NAME'); + } + + $options['ssl'] = true; + $options['stream_context_options'] = [ + 'ssl' => $stream_context, + ]; + } + + return self::create($options, $pluginClientFactory); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerAttach.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerAttach.php new file mode 100644 index 000000000..1c776639e --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerAttach.php @@ -0,0 +1,22 @@ +getStatusCode() && DockerRawStream::HEADER === $contentType) { + return new DockerRawStream($response->getBody()); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerAttachWebsocket.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerAttachWebsocket.php new file mode 100644 index 000000000..ee6fe0237 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerAttachWebsocket.php @@ -0,0 +1,39 @@ + 'localhost', + 'Origin' => 'php://docker-php', + 'Upgrade' => 'websocket', + 'Connection' => 'Upgrade', + 'Sec-WebSocket-Version' => '13', + 'Sec-WebSocket-Key' => base64_encode(uniqid()), + ] + ); + } + + protected function transformResponseBody(ResponseInterface $response, SerializerInterface $serializer, ?string + $contentType = null) + { + if (200 === $response->getStatusCode() && DockerRawStream::HEADER === $contentType) { + return new AttachWebsocketStream($response->getBody()); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerLogs.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerLogs.php new file mode 100644 index 000000000..996b09c39 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ContainerLogs.php @@ -0,0 +1,22 @@ +getStatusCode() && DockerRawStream::HEADER === $contentType) { + return new DockerRawStream($response->getBody()); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ExecStart.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ExecStart.php new file mode 100644 index 000000000..e2d8985be --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ExecStart.php @@ -0,0 +1,22 @@ +getStatusCode() && DockerRawStream::HEADER === $contentType) { + return new DockerRawStream($response->getBody()); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ImageBuild.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ImageBuild.php new file mode 100644 index 000000000..49239c4cf --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ImageBuild.php @@ -0,0 +1,35 @@ +body; + + if (\is_resource($body)) { + $body = new TarStream(Stream::create($body)); + } + + return [['Content-Type' => ['application/octet-stream']], $body]; + } + + protected function transformResponseBody(ResponseInterface $response, SerializerInterface $serializer, ?string $contentType = null) + { + if (200 === $response->getStatusCode()) { + return new BuildStream($response->getBody(), $serializer); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ImageCreate.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ImageCreate.php new file mode 100644 index 000000000..3a50da2e9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ImageCreate.php @@ -0,0 +1,22 @@ +getStatusCode()) { + return new CreateImageStream($response->getBody(), $serializer); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/ImagePush.php b/app/vendor/beluga-php/docker-php/src/Endpoint/ImagePush.php new file mode 100644 index 000000000..61e165915 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/ImagePush.php @@ -0,0 +1,27 @@ +name)], '/images/{name}/push'); + } + + protected function transformResponseBody(ResponseInterface $response, SerializerInterface $serializer, ?string $contentType = null) + { + if (200 === $response->getStatusCode()) { + return new PushStream($response->getBody(), $serializer); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Endpoint/SystemEvents.php b/app/vendor/beluga-php/docker-php/src/Endpoint/SystemEvents.php new file mode 100644 index 000000000..3f57e916c --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Endpoint/SystemEvents.php @@ -0,0 +1,22 @@ +getStatusCode()) { + return new EventStream($response->getBody(), $serializer); + } + + return parent::transformResponseBody($response, $serializer, $contentType); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Stream/AttachWebsocketStream.php b/app/vendor/beluga-php/docker-php/src/Stream/AttachWebsocketStream.php new file mode 100644 index 000000000..0394ac2f8 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Stream/AttachWebsocketStream.php @@ -0,0 +1,176 @@ +socket = $stream->detach(); + } + + /** + * Send input to the container. + * + * @param string $data Data to send + */ + public function write($data): void + { + $rand = random_int(0, 28); + $frame = [ + 'fin' => 1, + 'rsv1' => 0, + 'rsv2' => 0, + 'rsv3' => 0, + 'opcode' => 1, // We always send text + 'mask' => 1, + 'len' => \strlen($data), + 'mask_key' => substr(md5(uniqid()), $rand, 4), + 'data' => $data, + ]; + + if (1 === $frame['mask']) { + for ($i = 0; $i < $frame['len']; ++$i) { + $frame['data'][$i] + = \chr(\ord($frame['data'][$i]) ^ \ord($frame['mask_key'][$i % 4])); + } + } + + if ($frame['len'] > 2 ** 16) { + $len = 127; + } elseif ($frame['len'] > 125) { + $len = 126; + } else { + $len = $frame['len']; + } + + $firstByte = ($frame['fin'] << 7) | (($frame['rsv1'] << 7) >> 1) | (($frame['rsv2'] << 7) >> 2) | (($frame['rsv3'] << 7) >> 3) | (($frame['opcode'] << 4) >> 4); + $secondByte = ($frame['mask'] << 7) | (($len << 1) >> 1); + + $this->socketWrite(\chr($firstByte)); + $this->socketWrite(\chr($secondByte)); + + if (126 === $len) { + $this->socketWrite(pack('n', $frame['len'])); + } elseif (127 === $len) { + $higher = $frame['len'] >> 32; + $lower = ($frame['len'] << 32) >> 32; + $this->socketWrite(pack('N', $higher)); + $this->socketWrite(pack('N', $lower)); + } + + if (1 === $frame['mask']) { + $this->socketWrite($frame['mask_key']); + } + + $this->socketWrite($frame['data']); + } + + /** + * Block until it receive a frame from websocket or return null if no more connexion. + * + * @param int $waitTime Time to wait in seconds before return false + * @param int $waitMicroTime Time to wait in microseconds before return false + * @param bool $getFrame Whether to return the frame of websocket or only the data + * + * @return false|string|array|null Null for socket not available, false for no message, string for the last message and the frame array if $getFrame is set to true + */ + public function read($waitTime = 0, $waitMicroTime = 200000, $getFrame = false) + { + if (!\is_resource($this->socket) || feof($this->socket)) { + return null; + } + + $read = [$this->socket]; + $write = null; + $expect = null; + + if (0 === stream_select($read, $write, $expect, $waitTime, $waitMicroTime)) { + return false; + } + + $firstByte = $this->socketRead(1); + $frame = []; + $firstByte = \ord($firstByte); + $secondByte = \ord($this->socketRead(1)); + + // First byte decoding + $frame['fin'] = ($firstByte & 128) >> 7; + $frame['rsv1'] = ($firstByte & 64) >> 6; + $frame['rsv2'] = ($firstByte & 32) >> 5; + $frame['rsv3'] = ($firstByte & 16) >> 4; + $frame['opcode'] = ($firstByte & 15); + + // Second byte decoding + $frame['mask'] = ($secondByte & 128) >> 7; + $frame['len'] = ($secondByte & 127); + + // Get length of the frame + if (126 === $frame['len']) { + $frame['len'] = unpack('n', $this->socketRead(2))[1]; + } elseif (127 === $frame['len']) { + [$higher, $lower] = array_values(unpack('N2', $this->socketRead(8))); + $frame['len'] = ($higher << 32) | $lower; + } + + // Get the mask key if needed + if (1 === $frame['mask']) { + $frame['mask_key'] = $this->socketRead(4); + } + + $frame['data'] = $this->socketRead($frame['len']); + + // Decode data if needed + if (1 === $frame['mask']) { + for ($i = 0; $i < $frame['len']; ++$i) { + $frame['data'][$i] = \chr(\ord($frame['data'][$i]) ^ \ord($frame['mask_key'][$i % 4])); + } + } + + if ($getFrame) { + return $frame; + } + + return (string) $frame['data']; + } + + /** + * Force to have something of the expected size (block). + * + * @return string + */ + private function socketRead($length) + { + $read = ''; + + do { + $read .= fread($this->socket, $length - \strlen($read)); + } while (\strlen($read) < $length && !feof($this->socket)); + + return $read; + } + + /** + * Write to the socket. + * + * @return int + */ + private function socketWrite($data) + { + return fwrite($this->socket, $data); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Stream/BuildStream.php b/app/vendor/beluga-php/docker-php/src/Stream/BuildStream.php new file mode 100644 index 000000000..34f32ac41 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Stream/BuildStream.php @@ -0,0 +1,21 @@ +stream = $stream; + } + + /** + * Called when there is a new frame from the stream. + */ + public function onFrame(callable $onNewFrame): void + { + $this->onNewFrameCallables[] = $onNewFrame; + } + + /** + * Read a frame in the stream. + */ + abstract protected function readFrame(); + + /** + * Wait for stream to finish and call callables if defined. + */ + public function wait(): void + { + while (!$this->stream->eof()) { + $frame = $this->readFrame(); + + if (null !== $frame) { + if (!\is_array($frame)) { + $frame = [$frame]; + } + + foreach ($this->onNewFrameCallables as $newFrameCallable) { + \call_user_func_array($newFrameCallable, $frame); + } + } + } + } + + public function closeAndRead(): void + { + $this->stream->close(); + $this->wait(); + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Stream/CreateImageStream.php b/app/vendor/beluga-php/docker-php/src/Stream/CreateImageStream.php new file mode 100644 index 000000000..8d5aea7c6 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Stream/CreateImageStream.php @@ -0,0 +1,21 @@ +stream = $stream; + } + + /** + * Add a callable to read stdin. + */ + public function onStdin(callable $callback): void + { + $this->onStdinCallables[] = $callback; + } + + /** + * Add a callable to read stdout. + */ + public function onStdout(callable $callback): void + { + $this->onStdoutCallables[] = $callback; + } + + /** + * Add a callable to read stderr. + */ + public function onStderr(callable $callback): void + { + $this->onStderrCallables[] = $callback; + } + + /** + * Read a frame in the stream. + */ + protected function readFrame(): void + { + $header = $this->forceRead(8); + + if (\strlen($header) < 8) { + return; + } + + $decoded = unpack('C1type/C3/N1size', $header); + $output = $this->forceRead($decoded['size']); + $callbackList = []; + + if (0 === $decoded['type']) { + $callbackList = $this->onStdinCallables; + } + + if (1 === $decoded['type']) { + $callbackList = $this->onStdoutCallables; + } + + if (2 === $decoded['type']) { + $callbackList = $this->onStderrCallables; + } + + foreach ($callbackList as $callback) { + $callback($output); + } + } + + /** + * Force to have something of the expected size (block). + * + * @return string + */ + private function forceRead($length) + { + $read = ''; + + do { + $read .= $this->stream->read($length - \strlen($read)); + } while (\strlen($read) < $length && !$this->stream->eof()); + + return $read; + } + + /** + * Wait for stream to finish and call callables if defined. + */ + public function wait(): void + { + while (!$this->stream->eof()) { + $this->readFrame(); + } + } +} diff --git a/app/vendor/beluga-php/docker-php/src/Stream/EventStream.php b/app/vendor/beluga-php/docker-php/src/Stream/EventStream.php new file mode 100644 index 000000000..1c18a8050 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Stream/EventStream.php @@ -0,0 +1,21 @@ +serializer = $serializer; + } + + protected function readFrame() + { + $jsonFrameEnd = false; + $lastJsonChar = ''; + $inquote = false; + $jsonFrame = ''; + $level = 0; + + // This is a + while (!$jsonFrameEnd && !$this->stream->eof()) { + $jsonChar = $this->stream->read(1); + + if ('"' === $jsonChar && '\\' !== $lastJsonChar) { + $inquote = !$inquote; + } + + // We ignore white space when it is not part of a quoted string. + if (!$inquote && \in_array($jsonChar, [' ', "\r", "\n", "\t"], true)) { + continue; + } + + if (!$inquote && \in_array($jsonChar, ['{', '['], true)) { + ++$level; + } + + if (!$inquote && \in_array($jsonChar, ['}', ']'], true)) { + --$level; + + if (0 === $level) { + $jsonFrameEnd = true; + $jsonFrame .= $jsonChar; + $lastJsonChar = ''; + continue; + } + } + + $jsonFrame .= $jsonChar; + $lastJsonChar = $jsonChar; + } + + // Invalid last json, or timeout, or connection close before receiving + if (!$jsonFrameEnd) { + return null; + } + + return $this->serializer->deserialize($jsonFrame, 'Docker\\API\\Model\\'.$this->getDecodeClass(), 'json'); + } + + /** + * Get the decode class to pass to serializer. + * + * @return string + */ + abstract protected function getDecodeClass(); +} diff --git a/app/vendor/beluga-php/docker-php/src/Stream/PushStream.php b/app/vendor/beluga-php/docker-php/src/Stream/PushStream.php new file mode 100644 index 000000000..4b7242db9 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/src/Stream/PushStream.php @@ -0,0 +1,21 @@ +stream = $stream; + } + + public function __toString() + { + return $this->stream->__toString(); + } + + public function close(): void + { + $this->stream->close(); + } + + public function detach() + { + return $this->stream->detach(); + } + + public function getSize(): ?int + { + return null; + } + + public function tell(): int + { + return $this->stream->tell(); + } + + public function eof(): bool + { + return $this->stream->eof(); + } + + public function isSeekable(): bool + { + return $this->stream->isSeekable(); + } + + public function seek($offset, $whence = \SEEK_SET): void + { + $this->stream->seek($offset, $whence); + } + + public function rewind(): void + { + $this->stream->rewind(); + } + + public function isWritable(): bool + { + return $this->stream->isWritable(); + } + + public function write($string): int + { + return $this->stream->write($string); + } + + public function isReadable(): bool + { + return $this->stream->isReadable(); + } + + public function read($length): string + { + return $this->stream->read($length); + } + + public function getContents(): string + { + return $this->stream->getContents(); + } + + public function getMetadata($key = null) + { + return $this->stream->getMetadata($key); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Context/ContextBuilderTest.php b/app/vendor/beluga-php/docker-php/tests/Context/ContextBuilderTest.php new file mode 100644 index 000000000..613964f01 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Context/ContextBuilderTest.php @@ -0,0 +1,305 @@ +getContext(); + + $this->assertFileExists($context->getDirectory().'/Dockerfile'); + } + + public function testHasDefaultFrom(): void + { + $contextBuilder = new ContextBuilder(); + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile($context->getDirectory().'/Dockerfile', 'FROM base'); + } + + public function testUsesCustomFrom(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->from('ubuntu:precise'); + + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile($context->getDirectory().'/Dockerfile', 'FROM ubuntu:precise'); + } + + public function testMultipleFrom(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->from('ubuntu:precise'); + + $contextBuilder->from('test'); + + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertSame("FROM ubuntu:precise\nFROM test", $content); + } + + public function testCreatesTmpDirectory(): void + { + $contextBuilder = new ContextBuilder(); + $context = $contextBuilder->getContext(); + + $this->assertFileExists($context->getDirectory()); + } + + public function testWriteTmpFiles(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->add('/foo', 'random content'); + + $context = $contextBuilder->getContext(); + $filename = preg_replace(<<getDockerfileContent()); + + $this->assertStringEqualsFile($context->getDirectory().'/'.$filename, 'random content'); + } + + public function testWriteTmpFileFromStream(): void + { + $contextBuilder = new ContextBuilder(); + $stream = fopen('php://temp', 'r+'); + $this->assertSame(7, fwrite($stream, 'test123')); + rewind($stream); + $contextBuilder->addStream('/foo', $stream); + + $context = $contextBuilder->getContext(); + $filename = preg_replace(<<getDockerfileContent()); + $this->assertStringEqualsFile($context->getDirectory().'/'.$filename, 'test123'); + } + + public function testWriteTmpFileFromDisk(): void + { + $contextBuilder = new ContextBuilder(); + $file = tempnam('', ''); + file_put_contents($file, 'abc'); + $this->assertStringEqualsFile($file, 'abc'); + $contextBuilder->addFile('/foo', $file); + + $context = $contextBuilder->getContext(); + $filename = preg_replace(<<getDockerfileContent()); + $this->assertStringEqualsFile($context->getDirectory().'/'.$filename, 'abc'); + } + + public function testWriteTmpDirFromDisk(): void + { + $contextBuilder = new ContextBuilder(); + $dir = tempnam(sys_get_temp_dir(), ''); + unlink($dir); + mkdir($dir); + file_put_contents($dir.'/test', 'abc'); + $this->assertStringEqualsFile($dir.'/test', 'abc'); + $contextBuilder->addFile('/foo', $dir); + + $context = $contextBuilder->getContext(); + $filename = preg_replace(<<getDockerfileContent()); + $this->assertStringEqualsFile($context->getDirectory().'/'.$filename.'/test', 'abc'); + } + + public function testWritesAddCommands(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->add('/foo', 'foo file content'); + + $context = $contextBuilder->getContext(); + + $this->assertMatchesRegularExpression( + <<getDockerfileContent() + ); + } + + public function testWritesRunCommands(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->run('foo command'); + + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile( + $context->getDirectory().'/Dockerfile', + <<env('foo', 'bar'); + + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile( + $context->getDirectory().'/Dockerfile', + <<copy('/foo', '/bar'); + + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile( + $context->getDirectory().'/Dockerfile', + <<workdir('/foo'); + + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile( + $context->getDirectory().'/Dockerfile', + <<expose('80'); + + $context = $contextBuilder->getContext(); + + $this->assertStringEqualsFile( + $context->getDirectory().'/Dockerfile', + <<user('user1'); + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringEndsWith("\nUSER user1", $content); + + $contextBuilder->user('user2'); + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringEndsWith("\nUSER user1\nUSER user2", $content); + } + + public function testWritesVolumeCommands(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->volume('volume1'); + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringEndsWith("\nVOLUME volume1", $content); + + $contextBuilder->volume('volume2'); + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringEndsWith("\nVOLUME volume1\nVOLUME volume2", $content); + } + + public function testWritesCommandCommand(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->command('test123'); + + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringEndsWith("\nCMD test123", $content); + + $contextBuilder->command('changed'); + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringNotContainsString('CMD test123', $content); + $this->assertStringEndsWith("\nCMD changed", $content); + } + + public function testWritesEntrypointCommand(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->entrypoint('test123'); + + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringEndsWith("\nENTRYPOINT test123", $content); + + $contextBuilder->entrypoint('changed'); + $content = $contextBuilder->getContext()->getDockerfileContent(); + $this->assertStringNotContainsString('ENTRYPOINT test123', $content); + $this->assertStringEndsWith("\nENTRYPOINT changed", $content); + } + + public function testTar(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->setFormat(Context::FORMAT_TAR); + $context = $contextBuilder->getContext(); + $content = $context->read(); + $this->assertIsString($content); + $this->assertSame($context->toTar(), $content); + } + + public function testTraverseSymlinks(): void + { + $contextBuilder = new ContextBuilder(); + $dir = tempnam('', ''); + unlink($dir); + mkdir($dir); + $file = $dir.'/test'; + + file_put_contents($file, 'abc'); + + $linkFile = $file.'-symlink'; + symlink($file, $linkFile); + + $contextBuilder->addFile('/foo', $dir); + + $context = $contextBuilder->getContext(); + + $filename = preg_replace(<<getDockerfileContent()); + unlink($file); + $context->setCleanup(false); + $this->assertStringEqualsFile($context->getDirectory().'/'.$filename.'/test-symlink', 'abc'); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Context/ContextTest.php b/app/vendor/beluga-php/docker-php/tests/Context/ContextTest.php new file mode 100644 index 000000000..1038213b7 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Context/ContextTest.php @@ -0,0 +1,66 @@ +run(); + + $this->assertSame(\strlen($process->getOutput()), \strlen($context->toTar())); + } + + public function testReturnsValidTarStream(): void + { + $directory = __DIR__.\DIRECTORY_SEPARATOR.'context-test'; + + $context = new Context($directory); + $this->assertIsResource($context->toStream()); + } + + public function testDirectorySetter(): void + { + $context = new Context('abc'); + $this->assertSame('abc', $context->getDirectory()); + $context->setDirectory('def'); + $this->assertSame('def', $context->getDirectory()); + } + + public function testTarFailed(): void + { + $this->expectException(\Symfony\Component\Process\Exception\ProcessFailedException::class); + + $directory = __DIR__.\DIRECTORY_SEPARATOR.'context-test'; + $path = getenv('PATH'); + putenv('PATH=/'); + $context = new Context($directory); + try { + $context->toTar(); + } finally { + putenv("PATH=$path"); + } + } + + public function testRemovesFilesOnDestruct(): void + { + $context = (new ContextBuilder())->getContext(); + $file = $context->getDirectory().'/Dockerfile'; + $this->assertFileExists($file); + + unset($context); + + $this->assertFileDoesNotExist($file); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Context/context-test/Dockerfile b/app/vendor/beluga-php/docker-php/tests/Context/context-test/Dockerfile new file mode 100644 index 000000000..5cf0c8ad4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Context/context-test/Dockerfile @@ -0,0 +1,3 @@ +FROM busybox + +RUN echo 'hello world' \ No newline at end of file diff --git a/app/vendor/beluga-php/docker-php/tests/DockerClientFactoryTest.php b/app/vendor/beluga-php/docker-php/tests/DockerClientFactoryTest.php new file mode 100644 index 000000000..ed09a955c --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/DockerClientFactoryTest.php @@ -0,0 +1,71 @@ +assertInstanceOf(ClientInterface::class, DockerClientFactory::create()); + } + + public function testCreateFromEnvWithoutCertPath(): void + { + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('Connection to docker has been set to use TLS, but no PATH is defined for certificate in DOCKER_CERT_PATH docker environment variable'); + + putenv('DOCKER_TLS_VERIFY=1'); + DockerClientFactory::createFromEnv(); + } + + public function testCreateCustomCa(): void + { + putenv('DOCKER_TLS_VERIFY=1'); + putenv('DOCKER_CERT_PATH=/tmp'); + + $count = \count(get_resources('stream-context')); + $client = DockerClientFactory::createFromEnv(); + $this->assertInstanceOf(ClientInterface::class, $client); + + $contexts = get_resources('stream-context'); + $this->assertCount($count + 1, $contexts); + + // Get the last stream context. + $context = stream_context_get_options(end($contexts)); + $this->assertSame('/tmp/ca.pem', $context['ssl']['cafile']); + $this->assertSame('/tmp/cert.pem', $context['ssl']['local_cert']); + $this->assertSame('/tmp/key.pem', $context['ssl']['local_pk']); + } + + public function testCreateCustomPeerName(): void + { + putenv('DOCKER_TLS_VERIFY=1'); + putenv('DOCKER_CERT_PATH=/abc'); + putenv('DOCKER_PEER_NAME=test'); + + $count = \count(get_resources('stream-context')); + $client = DockerClientFactory::createFromEnv(); + $this->assertInstanceOf(ClientInterface::class, $client); + + $contexts = get_resources('stream-context'); + $this->assertCount($count + 1, $contexts); + + // Get the last stream context. + $context = stream_context_get_options(end($contexts)); + $this->assertSame('/abc/ca.pem', $context['ssl']['cafile']); + $this->assertSame('/abc/cert.pem', $context['ssl']['local_cert']); + $this->assertSame('/abc/key.pem', $context['ssl']['local_pk']); + $this->assertSame('test', $context['ssl']['peer_name']); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/DockerTest.php b/app/vendor/beluga-php/docker-php/tests/DockerTest.php new file mode 100644 index 000000000..baba25237 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/DockerTest.php @@ -0,0 +1,15 @@ +assertInstanceOf(Docker::class, Docker::create()); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Resource/ContainerResourceTest.php b/app/vendor/beluga-php/docker-php/tests/Resource/ContainerResourceTest.php new file mode 100644 index 000000000..eb6024a18 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Resource/ContainerResourceTest.php @@ -0,0 +1,138 @@ +imageCreate('', [ + 'fromImage' => 'busybox:latest', + ]); + } + + public function testAttach(): void + { + $containerConfig = new ContainersCreatePostBody(); + $containerConfig->setImage('busybox:latest'); + $containerConfig->setCmd(['echo', '-n', 'output']); + $containerConfig->setAttachStdout(true); + $containerConfig->setLabels(['docker-php-test' => 'true']); + + $containerCreateResult = $this->getManager()->containerCreate($containerConfig); + $dockerRawStream = $this->getManager()->containerAttach( + $containerCreateResult->getId(), + [ + 'stream' => true, + 'stdout' => true, + ] + ); + + $stdoutFull = ''; + $dockerRawStream->onStdout(function ($stdout) use (&$stdoutFull): void { + $stdoutFull .= $stdout; + }); + + $this->getManager()->containerStart($containerCreateResult->getId()); + $this->getManager()->containerWait($containerCreateResult->getId()); + + $dockerRawStream->wait(); + + $this->assertSame('output', $stdoutFull); + } + + public function testAttachWebsocket(): void + { + $this->markTestSkipped('Since docker API 1.28 Websockets are binary so this test needs work. ' . + 'See https://github.com/xtermjs/xterm.js/issues/883'); + $containerConfig = new ContainersCreatePostBody(); + $containerConfig->setImage('busybox:latest'); + $containerConfig->setCmd(['sh']); + $containerConfig->setAttachStdout(true); + $containerConfig->setAttachStderr(true); + $containerConfig->setAttachStdin(false); + $containerConfig->setOpenStdin(true); + $containerConfig->setTty(true); + $containerConfig->setLabels(new \ArrayObject(['docker-php-test' => 'true'])); + + $containerCreateResult = $this->getManager()->containerCreate($containerConfig); + $webSocketStream = $this->getManager()->containerAttachWebsocket( + $containerCreateResult->getId(), + [ + 'stream' => true, + 'stdout' => true, + 'stderr' => true, + 'stdin' => true, + ] + ); + + $this->getManager()->containerStart($containerCreateResult->getId()); + + // Read the bash first line + $webSocketStream->read(); + + // No output after that so it should be false + $this->assertFalse($webSocketStream->read()); + + // Write something to the container + $webSocketStream->write("echo test\n"); + + // Test for echo present (stdin) + $output = ''; + + while (false !== ($data = $webSocketStream->read())) { + $output .= $data; + } + + $this->assertContains('echo', $output); + + // Exit the container + $webSocketStream->write("exit\n"); + } + + public function testLogs(): void + { + $this->markTestSkipped('Since at least 1.43 docker API does not return a `application/vnd.docker.raw-stream` ' . + 'but a `application/vnd.docker.multiplexed-stream` so this needs review. '. + 'See https://github.com/beluga-php/docker-php/issues/19'); + $containerConfig = new ContainersCreatePostBody(); + $containerConfig->setImage('busybox:latest'); + $containerConfig->setCmd(['echo', '-n', 'output']); + $containerConfig->setAttachStdout(true); + $containerConfig->setLabels(['docker-php-test' => 'true']); + + $containerCreateResult = $this->getManager()->containerCreate($containerConfig); + + $this->getManager()->containerStart($containerCreateResult->getId()); + $this->getManager()->containerWait($containerCreateResult->getId()); + + $logsStream = $this->getManager()->containerLogs( + $containerCreateResult->getId(), + [ + 'stdout' => true, + 'stderr' => true, + ], + Docker::FETCH_OBJECT + ); + + self::assertInstanceOf(DockerRawStream::class, $logsStream); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Resource/ExecResourceTest.php b/app/vendor/beluga-php/docker-php/tests/Resource/ExecResourceTest.php new file mode 100644 index 000000000..65064f2b5 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Resource/ExecResourceTest.php @@ -0,0 +1,92 @@ +createContainer(); + + $execConfig = new ContainersIdExecPostBody(); + $execConfig->setAttachStdout(true); + $execConfig->setAttachStderr(true); + $execConfig->setCmd(['echo', 'output']); + + $execCreateResult = $this->getManager()->containerExec($createContainerResult->getId(), $execConfig); + + $execStartConfig = new ExecIdStartPostBody(); + $execStartConfig->setDetach(false); + $execStartConfig->setTty(false); + + $stream = $this->getManager()->execStart($execCreateResult->getId(), $execStartConfig); + + $this->assertInstanceOf(DockerRawStream::class, $stream); + + $stdoutFull = ''; + $stream->onStdout(function ($stdout) use (&$stdoutFull): void { + $stdoutFull .= $stdout; + }); + $stream->wait(); + + $this->assertSame("output\n", $stdoutFull); + + self::getDocker()->containerKill($createContainerResult->getId(), [ + 'signal' => 'SIGKILL', + ]); + } + + public function testExecFind(): void + { + $createContainerResult = $this->createContainer(); + + $execConfig = new ContainersIdExecPostBody(); + $execConfig->setCmd(['/bin/true']); + $execCreateResult = $this->getManager()->containerExec($createContainerResult->getId(), $execConfig); + + $execStartConfig = new ExecIdStartPostBody(); + $execStartConfig->setDetach(false); + $execStartConfig->setTty(false); + + $this->getManager()->execStart($execCreateResult->getId(), $execStartConfig); + + $execFindResult = $this->getManager()->execInspect($execCreateResult->getId()); + + $this->assertInstanceOf(ExecIdJsonGetResponse200::class, $execFindResult); + + self::getDocker()->containerKill($createContainerResult->getId(), [ + 'signal' => 'SIGKILL', + ]); + } + + private function createContainer() + { + $containerConfig = new ContainersCreatePostBody(); + $containerConfig->setImage('busybox:latest'); + $containerConfig->setCmd(['sh']); + $containerConfig->setOpenStdin(true); + $containerConfig->setLabels(new \ArrayObject(['docker-php-test' => 'true'])); + + $containerCreateResult = self::getDocker()->containerCreate($containerConfig); + self::getDocker()->containerStart($containerCreateResult->getId()); + + return $containerCreateResult; + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Resource/ImageResourceTest.php b/app/vendor/beluga-php/docker-php/tests/Resource/ImageResourceTest.php new file mode 100644 index 000000000..8e88982da --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Resource/ImageResourceTest.php @@ -0,0 +1,91 @@ +from('ubuntu:precise'); + $contextBuilder->add('/test', 'test file content'); + + $context = $contextBuilder->getContext(); + $buildStream = $this->getManager()->imageBuild($context->read(), ['t' => 'test-image']); + + $this->assertInstanceOf('Docker\Stream\BuildStream', $buildStream); + + $lastMessage = ''; + + $buildStream->onFrame(function ($frame) use (&$lastMessage): void { + $lastMessage = $frame->getStream(); + }); + $buildStream->wait(); + + $this->assertStringContainsString('Successfully', $lastMessage); + } + + public function testCreate(): void + { + $createImageStream = $this->getManager()->imageCreate('', [ + 'fromImage' => 'registry:latest', + ]); + + $this->assertInstanceOf('Docker\Stream\CreateImageStream', $createImageStream); + + $firstMessage = null; + + $createImageStream->onFrame(function ($createImageInfo) use (&$firstMessage): void { + if (null === $firstMessage) { + $firstMessage = $createImageInfo->getStatus(); + } + }); + $createImageStream->wait(); + + $this->assertStringContainsString('Pulling from library/registry', $firstMessage); + } + + public function testPushStream(): void + { + $contextBuilder = new ContextBuilder(); + $contextBuilder->from('ubuntu:precise'); + $contextBuilder->add('/test', 'test file content'); + + $context = $contextBuilder->getContext(); + $this->getManager()->imageBuild($context->read(), ['t' => 'localhost:5000/test-image'], [], Client::FETCH_OBJECT); + + $registryConfig = new AuthConfig(); + $registryConfig->setServeraddress('localhost:5000'); + $pushImageStream = $this->getManager()->imagePush('localhost:5000/test-image', [], [ + 'X-Registry-Auth' => $registryConfig, + ]); + + $this->assertInstanceOf('Docker\Stream\PushStream', $pushImageStream); + + $firstMessage = null; + + $pushImageStream->onFrame(function ($pushImageInfo) use (&$firstMessage): void { + if (null === $firstMessage) { + $firstMessage = $pushImageInfo->getStatus(); + } + }); + $pushImageStream->wait(); + + $this->assertStringContainsString('repository [localhost:5000/test-image]', $firstMessage); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Resource/SystemResourceTest.php b/app/vendor/beluga-php/docker-php/tests/Resource/SystemResourceTest.php new file mode 100644 index 000000000..fb1badf30 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Resource/SystemResourceTest.php @@ -0,0 +1,41 @@ +getManager()->systemEvents([ + 'since' => (string) (time() - 1), + 'until' => (string) (time() + 4), + ]); + + $lastEvent = null; + + $stream->onFrame(function ($event) use (&$lastEvent): void { + $lastEvent = $event; + }); + + self::getDocker()->imageCreate('', [ + 'fromImage' => 'busybox:latest', + ]); + + $stream->wait(); + + $this->assertInstanceOf(EventMessage::class, $lastEvent); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/Resource/script/daemon.sh b/app/vendor/beluga-php/docker-php/tests/Resource/script/daemon.sh new file mode 100755 index 000000000..8231b1dec --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Resource/script/daemon.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +terminate() { + echo "test" + exit 0 +} + +trap terminate SIGHUP SIGINT SIGTERM + +while true; do + sleep 1000 & wait +done diff --git a/app/vendor/beluga-php/docker-php/tests/Resource/script/kill.sh b/app/vendor/beluga-php/docker-php/tests/Resource/script/kill.sh new file mode 100644 index 000000000..0b17b0bc4 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Resource/script/kill.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +trap_with_arg() { + func="$1" ; shift + for sig ; do + trap "$func $sig" "$sig" + done +} + +func_trap() { + echo $1 + exit 0 +} + +trap_with_arg func_trap HUP INT TERM EXIT + +while true; do + sleep 1000 & wait +done + diff --git a/app/vendor/beluga-php/docker-php/tests/Stream/MultiJsonStreamTest.php b/app/vendor/beluga-php/docker-php/tests/Stream/MultiJsonStreamTest.php new file mode 100644 index 000000000..e3683e5c3 --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/Stream/MultiJsonStreamTest.php @@ -0,0 +1,64 @@ +rewind(); + + $serializer = $this->getMockBuilder(SerializerInterface::class) + ->getMock(); + + $callIndex = 0; + $serializer + ->expects($this->exactly(\count($jsonParts))) + ->method('deserialize') + ->willReturnCallback(function ($data, $class, $format, $context) use ($jsonParts, &$callIndex) { + $this->assertEquals($jsonParts[$callIndex], $data); + $this->assertEquals(BuildInfo::class, $class); + $this->assertEquals('json', $format); + $this->assertEquals([], $context); + $callIndex++; + return null; + }); + + $stub = $this->getMockForAbstractClass(MultiJsonStream::class, [$stream, $serializer]); + $stub->expects($this->any()) + ->method('getDecodeClass') + ->willReturn('BuildInfo'); + + $stub->wait(); + } +} diff --git a/app/vendor/beluga-php/docker-php/tests/TestCase.php b/app/vendor/beluga-php/docker-php/tests/TestCase.php new file mode 100644 index 000000000..46097c0fa --- /dev/null +++ b/app/vendor/beluga-php/docker-php/tests/TestCase.php @@ -0,0 +1,21 @@ +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if ( + (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) + || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) + ) { + return include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'); + } +} + +return include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'; diff --git a/app/vendor/brick/varexporter/CHANGELOG.md b/app/vendor/brick/varexporter/CHANGELOG.md index 762b4fbe2..923e9c3b0 100644 --- a/app/vendor/brick/varexporter/CHANGELOG.md +++ b/app/vendor/brick/varexporter/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [0.7.0](https://github.com/brick/varexporter/releases/tag/0.7.0) - 2026-01-06 + +✨ **New features** + +- Added `VarExporter::INLINE_LITERAL_LIST`, similar to `INLINE_SCALAR_LIST` but includes enum values + +💥 **BC breaks** + +- Minimum PHP version is now `8.2` + ## [0.6.0](https://github.com/brick/varexporter/releases/tag/0.6.0) - 2025-02-20 💥 **BC breaks** diff --git a/app/vendor/brick/varexporter/composer.json b/app/vendor/brick/varexporter/composer.json index 53554754b..682066f47 100644 --- a/app/vendor/brick/varexporter/composer.json +++ b/app/vendor/brick/varexporter/composer.json @@ -7,13 +7,13 @@ ], "license": "MIT", "require": { - "php": "^8.1", + "php": "^8.2", "nikic/php-parser": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.5", + "phpunit/phpunit": "^11.0", "php-coveralls/php-coveralls": "^2.2", - "vimeo/psalm": "6.8.4" + "vimeo/psalm": "6.14.3" }, "autoload": { "psr-4": { diff --git a/app/vendor/brick/varexporter/src/ExportException.php b/app/vendor/brick/varexporter/src/ExportException.php index 662c32c2e..18049a67e 100644 --- a/app/vendor/brick/varexporter/src/ExportException.php +++ b/app/vendor/brick/varexporter/src/ExportException.php @@ -4,9 +4,12 @@ namespace Brick\VarExporter; +use Exception; use Throwable; -final class ExportException extends \Exception +use function implode; + +final class ExportException extends Exception { /** * @param string[] $path @@ -25,7 +28,7 @@ public function __construct(string $message, array $path, ?Throwable $previous = * * @param string[] $path */ - public static function pathToString(array $path) : string + public static function pathToString(array $path): string { return '[' . implode('][', $path) . ']'; } diff --git a/app/vendor/brick/varexporter/src/Internal/GenericExporter.php b/app/vendor/brick/varexporter/src/Internal/GenericExporter.php index 7757ccdbe..5f677edf6 100644 --- a/app/vendor/brick/varexporter/src/Internal/GenericExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/GenericExporter.php @@ -6,6 +6,21 @@ use Brick\VarExporter\ExportException; use Brick\VarExporter\VarExporter; +use ReflectionObject; +use UnitEnum; + +use function array_is_list; +use function array_merge; +use function array_unshift; +use function count; +use function gettype; +use function implode; +use function is_array; +use function is_object; +use function is_scalar; +use function spl_object_id; +use function sprintf; +use function var_export; /** * The main exporter implementation, that handles variables of any type. @@ -18,87 +33,73 @@ */ final class GenericExporter { - /** - * @var ObjectExporter[] - */ - private array $objectExporters = []; + public readonly bool $addTypeHints; - /** - * The visited objects, to detect circular references. - * - * This is a two-level map of parent object id => child object id => path where the object first appeared. - * - * @var array> - */ - private array $visitedObjects = []; + public readonly bool $skipDynamicProperties; - /** - * @psalm-readonly - */ - public bool $addTypeHints; + public readonly bool $inlineArray; - /** - * @psalm-readonly - */ - public bool $skipDynamicProperties; + public readonly bool $inlineScalarList; - /** - * @psalm-readonly - */ - public bool $inlineArray; + public readonly bool $inlineLiteralList; - /** - * @psalm-readonly - */ - public bool $inlineScalarList; + public readonly bool $closureSnapshotUses; - /** - * @psalm-readonly - */ - public bool $closureSnapshotUses; + public readonly bool $trailingCommaInArray; + + public readonly int $indentLevel; /** - * @psalm-readonly + * @var ObjectExporter[] */ - public bool $trailingCommaInArray; + private readonly array $objectExporters; /** - * @psalm-readonly + * The visited objects, to detect circular references. + * + * This is a two-level map of parent object id => child object id => path where the object first appeared. + * + * @var array> */ - public int $indentLevel; + private array $visitedObjects = []; public function __construct(int $options, int $indentLevel = 0) { - $this->objectExporters[] = new ObjectExporter\StdClassExporter($this); + $objectExporters = [ + new ObjectExporter\StdClassExporter($this), + ]; if (($options & VarExporter::NO_CLOSURES) === 0) { - $this->objectExporters[] = new ObjectExporter\ClosureExporter($this); + $objectExporters[] = new ObjectExporter\ClosureExporter($this); } if (($options & VarExporter::NO_SET_STATE) === 0) { - $this->objectExporters[] = new ObjectExporter\SetStateExporter($this); + $objectExporters[] = new ObjectExporter\SetStateExporter($this); } - $this->objectExporters[] = new ObjectExporter\InternalClassExporter($this); + $objectExporters[] = new ObjectExporter\InternalClassExporter($this); if (($options & VarExporter::NO_SERIALIZE) === 0) { - $this->objectExporters[] = new ObjectExporter\SerializeExporter($this); + $objectExporters[] = new ObjectExporter\SerializeExporter($this); } if (($options & VarExporter::NO_ENUMS) === 0) { - $this->objectExporters[] = new ObjectExporter\EnumExporter($this); + $objectExporters[] = new ObjectExporter\EnumExporter($this); } if (($options & VarExporter::NOT_ANY_OBJECT) === 0) { - $this->objectExporters[] = new ObjectExporter\AnyObjectExporter($this); + $objectExporters[] = new ObjectExporter\AnyObjectExporter($this); } - $this->addTypeHints = (bool) ($options & VarExporter::ADD_TYPE_HINTS); - $this->skipDynamicProperties = (bool) ($options & VarExporter::SKIP_DYNAMIC_PROPERTIES); - $this->inlineArray = (bool) ($options & VarExporter::INLINE_ARRAY); - $this->inlineScalarList = (bool) ($options & VarExporter::INLINE_SCALAR_LIST); - $this->closureSnapshotUses = (bool) ($options & VarExporter::CLOSURE_SNAPSHOT_USES); - $this->trailingCommaInArray = (bool) ($options & VarExporter::TRAILING_COMMA_IN_ARRAY); + $this->objectExporters = $objectExporters; + + $this->addTypeHints = (bool) ($options & VarExporter::ADD_TYPE_HINTS); + $this->skipDynamicProperties = (bool) ($options & VarExporter::SKIP_DYNAMIC_PROPERTIES); + $this->inlineArray = (bool) ($options & VarExporter::INLINE_ARRAY); + $this->inlineScalarList = (bool) ($options & VarExporter::INLINE_SCALAR_LIST); + $this->inlineLiteralList = (bool) ($options & VarExporter::INLINE_LITERAL_LIST); + $this->closureSnapshotUses = (bool) ($options & VarExporter::CLOSURE_SNAPSHOT_USES); + $this->trailingCommaInArray = (bool) ($options & VarExporter::TRAILING_COMMA_IN_ARRAY); $this->indentLevel = $indentLevel; } @@ -112,7 +113,7 @@ public function __construct(int $options, int $indentLevel = 0) * * @throws ExportException */ - public function export(mixed $var, array $path, array $parentIds) : array + public function export(mixed $var, array $path, array $parentIds): array { if ($var === null) { return ['null']; @@ -136,8 +137,6 @@ public function export(mixed $var, array $path, array $parentIds) : array } /** - * @psalm-suppress MixedAssignment - * * @param array $array The array to export. * @param string[] $path The path to the current array in the array/object graph. * @param int[] $parentIds The ids of all objects higher in the graph. @@ -145,8 +144,10 @@ public function export(mixed $var, array $path, array $parentIds) : array * @return string[] The lines of code. * * @throws ExportException + * + * @psalm-suppress MixedAssignment */ - public function exportArray(array $array, array $path, array $parentIds) : array + public function exportArray(array $array, array $path, array $parentIds): array { if (! $array) { return ['[]']; @@ -155,11 +156,13 @@ public function exportArray(array $array, array $path, array $parentIds) : array $result = []; $count = count($array); - $isList = array_keys($array) === range(0, $count - 1); + $isList = array_is_list($array); $current = 0; - $inline = $this->inlineArray || ($this->inlineScalarList && $isList && $this->isScalarList($array)); + $inline = $this->inlineArray + || ($this->inlineScalarList && $isList && $this->isScalarList($array)) + || ($this->inlineLiteralList && $isList && $this->isLiteralList($array)); foreach ($array as $key => $value) { $isLast = (++$current === $count); @@ -200,24 +203,6 @@ public function exportArray(array $array, array $path, array $parentIds) : array return $result; } - /** - * Returns whether the given array only contains scalar values. - * - * Types considered scalar here are int, bool, float, string and null. - * If the array is empty, this method returns true. - * - */ - private function isScalarList(array $array) : bool - { - foreach ($array as $value) { - if ($value !== null && ! is_scalar($value)) { - return false; - } - } - - return true; - } - /** * @param object $object The object to export. * @param string[] $path The path to the current object in the array/object graph. @@ -227,7 +212,7 @@ private function isScalarList(array $array) : bool * * @throws ExportException */ - public function exportObject(object $object, array $path, array $parentIds) : array + public function exportObject(object $object, array $path, array $parentIds): array { $id = spl_object_id($object); @@ -237,14 +222,14 @@ public function exportObject(object $object, array $path, array $parentIds) : ar 'Object of class "%s" has a circular reference at %s. ' . 'Circular references are currently not supported.', $object::class, - ExportException::pathToString($this->visitedObjects[$parentId][$id]) + ExportException::pathToString($this->visitedObjects[$parentId][$id]), ), $path); } $this->visitedObjects[$parentId][$id] = $path; } - $reflectionObject = new \ReflectionObject($object); + $reflectionObject = new ReflectionObject($object); foreach ($this->objectExporters as $objectExporter) { if ($objectExporter->supports($reflectionObject)) { @@ -266,9 +251,9 @@ public function exportObject(object $object, array $path, array $parentIds) : ar * * @return string[] The indented lines of code. */ - public function indent(array $lines) : array + public function indent(array $lines): array { - foreach ($lines as & $value) { + foreach ($lines as &$value) { if ($value !== '') { $value = ' ' . $value; } @@ -284,11 +269,45 @@ public function indent(array $lines) : array * * @return string[] */ - public function wrap(array $lines, string $prepend, string $append) : array + public function wrap(array $lines, string $prepend, string $append): array { $lines[0] = $prepend . $lines[0]; $lines[count($lines) - 1] .= $append; return $lines; } + + /** + * Returns whether the given array only contains scalar values. + * + * Types considered scalar here are int, bool, float, string and null. + * If the array is empty, this method returns true. + */ + private function isScalarList(array $array): bool + { + foreach ($array as $value) { + if ($value !== null && ! is_scalar($value)) { + return false; + } + } + + return true; + } + + /** + * Returns whether the given array only contains literal values. + * + * Values considered literal are: int, float, string, bool, null, and enum values. + * If the array is empty, this method returns true. + */ + private function isLiteralList(array $array): bool + { + foreach ($array as $value) { + if ($value !== null && ! is_scalar($value) && ! $value instanceof UnitEnum) { + return false; + } + } + + return true; + } } diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter.php index d3e7eee8a..02fb7c355 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter.php @@ -5,6 +5,10 @@ namespace Brick\VarExporter\Internal; use Brick\VarExporter\ExportException; +use ReflectionClass; +use ReflectionObject; + +use function array_merge; /** * An exporter that handles a specific type of object. @@ -13,33 +17,31 @@ */ abstract class ObjectExporter { - protected GenericExporter $exporter; - - public function __construct(GenericExporter $exporter) - { - $this->exporter = $exporter; + public function __construct( + protected readonly GenericExporter $exporter, + ) { } /** * Returns whether this exporter supports the given object. * - * @param \ReflectionObject $reflectionObject A reflection of the object. + * @param ReflectionObject $reflectionObject A reflection of the object. */ - abstract public function supports(\ReflectionObject $reflectionObject) : bool; + abstract public function supports(ReflectionObject $reflectionObject): bool; /** * Exports the given object. * - * @param object $object The object to export. - * @param \ReflectionObject $reflectionObject A reflection of the object. - * @param string[] $path The path to the current object in the array/object graph. - * @param int[] $parentIds The ids of all objects higher in the graph. + * @param object $object The object to export. + * @param ReflectionObject $reflectionObject A reflection of the object. + * @param string[] $path The path to the current object in the array/object graph. + * @param int[] $parentIds The ids of all objects higher in the graph. * * @return string[] The lines of code. * * @throws ExportException */ - abstract public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array; + abstract public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array; /** * Returns the code to create a new object of the given class. @@ -48,7 +50,7 @@ abstract public function export(object $object, \ReflectionObject $reflectionObj * * @return string[] The lines of code. */ - final protected function getCreateObjectCode(\ReflectionClass $class) : array + final protected function getCreateObjectCode(ReflectionClass $class): array { $className = '\\' . $class->getName(); @@ -75,12 +77,12 @@ final protected function getCreateObjectCode(\ReflectionClass $class) : array * * @return string[] The lines of code, wrapped in a closure. */ - final protected function wrapInClosure(array $code) : array + final protected function wrapInClosure(array $code): array { return array_merge( ['(static function() {'], $this->exporter->indent($code), - ['})()'] + ['})()'], ); } } diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/AnyObjectExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/AnyObjectExporter.php index 573d6c357..2ab0416d1 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/AnyObjectExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/AnyObjectExporter.php @@ -6,6 +6,16 @@ use Brick\VarExporter\Internal\ObjectExporter; use Override; +use ReflectionClass; +use ReflectionObject; +use ReflectionProperty; + +use function array_key_exists; +use function array_merge; +use function method_exists; +use function preg_match; +use function spl_object_id; +use function var_export; /** * Handles any class through direct property access and bound closures. @@ -18,7 +28,7 @@ final class AnyObjectExporter extends ObjectExporter { #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { return true; } @@ -27,15 +37,15 @@ public function supports(\ReflectionObject $reflectionObject) : bool * @psalm-suppress MixedAssignment */ #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { $lines = $this->getCreateObjectCode($reflectionObject); $objectAsArray = (array) $object; $current = $this->exporter->skipDynamicProperties - ? new \ReflectionClass($object) // properties from class definition only - : $reflectionObject; // properties from class definition + dynamic properties + ? new ReflectionClass($object) // properties from class definition only + : $reflectionObject; // properties from class definition + dynamic properties $isParentClass = false; @@ -68,13 +78,13 @@ public function export(object $object, \ReflectionObject $reflectionObject, arra if (array_key_exists($key, $objectAsArray)) { $value = $objectAsArray[$key]; - if ($property->isPublic() && !(method_exists($property, 'isReadOnly') && $property->isReadOnly())) { + if ($property->isPublic() && ! (method_exists($property, 'isReadOnly') && $property->isReadOnly())) { $publicNonReadonlyProperties[$name] = $value; } else { $nonPublicOrPublicReadonlyProperties[$name] = $value; } } else { - if ($property->isPublic() && !(method_exists($property, 'isReadOnly') && $property->isReadOnly())) { + if ($property->isPublic() && ! (method_exists($property, 'isReadOnly') && $property->isReadOnly())) { $unsetPublicNonReadonlyProperties[] = $name; } else { $unsetNonPublicOrPublicReadonlyProperties[] = $name; @@ -153,9 +163,8 @@ public function export(object $object, \ReflectionObject $reflectionObject, arra /** * Returns the key of the given property in the object-to-array cast. - * */ - private function getPropertyKey(\ReflectionProperty $property) : string + private function getPropertyKey(ReflectionProperty $property): string { $name = $property->getName(); @@ -170,7 +179,7 @@ private function getPropertyKey(\ReflectionProperty $property) : string return $name; } - private function escapePropName(string $var) : string + private function escapePropName(string $var): string { if (preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $var) === 1) { return $var; diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter.php index 1e6120e71..1c2ecb734 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter.php @@ -15,8 +15,20 @@ use PhpParser\NodeVisitor\NameResolver; use PhpParser\Parser; use PhpParser\ParserFactory; -use PhpParser\PhpVersion; use ReflectionFunction; +use ReflectionObject; + +use function array_keys; +use function array_merge; +use function assert; +use function count; +use function file_get_contents; +use function implode; +use function is_string; +use function sprintf; +use function str_ends_with; + +use const PHP_EOL; /** * Handles closures. @@ -28,17 +40,17 @@ final class ClosureExporter extends ObjectExporter private ?Parser $parser = null; #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { - return $reflectionObject->getName() === \Closure::class; + return $reflectionObject->getName() === Closure::class; } #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { assert($object instanceof Closure); - $reflectionFunction = new \ReflectionFunction($object); + $reflectionFunction = new ReflectionFunction($object); $file = $reflectionFunction->getFileName(); $line = $reflectionFunction->getStartLine(); @@ -62,7 +74,7 @@ public function export(object $object, \ReflectionObject $reflectionObject, arra private function getParser(): Parser { if ($this->parser === null) { - $this->parser = (new ParserFactory)->createForHostVersion(); + $this->parser = (new ParserFactory())->createForHostVersion(); } return $this->parser; @@ -78,13 +90,13 @@ private function getParser(): Parser * * @throws ExportException */ - private function parseFile(string $filename, array $path) : array + private function parseFile(string $filename, array $path): array { if (str_ends_with($filename, " : eval()'d code")) { throw new ExportException("Closure defined in eval()'d code cannot be exported.", $path); } - $source = @ file_get_contents($filename); + $source = @file_get_contents($filename); if ($source === false) { // @codeCoverageIgnoreStart @@ -113,7 +125,7 @@ private function parseFile(string $filename, array $path) : array * * @return Node[] */ - private function resolveNames(array $ast) : array + private function resolveNames(array $ast): array { $nameResolver = new NameResolver(); $nodeTraverser = new NodeTraverser(); @@ -138,11 +150,11 @@ private function getClosure( array $ast, string $file, int $line, - array $path - ) : Node\Expr\Closure { + array $path, + ): Node\Expr\Closure { $finder = new FindingVisitor( - fn(Node $node): bool => ($node instanceof Node\Expr\Closure || $node instanceof Node\Expr\ArrowFunction) - && $node->getStartLine() === $line + fn (Node $node): bool => ($node instanceof Node\Expr\Closure || $node instanceof Node\Expr\ArrowFunction) + && $node->getStartLine() === $line, ); $traverser = new NodeTraverser(); @@ -157,11 +169,11 @@ private function getClosure( 'Expected exactly 1 closure in %s on line %d, found %d.', $file, $line, - $count + $count, ), $path); } - /** @var Node\Expr\Closure|Node\Expr\ArrowFunction $closure */ + /** @var Node\Expr\ArrowFunction|Node\Expr\Closure $closure */ $closure = $closures[0]; if ($closure instanceof Node\Expr\ArrowFunction) { @@ -178,13 +190,13 @@ private function getClosure( /** * Convert a parsed arrow function to a closure. * - * @param ReflectionFunction $reflectionFunction Reflection of the closure. - * @param Node\Expr\ArrowFunction $arrowFunction Parsed arrow function. + * @param ReflectionFunction $reflectionFunction Reflection of the closure. + * @param Node\Expr\ArrowFunction $arrowFunction Parsed arrow function. */ private function convertArrowFunction( ReflectionFunction $reflectionFunction, - Node\Expr\ArrowFunction $arrowFunction - ) : Node\Expr\Closure { + Node\Expr\ArrowFunction $arrowFunction, + ): Node\Expr\Closure { $closure = new Node\Expr\Closure([], ['arrow_function' => true]); $closure->static = false; @@ -198,8 +210,8 @@ private function convertArrowFunction( foreach (array_keys($static) as $var) { assert(is_string($var)); - $closure->uses[] = new Node\Expr\ClosureUse( - new Node\Expr\Variable($var) + $closure->uses[] = new Node\ClosureUse( + new Node\Expr\Variable($var), ); } @@ -218,11 +230,11 @@ private function convertArrowFunction( private function closureHandleUses( ReflectionFunction $reflectionFunction, Node\Expr\Closure $closure, - array $path - ) : void { + array $path, + ): void { if (! $this->exporter->closureSnapshotUses) { $message = $closure->hasAttribute('arrow_function') - ? "The arrow function uses variables in the parent scope, this is not supported by default" + ? 'The arrow function uses variables in the parent scope, this is not supported by default' : "The closure has bound variables through 'use', this is not supported by default"; throw new ExportException("$message. Use the CLOSURE_SNAPSHOT_USE option to export them.", $path); @@ -249,7 +261,7 @@ private function closureHandleUses( $assign = new Node\Expr\Assign( new Node\Expr\Variable($var), - $expr->expr + $expr->expr, ); $stmts[] = new Node\Stmt\Expression($assign); } diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter/PrettyPrinter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter/PrettyPrinter.php index 97fd44245..7b89289ba 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter/PrettyPrinter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/ClosureExporter/PrettyPrinter.php @@ -7,6 +7,8 @@ use Override; use PhpParser\PrettyPrinter\Standard; +use function str_repeat; + /** * Extends the standard pretty-printer to allow for a base indent level. * @@ -16,13 +18,13 @@ final class PrettyPrinter extends Standard { private int $varExporterNestingLevel = 0; - public function setVarExporterNestingLevel(int $level) : void + public function setVarExporterNestingLevel(int $level): void { $this->varExporterNestingLevel = $level; } #[Override] - protected function resetState() : void + protected function resetState(): void { parent::resetState(); diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/EnumExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/EnumExporter.php index 86fc1cbae..77cda93e4 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/EnumExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/EnumExporter.php @@ -6,8 +6,11 @@ use Brick\VarExporter\Internal\ObjectExporter; use Override; +use ReflectionObject; use UnitEnum; +use function assert; + /** * Handles enums. * @@ -16,18 +19,18 @@ final class EnumExporter extends ObjectExporter { #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { return $reflectionObject->isEnum(); } #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { assert($object instanceof UnitEnum); return [ - $object::class . '::' . $object->name + $object::class . '::' . $object->name, ]; } } diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/InternalClassExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/InternalClassExporter.php index 79ce7cf05..62be3135d 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/InternalClassExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/InternalClassExporter.php @@ -7,6 +7,7 @@ use Brick\VarExporter\ExportException; use Brick\VarExporter\Internal\ObjectExporter; use Override; +use ReflectionObject; /** * Throws on internal classes. @@ -16,13 +17,13 @@ final class InternalClassExporter extends ObjectExporter { #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { return $reflectionObject->isInternal(); } #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { $className = $reflectionObject->getName(); diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SerializeExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SerializeExporter.php index 6953ae8b4..639ac40f9 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SerializeExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SerializeExporter.php @@ -6,6 +6,9 @@ use Brick\VarExporter\Internal\ObjectExporter; use Override; +use ReflectionObject; + +use function array_merge; /** * Handles instances of classes with __serialize() and __unserialize() methods. @@ -15,14 +18,14 @@ final class SerializeExporter extends ObjectExporter { #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { return $reflectionObject->hasMethod('__serialize') && $reflectionObject->hasMethod('__unserialize'); } #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { $lines = $this->getCreateObjectCode($reflectionObject); diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SetStateExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SetStateExporter.php index a33c79e38..d760c2117 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SetStateExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/SetStateExporter.php @@ -7,6 +7,12 @@ use Brick\VarExporter\ExportException; use Brick\VarExporter\Internal\ObjectExporter; use Override; +use ReflectionClass; +use ReflectionObject; + +use function array_key_exists; +use function strrpos; +use function substr; /** * Handles instances of classes with a __set_state() method. @@ -16,7 +22,7 @@ final class SetStateExporter extends ObjectExporter { #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { if ($reflectionObject->hasMethod('__set_state')) { $method = $reflectionObject->getMethod('__set_state'); @@ -28,7 +34,7 @@ public function supports(\ReflectionObject $reflectionObject) : bool } #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { $className = $reflectionObject->getName(); @@ -36,7 +42,7 @@ public function export(object $object, \ReflectionObject $reflectionObject, arra $exportedVars = $this->exporter->exportArray($vars, $path, $parentIds); - return $this->exporter->wrap($exportedVars, '\\' . $className . '::__set_state(', ')'); + return $this->exporter->wrap($exportedVars, '\\' . $className . '::__set_state(', ')'); } /** @@ -51,16 +57,16 @@ public function export(object $object, \ReflectionObject $reflectionObject, arra * * This way we offer a better safety guarantee, while staying compatible with var_export() in the output. * - * @psalm-suppress MixedAssignment - * * @param object $object The object to dump. * @param string[] $path The path to the object, in the array/object graph. * * @return array An associative array of property name to value. * * @throws ExportException + * + * @psalm-suppress MixedAssignment */ - private function getObjectVars(object $object, array $path) : array + private function getObjectVars(object $object, array $path): array { $result = []; @@ -78,7 +84,7 @@ private function getObjectVars(object $object, array $path) : array throw new ExportException( 'Class "' . $className . '" has overridden private property "' . $name . '". ' . 'This is not supported for exporting objects with __set_state().', - $path + $path, ); } @@ -92,10 +98,10 @@ private function getObjectVars(object $object, array $path) : array return $result; } - private function isDynamicProperty(object $object, string $name) : bool + private function isDynamicProperty(object $object, string $name): bool { - $reflectionClass = new \ReflectionClass($object); - $reflectionObject = new \ReflectionObject($object); + $reflectionClass = new ReflectionClass($object); + $reflectionObject = new ReflectionObject($object); return $reflectionObject->hasProperty($name) && ! $reflectionClass->hasProperty($name); } diff --git a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/StdClassExporter.php b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/StdClassExporter.php index 5c7e869d0..6e49dcddd 100644 --- a/app/vendor/brick/varexporter/src/Internal/ObjectExporter/StdClassExporter.php +++ b/app/vendor/brick/varexporter/src/Internal/ObjectExporter/StdClassExporter.php @@ -6,6 +6,8 @@ use Brick\VarExporter\Internal\ObjectExporter; use Override; +use ReflectionObject; +use stdClass; /** * Handles stdClass objects. @@ -15,13 +17,13 @@ final class StdClassExporter extends ObjectExporter { #[Override] - public function supports(\ReflectionObject $reflectionObject) : bool + public function supports(ReflectionObject $reflectionObject): bool { - return $reflectionObject->getName() === \stdClass::class; + return $reflectionObject->getName() === stdClass::class; } #[Override] - public function export(object $object, \ReflectionObject $reflectionObject, array $path, array $parentIds) : array + public function export(object $object, ReflectionObject $reflectionObject, array $path, array $parentIds): array { $exported = $this->exporter->exportArray((array) $object, $path, $parentIds); diff --git a/app/vendor/brick/varexporter/src/VarExporter.php b/app/vendor/brick/varexporter/src/VarExporter.php index 7258f337a..687a1cae7 100644 --- a/app/vendor/brick/varexporter/src/VarExporter.php +++ b/app/vendor/brick/varexporter/src/VarExporter.php @@ -6,6 +6,14 @@ use Brick\VarExporter\Internal\GenericExporter; +use function array_map; +use function array_shift; +use function count; +use function implode; +use function str_repeat; + +use const PHP_EOL; + final class VarExporter { /** @@ -50,7 +58,7 @@ final class VarExporter /** * Formats lists (0-based numeric arrays) containing only scalar values on a single line. * Types considered scalar here are int, bool, float, string and null. - * This option is a subset of INLINE_ARRAY, and has no effect when INLINE_ARRAY is used. + * This option is a subset of INLINE_ARRAY and INLINE_LITERAL_LIST and has no effect when either is used. */ public const INLINE_SCALAR_LIST = 1 << 7; @@ -75,14 +83,21 @@ final class VarExporter public const INLINE_ARRAY = 1 << 11; /** - * @param mixed $var The variable to export. - * @param int $options A bitmask of options. Possible values are `VarExporter::*` constants. - * Combine multiple options with a bitwise OR `|` operator. - * @param int $indentLevel The base output indentation level. + * Formats lists (0-based numeric arrays) containing only literal values on a single line. + * Values considered literal are: int, float, string, bool, null, and enum values. + * This option is a subset of INLINE_ARRAY and has no effect when INLINE_ARRAY is used. + */ + public const INLINE_LITERAL_LIST = 1 << 12; + + /** + * @param mixed $var The variable to export. + * @param int $options A bitmask of options. Possible values are `VarExporter::*` constants. + * Combine multiple options with a bitwise OR `|` operator. + * @param int $indentLevel The base output indentation level. * * @throws ExportException */ - public static function export(mixed $var, int $options = 0, int $indentLevel = 0) : string + public static function export(mixed $var, int $options = 0, int $indentLevel = 0): string { $exporter = new GenericExporter($options, $indentLevel); $lines = $exporter->export($var, [], []); @@ -92,7 +107,7 @@ public static function export(mixed $var, int $options = 0, int $indentLevel = 0 } else { $firstLine = array_shift($lines); $lines = array_map( - fn($line) => str_repeat(' ', $indentLevel) . $line, + fn ($line) => str_repeat(' ', $indentLevel) . $line, $lines, ); diff --git a/app/vendor/brick/varexporter/tools/ecs/composer.json b/app/vendor/brick/varexporter/tools/ecs/composer.json new file mode 100644 index 000000000..5298cfffd --- /dev/null +++ b/app/vendor/brick/varexporter/tools/ecs/composer.json @@ -0,0 +1,10 @@ +{ + "require": { + "brick/coding-standard": "v4" + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": false + } + } +} diff --git a/app/vendor/brick/varexporter/tools/ecs/ecs.php b/app/vendor/brick/varexporter/tools/ecs/ecs.php new file mode 100644 index 000000000..9f00ee7a6 --- /dev/null +++ b/app/vendor/brick/varexporter/tools/ecs/ecs.php @@ -0,0 +1,32 @@ +import(__DIR__ . '/vendor/brick/coding-standard/ecs.php'); + + $libRootPath = realpath(__DIR__ . '/../../'); + + $ecsConfig->paths( + [ + $libRootPath . '/src', + $libRootPath . '/tests', + __FILE__, + ], + ); + + $ecsConfig->skip([ + // uses unknown functions etc., let's not touch it + $libRootPath . '/tests/ExportClosureTest.php', + + // tests expect a certain order of class elements + OrderedClassElementsFixer::class => $libRootPath . '/tests/Classes/Hierarchy/*.php', + + // assertEquals() is used intentionally in assertExportEquals() + PhpUnitStrictFixer::class => $libRootPath . 'tests/AbstractTestCase.php', + ]); +}; diff --git a/app/vendor/cakephp-plugins.php b/app/vendor/cakephp-plugins.php index 69bcd932f..7d415483c 100644 --- a/app/vendor/cakephp-plugins.php +++ b/app/vendor/cakephp-plugins.php @@ -16,6 +16,6 @@ 'Migrations' => $baseDir . '/vendor/cakephp/migrations/', 'OrcidSource' => $baseDir . '/plugins/OrcidSource/', 'SshKeyAuthenticator' => $baseDir . '/plugins/SshKeyAuthenticator/', - 'TermsAgreer' => $baseDir . '/plugins/TermsAgreer/' + 'TermsAgreer' => $baseDir . '/plugins/TermsAgreer/', ], ]; diff --git a/app/vendor/cakephp/authentication/composer.json b/app/vendor/cakephp/authentication/composer.json index 22782b3d0..8f74bcc9d 100644 --- a/app/vendor/cakephp/authentication/composer.json +++ b/app/vendor/cakephp/authentication/composer.json @@ -35,7 +35,7 @@ "cakephp/cakephp": "^5.1.0", "cakephp/cakephp-codesniffer": "^5.0", "firebase/php-jwt": "^6.2", - "phpunit/phpunit": "^10.5.5 || ^11.1.3 || ^12.0.9" + "phpunit/phpunit": "^10.5.58 || ^11.5.3 || ^12.4" }, "suggest": { "ext-ldap": "Make sure this php extension is installed and enabled on your system if you want to use the built-in LDAP adapter for \"LdapIdentifier\".", diff --git a/app/vendor/cakephp/authentication/src/AuthenticationPlugin.php b/app/vendor/cakephp/authentication/src/AuthenticationPlugin.php new file mode 100644 index 000000000..3400bf096 --- /dev/null +++ b/app/vendor/cakephp/authentication/src/AuthenticationPlugin.php @@ -0,0 +1,45 @@ + [ + * 'enabled' => true, // Enable validation (default: false for BC) + * 'maxDepth' => 1, // Max nested "redirect=" parameters (default: 1) + * 'maxEncodingLevels' => 1, // Max percent-encoding levels (default: 1) + * 'maxLength' => 2000, // Max URL length in characters (default: 2000) + * ] + * ``` * * ### Example: * @@ -105,6 +117,12 @@ class AuthenticationService implements AuthenticationServiceInterface, Impersona 'identityAttribute' => 'identity', 'queryParam' => null, 'unauthenticatedRedirect' => null, + 'redirectValidation' => [ + 'enabled' => false, // Disabled by default for backward compatibility + 'maxDepth' => 1, + 'maxEncodingLevels' => 1, + 'maxLength' => 2000, + ], ]; /** @@ -383,14 +401,20 @@ public function buildIdentity(ArrayAccess|array $identityData): IdentityInterfac */ public function getUnauthenticatedRedirectUrl(ServerRequestInterface $request): ?string { - $param = $this->getConfig('queryParam'); $target = $this->getConfig('unauthenticatedRedirect'); if ($target === null) { return null; } + if (is_array($target) && class_exists(Router::class)) { $target = Router::url($target); } + + if ($request->getMethod() !== 'GET') { + return $target; + } + + $param = $this->getConfig('queryParam'); if ($param === null) { return $target; } @@ -451,7 +475,49 @@ public function getLoginRedirect(ServerRequestInterface $request): ?string $parsed['query'] = "?{$parsed['query']}"; } - return $parsed['path'] . $parsed['query']; + $redirect = $parsed['path'] . $parsed['query']; + + // Validate redirect to prevent loops if enabled + return $this->validateRedirect($redirect); + } + + /** + * Validates a redirect URL to prevent loops and malicious patterns + * + * This method can be overridden in subclasses to implement custom validation logic. + * + * @param string $redirect The redirect URL to validate + * @return string|null The validated URL or null if invalid + */ + protected function validateRedirect(string $redirect): ?string + { + $config = $this->getConfig('redirectValidation'); + + // If validation is disabled, return the URL as-is (backward compatibility) + if (!$config['enabled']) { + return $redirect; + } + + $decodedUrl = urldecode($redirect); + + // Check for nested redirect parameters + $redirectCount = substr_count($decodedUrl, 'redirect='); + if ($redirectCount >= $config['maxDepth']) { + return null; + } + + // Check for multiple encoding levels (e.g., %25 = percent-encoded %) + $encodingCount = substr_count($redirect, '%25'); + if ($encodingCount >= $config['maxEncodingLevels']) { + return null; + } + + // Check URL length to prevent DOS attacks + if (strlen($redirect) > $config['maxLength']) { + return null; + } + + return $redirect; } /** diff --git a/app/vendor/cakephp/authentication/src/Authenticator/AuthenticationRequiredException.php b/app/vendor/cakephp/authentication/src/Authenticator/AuthenticationRequiredException.php index 1bdd6370e..017074ce1 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/AuthenticationRequiredException.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/AuthenticationRequiredException.php @@ -28,7 +28,7 @@ class AuthenticationRequiredException extends HttpException { /** - * @var array + * @var array|string> */ protected array $headers = []; diff --git a/app/vendor/cakephp/authentication/src/Authenticator/CookieAuthenticator.php b/app/vendor/cakephp/authentication/src/Authenticator/CookieAuthenticator.php index 6c16053f0..580aec6b3 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/CookieAuthenticator.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/CookieAuthenticator.php @@ -18,6 +18,8 @@ use ArrayAccess; use Authentication\Identifier\AbstractIdentifier; +use Authentication\Identifier\IdentifierCollection; +use Authentication\Identifier\IdentifierInterface; use Authentication\PasswordHasher\PasswordHasherTrait; use Authentication\UrlChecker\UrlCheckerTrait; use Cake\Http\Cookie\Cookie; @@ -55,6 +57,26 @@ class CookieAuthenticator extends AbstractAuthenticator implements PersistenceIn 'salt' => true, ]; + /** + * Gets the identifier, loading a default Password identifier if none configured. + * + * This is done lazily to allow loadIdentifier() to be called after loadAuthenticator(). + * + * @return \Authentication\Identifier\IdentifierInterface + */ + public function getIdentifier(): IdentifierInterface + { + if ($this->_identifier instanceof IdentifierCollection && $this->_identifier->isEmpty()) { + $identifierConfig = []; + if ($this->getConfig('fields')) { + $identifierConfig['fields'] = $this->getConfig('fields'); + } + $this->_identifier->load('Authentication.Password', $identifierConfig); + } + + return $this->_identifier; + } + /** * @inheritDoc */ @@ -82,10 +104,11 @@ public function authenticate(ServerRequestInterface $request): ResultInterface [$username, $tokenHash] = $token; - $identity = $this->_identifier->identify(compact('username')); + $identifier = $this->getIdentifier(); + $identity = $identifier->identify(compact('username')); if (!$identity) { - return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $this->_identifier->getErrors()); + return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $identifier->getErrors()); } if (!$this->_checkToken($identity, $tokenHash)) { diff --git a/app/vendor/cakephp/authentication/src/Authenticator/FormAuthenticator.php b/app/vendor/cakephp/authentication/src/Authenticator/FormAuthenticator.php index 07bbe9d76..781b4e70e 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/FormAuthenticator.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/FormAuthenticator.php @@ -17,6 +17,8 @@ namespace Authentication\Authenticator; use Authentication\Identifier\AbstractIdentifier; +use Authentication\Identifier\IdentifierCollection; +use Authentication\Identifier\IdentifierInterface; use Authentication\UrlChecker\UrlCheckerTrait; use Cake\Routing\Router; use Psr\Http\Message\ServerRequestInterface; @@ -47,6 +49,26 @@ class FormAuthenticator extends AbstractAuthenticator ], ]; + /** + * Gets the identifier, loading a default Password identifier if none configured. + * + * This is done lazily to allow loadIdentifier() to be called after loadAuthenticator(). + * + * @return \Authentication\Identifier\IdentifierInterface + */ + public function getIdentifier(): IdentifierInterface + { + if ($this->_identifier instanceof IdentifierCollection && $this->_identifier->isEmpty()) { + $identifierConfig = []; + if ($this->getConfig('fields')) { + $identifierConfig['fields'] = $this->getConfig('fields'); + } + $this->_identifier->load('Authentication.Password', $identifierConfig); + } + + return $this->_identifier; + } + /** * Checks the fields to ensure they are supplied. * @@ -116,9 +138,12 @@ protected function _buildLoginUrlErrorResult(ServerRequestInterface $request): R } /** - * Authenticates the identity contained in a request. Will use the `config.userModel`, and `config.fields` - * to find POST data that is used to find a matching record in the `config.userModel`. Will return false if - * there is no post data, either username or password is missing, or if the scope conditions have not been met. + * Authenticates the identity contained in a request. + * + * Will use the `config.userModel`, and `config.fields` to find POST data + * that is used to find a matching record in the `config.userModel`. + * Will return false if there is no post data, either username or password is missing, + * or if the scope conditions have not been met. * * @param \Psr\Http\Message\ServerRequestInterface $request The request that contains login information. * @return \Authentication\Authenticator\ResultInterface @@ -136,10 +161,11 @@ public function authenticate(ServerRequestInterface $request): ResultInterface ]); } - $user = $this->_identifier->identify($data); + $identifier = $this->getIdentifier(); + $user = $identifier->identify($data); if (!$user) { - return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $this->_identifier->getErrors()); + return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $identifier->getErrors()); } return new Result($user, Result::SUCCESS); diff --git a/app/vendor/cakephp/authentication/src/Authenticator/HttpBasicAuthenticator.php b/app/vendor/cakephp/authentication/src/Authenticator/HttpBasicAuthenticator.php index e98782433..7d5c2b8d7 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/HttpBasicAuthenticator.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/HttpBasicAuthenticator.php @@ -16,6 +16,8 @@ namespace Authentication\Authenticator; use Authentication\Identifier\AbstractIdentifier; +use Authentication\Identifier\IdentifierCollection; +use Authentication\Identifier\IdentifierInterface; use Psr\Http\Message\ServerRequestInterface; /** @@ -41,6 +43,26 @@ class HttpBasicAuthenticator extends AbstractAuthenticator implements StatelessI 'skipChallenge' => false, ]; + /** + * Gets the identifier, loading a default Password identifier if none configured. + * + * This is done lazily to allow loadIdentifier() to be called after loadAuthenticator(). + * + * @return \Authentication\Identifier\IdentifierInterface + */ + public function getIdentifier(): IdentifierInterface + { + if ($this->_identifier instanceof IdentifierCollection && $this->_identifier->isEmpty()) { + $identifierConfig = []; + if ($this->getConfig('fields')) { + $identifierConfig['fields'] = $this->getConfig('fields'); + } + $this->_identifier->load('Authentication.Password', $identifierConfig); + } + + return $this->_identifier; + } + /** * Authenticate a user using HTTP auth. Will use the configured User model and attempt a * login using HTTP auth. @@ -58,7 +80,7 @@ public function authenticate(ServerRequestInterface $request): ResultInterface return new Result(null, Result::FAILURE_CREDENTIALS_MISSING); } - $user = $this->_identifier->identify([ + $user = $this->getIdentifier()->identify([ AbstractIdentifier::CREDENTIAL_USERNAME => $username, AbstractIdentifier::CREDENTIAL_PASSWORD => $password, ]); diff --git a/app/vendor/cakephp/authentication/src/Authenticator/JwtAuthenticator.php b/app/vendor/cakephp/authentication/src/Authenticator/JwtAuthenticator.php index 2afa82fe2..3ce212e35 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/JwtAuthenticator.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/JwtAuthenticator.php @@ -17,6 +17,7 @@ namespace Authentication\Authenticator; use ArrayObject; +use Authentication\Identifier\IdentifierCollection; use Authentication\Identifier\IdentifierInterface; use Authentication\Identifier\JwtSubjectIdentifier; use Cake\Utility\Security; @@ -66,6 +67,22 @@ public function __construct(IdentifierInterface $identifier, array $config = []) } } + /** + * Gets the identifier, loading a default JwtSubject identifier if none configured. + * + * This is done lazily to allow loadIdentifier() to be called after loadAuthenticator(). + * + * @return \Authentication\Identifier\IdentifierInterface + */ + public function getIdentifier(): IdentifierInterface + { + if ($this->_identifier instanceof IdentifierCollection && $this->_identifier->isEmpty()) { + $this->_identifier->load('Authentication.JwtSubject'); + } + + return $this->_identifier; + } + /** * Authenticates the identity based on a JWT token contained in a request. * @@ -106,12 +123,13 @@ public function authenticate(ServerRequestInterface $request): ResultInterface return new Result($user, Result::SUCCESS); } - $user = $this->_identifier->identify([ + $identifier = $this->getIdentifier(); + $user = $identifier->identify([ $subjectKey => $result[$subjectKey], ]); if (!$user) { - return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $this->_identifier->getErrors()); + return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $identifier->getErrors()); } return new Result($user, Result::SUCCESS); diff --git a/app/vendor/cakephp/authentication/src/Authenticator/SessionAuthenticator.php b/app/vendor/cakephp/authentication/src/Authenticator/SessionAuthenticator.php index a6c98deaf..32c7f983e 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/SessionAuthenticator.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/SessionAuthenticator.php @@ -21,6 +21,7 @@ use Cake\Http\Exception\UnauthorizedException; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use function Cake\Core\deprecationWarning; /** * Session Authenticator @@ -31,9 +32,9 @@ class SessionAuthenticator extends AbstractAuthenticator implements PersistenceI * Default config for this object. * - `fields` The fields to use to verify a user by. * - `sessionKey` Session key. - * - `identify` Whether to identify user data stored in a session. This is - * useful if you want to remotely end sessions that have a different password stored, - * or if your identification logic needs additional conditions before a user can login. + * - `identify` Whether to identify user data stored in a session. + * Deprecated: Use `PrimaryKeySessionAuthenticator` instead if you + * need to fetch fresh user data from the database on each request. * * @var array */ @@ -65,6 +66,11 @@ public function authenticate(ServerRequestInterface $request): ResultInterface } if ($this->getConfig('identify') === true) { + deprecationWarning( + '3.4.0', + 'The `identify` option is deprecated. ' . + 'Use `PrimaryKeySessionAuthenticator` instead to fetch fresh user data on each request.', + ); $credentials = []; foreach ($this->getConfig('fields') as $key => $field) { $credentials[$key] = $user[$field]; diff --git a/app/vendor/cakephp/authentication/src/Authenticator/TokenAuthenticator.php b/app/vendor/cakephp/authentication/src/Authenticator/TokenAuthenticator.php index 385a9c5c4..3751ac82d 100644 --- a/app/vendor/cakephp/authentication/src/Authenticator/TokenAuthenticator.php +++ b/app/vendor/cakephp/authentication/src/Authenticator/TokenAuthenticator.php @@ -16,6 +16,8 @@ */ namespace Authentication\Authenticator; +use Authentication\Identifier\IdentifierCollection; +use Authentication\Identifier\IdentifierInterface; use Authentication\Identifier\TokenIdentifier; use Psr\Http\Message\ServerRequestInterface; @@ -35,6 +37,22 @@ class TokenAuthenticator extends AbstractAuthenticator implements StatelessInter 'tokenPrefix' => null, ]; + /** + * Gets the identifier, loading a default Token identifier if none configured. + * + * This is done lazily to allow loadIdentifier() to be called after loadAuthenticator(). + * + * @return \Authentication\Identifier\IdentifierInterface + */ + public function getIdentifier(): IdentifierInterface + { + if ($this->_identifier instanceof IdentifierCollection && $this->_identifier->isEmpty()) { + $this->_identifier->load('Authentication.Token'); + } + + return $this->_identifier; + } + /** * Checks if the token is in the headers or a request parameter * @@ -124,12 +142,13 @@ public function authenticate(ServerRequestInterface $request): ResultInterface return new Result(null, Result::FAILURE_CREDENTIALS_MISSING); } - $user = $this->_identifier->identify([ + $identifier = $this->getIdentifier(); + $user = $identifier->identify([ TokenIdentifier::CREDENTIAL_TOKEN => $token, ]); if (!$user) { - return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $this->_identifier->getErrors()); + return new Result(null, Result::FAILURE_IDENTITY_NOT_FOUND, $identifier->getErrors()); } return new Result($user, Result::SUCCESS); diff --git a/app/vendor/cakephp/authentication/src/Identifier/IdentifierCollection.php b/app/vendor/cakephp/authentication/src/Identifier/IdentifierCollection.php index ec49d1dc0..257b25d8e 100644 --- a/app/vendor/cakephp/authentication/src/Identifier/IdentifierCollection.php +++ b/app/vendor/cakephp/authentication/src/Identifier/IdentifierCollection.php @@ -56,7 +56,11 @@ public function identify(array $credentials): ArrayAccess|array|null return $result; } - $this->_errors[$name] = $identifier->getErrors(); + + $errors = $identifier->getErrors(); + if ($errors) { + $this->_errors[$name] = $identifier->getErrors(); + } } $this->_successfulIdentifier = null; diff --git a/app/vendor/cakephp/authentication/src/Plugin.php b/app/vendor/cakephp/authentication/src/Plugin.php index 2e169f6b2..40c4da55a 100644 --- a/app/vendor/cakephp/authentication/src/Plugin.php +++ b/app/vendor/cakephp/authentication/src/Plugin.php @@ -15,31 +15,9 @@ */ namespace Authentication; -use Cake\Core\BasePlugin; - /** - * Plugin class for CakePHP. + * @deprecated 3.3.4 Use AuthenticationPlugin instead */ -class Plugin extends BasePlugin +class Plugin extends AuthenticationPlugin { - /** - * Do bootstrapping or not - * - * @var bool - */ - protected bool $bootstrapEnabled = false; - - /** - * Load routes or not - * - * @var bool - */ - protected bool $routesEnabled = false; - - /** - * Console middleware - * - * @var bool - */ - protected bool $consoleEnabled = false; } diff --git a/app/vendor/cakephp/bake/.phive/phars.xml b/app/vendor/cakephp/bake/.phive/phars.xml index f5aa33004..40973f754 100644 --- a/app/vendor/cakephp/bake/.phive/phars.xml +++ b/app/vendor/cakephp/bake/.phive/phars.xml @@ -1,4 +1,4 @@ - + diff --git a/app/vendor/cakephp/bake/composer.json b/app/vendor/cakephp/bake/composer.json index fedab7a39..438ff04d5 100644 --- a/app/vendor/cakephp/bake/composer.json +++ b/app/vendor/cakephp/bake/composer.json @@ -23,15 +23,15 @@ }, "require": { "php": ">=8.1", - "brick/varexporter": "^0.6.0", + "brick/varexporter": "^0.6.0 || ^0.7.0", "cakephp/cakephp": "^5.1", - "cakephp/twig-view": "^2.0.0", + "cakephp/twig-view": "^2.0.2", "nikic/php-parser": "^5.0.0" }, "require-dev": { "cakephp/cakephp-codesniffer": "^5.0.0", "cakephp/debug_kit": "^5.0.0", - "phpunit/phpunit": "^10.5.5 || ^11.1.3" + "phpunit/phpunit": "^10.5.40 || ^11.5.20 || ^12.2.4" }, "autoload": { "psr-4": { @@ -40,10 +40,17 @@ }, "autoload-dev": { "psr-4": { + "Authentication\\": "tests/test_app/Plugin/Authentication/src/", + "Authorization\\": "tests/test_app/Plugin/Authorization/src/", "BakeTest\\": "tests/test_app/Plugin/BakeTest/src/", "Bake\\Test\\": "tests/", "Bake\\Test\\App\\": "tests/test_app/App/", "Company\\Pastry\\": "tests/test_app/Plugin/Company/Pastry/src/", + "FixtureTest\\": "tests/test_app/App/Plugin/FixtureTest/src/", + "TestBake\\": "tests/test_app/Plugin/TestBake/src/", + "TestBakeTheme\\": "tests/test_app/Plugin/TestBakeTheme/src/", + "TestTemplate\\": "tests/test_app/App/Plugin/TestTemplate/src/", + "TestTest\\": "tests/test_app/App/Plugin/TestTest/src/", "WithBakeSubFolder\\": "tests/test_app/Plugin/WithBakeSubFolder/src/" } }, @@ -58,8 +65,8 @@ "@test", "@cs-check" ], - "cs-check": "phpcs --parallel=16 -p src/ tests/", - "cs-fix": "phpcbf --parallel=16 -p src/ tests/", + "cs-check": "phpcs", + "cs-fix": "phpcbf", "phpstan": "tools/phpstan analyse", "stan": "@phpstan", "stan-baseline": "tools/phpstan --generate-baseline", diff --git a/app/vendor/cakephp/bake/docs/en/development.rst b/app/vendor/cakephp/bake/docs/en/development.rst index c7c7aa252..9cbcc3f80 100644 --- a/app/vendor/cakephp/bake/docs/en/development.rst +++ b/app/vendor/cakephp/bake/docs/en/development.rst @@ -129,7 +129,7 @@ looks like this:: /** * Hook method for defining this command's option parser. * - * @see https://book.cakephp.org/5/en/console-commands/commands.html#defining-arguments-and-options + * @link https://book.cakephp.org/5/en/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined * @return \Cake\Console\ConsoleOptionParser The built parser. */ @@ -172,7 +172,7 @@ And the resultant baked class (**src/Command/FooCommand.php**) looks like this:: /** * Hook method for defining this command's option parser. * - * @see https://book.cakephp.org/5/en/console-commands/commands.html#defining-arguments-and-options + * @link https://book.cakephp.org/5/en/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined * @return \Cake\Console\ConsoleOptionParser The built parser. */ diff --git a/app/vendor/cakephp/bake/docs/fr/development.rst b/app/vendor/cakephp/bake/docs/fr/development.rst index 697a6301d..dad16138e 100644 --- a/app/vendor/cakephp/bake/docs/fr/development.rst +++ b/app/vendor/cakephp/bake/docs/fr/development.rst @@ -137,7 +137,7 @@ ressemble à ceci:: /** * Méthode hook pour définir le parseur d'option de cette commande. * - * @see https://book.cakephp.org/5/fr/console-commands/commands.html#defining-arguments-and-options + * @link https://book.cakephp.org/5/fr/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser Le parseur à définir * @return \Cake\Console\ConsoleOptionParser Le parseur construit. */ @@ -181,7 +181,7 @@ ressemble à ceci:: /** * Méthode hook pour définir le parseur d'option de cette commande. * - * @see https://book.cakephp.org/5/fr/console-commands/commands.html#defining-arguments-and-options + * @link https://book.cakephp.org/5/fr/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser Le parseur à définir * @return \Cake\Console\ConsoleOptionParser Le parseur construit. */ diff --git a/app/vendor/cakephp/bake/docs/ja/development.rst b/app/vendor/cakephp/bake/docs/ja/development.rst index 070e43a5c..6e8a0eeaa 100644 --- a/app/vendor/cakephp/bake/docs/ja/development.rst +++ b/app/vendor/cakephp/bake/docs/ja/development.rst @@ -17,20 +17,19 @@ Bake イベント 例えば、bake ビュークラスに他のヘルパーを追加するためにこのイベントは使用されます。 :: on('Bake.initialize', function (Event $event) { + // in src/Application::bootstrapCli() + + EventManager::instance()->on('Bake.initialize', function (EventInterface $event) { $view = $event->getSubject(); // bake テンプレートの中で MySpecial ヘルパーの使用を可能にします $view->loadHelper('MySpecial', ['some' => 'config']); // そして、$author 変数を利用可能にするために追加 - $view->set('author', 'Andy'); - +\ $view->set('author', 'Andy'); }); 別のプラグインの中から bake を変更したい場合は、プラグインの ``config/bootstrap.php`` @@ -42,12 +41,12 @@ Bake イベントは、既存のテンプレートに小さな変更を行うた ``Bake.beforeRender`` で呼び出される関数を使用することができます。 :: on('Bake.beforeRender', function (Event $event) { + // in src/Application::bootstrapCli() + + EventManager::instance()->on('Bake.beforeRender', function (EventInterface $event) { $view = $event->getSubject(); // indexes の中のメインデータ変数に $rows を使用 @@ -65,36 +64,34 @@ Bake イベントは、既存のテンプレートに小さな変更を行うた if ($view->get('singularVar')) { $view->set('singularVar', 'theOne'); } - - }); - + 特定の生成されたファイルへの ``Bake.beforeRender`` と ``Bake.afterRender`` イベントを指定することもあるでしょう。例えば、 **Controller/controller.twig** ファイルから生成する際、 UsersController に特定のアクションを追加したい場合、以下のイベントを使用することができます。 :: on( 'Bake.beforeRender.Controller.controller', - function (Event $event) { + function (EventInterface $event) { $view = $event->getSubject(); - if ($view->viewVars['name'] == 'Users') { + if ($view->get('name') === 'Users') { // Users コントローラーに login と logout を追加 - $view->viewVars['actions'] = [ + $view->set('actions', [ 'login', 'logout', 'index', 'view', 'add', 'edit', - 'delete' - ]; + 'delete', + ]); } } ); @@ -109,71 +106,100 @@ Bake テンプレート構文 Bake テンプレートファイルは、 `Twig `__ テンプレート構文を使用します。 -だから、例えば、以下のようにシェルを bake した場合: +だから、例えば、以下のようにコマンドを bake した場合: .. code-block:: bash - bin/cake bake shell Foo + bin/cake bake command Foo -(**vendor/cakephp/bake/src/Template/Bake/Shell/shell.twig**) を使用した +(**vendor/cakephp/bake/templates/bake/Command/command.twig**) を使用した テンプレートは、以下のようになります。 :: `` Bake テンプレートの PHP 終了タグ - * ``<%=`` Bake テンプレートの PHP ショートエコータグ - * ``<%-`` Bake テンプレートの PHP 開始タグ、タグの前に、先頭の空白を除去 - * ``-%>`` Bake テンプレートの PHP 終了タグ、タグの後に末尾の空白を除去 - .. _creating-a-bake-theme: Bake テーマの作成 @@ -184,102 +210,107 @@ Bake テーマの作成 これを行うための最善の方法は、次のとおりです。 #. 新しいプラグインを bake します。プラグインの名前は bake の「テーマ」名になります。 -#. 新しいディレクトリー **plugins/[name]/src/Template/Bake/Template/** を作成します。 -#. **vendor/cakephp/bake/src/Template/Bake/Template** から上書きしたい + 例 ``bin/cake bake plugin custom_bake`` +#. 新しいディレクトリー **plugins/CustomBake/templates/bake/** を作成します。 +#. **vendor/cakephp/bake/templates/bake** から上書きしたい テンプレートをあなたのプラグインの中の適切なファイルにコピーしてください。 -#. bake を実行するときに、必要であれば、 bake のテーマを指定するための ``--theme`` +#. bake を実行するときに、必要であれば、 bake のテーマを指定するための ``--theme CustomBake`` オプションを使用してください。各呼び出しでこのオプションを指定しなくても済むように、 カスタムテーマをデフォルトテーマとして使用するように設定することもできます。 :: Test->classSuffixes[$this->name()])) { - $this->Test->classSuffixes[$this->name()] = 'Foo'; + $this->Test->classSuffixes[$this->name()] = 'Foo'; } $name = ucfirst($this->name()); if (!isset($this->Test->classTypes[$name])) { - $this->Test->classTypes[$name] = 'Foo'; + $this->Test->classTypes[$name] = 'Foo'; } return parent::bakeTest($className); @@ -291,6 +322,20 @@ FooTask.php ファイルは次のようになります。 :: あなたのファイルを導くために使用されるサブ名前空間です。 前の例では、名前空間 ``App\Test\TestCase\Foo`` でテストを作成します。 +BakeView クラスの設定 +============================== + +bake コマンドは ``BakeView`` クラスをテンプレートをレンダリングするために使います。 You can +access the instance by listening to the ``Bake.initialize`` イベントを監視するためにこのインスタンスにアクセスできます。 例えば、以下の様にして独自のヘルパーを読み込みbakeテンプレートで使用できます:: + + on( + 'Bake.initialize', + function ($event, $view) { + $view->loadHelper('Foo'); + } + ); + .. meta:: :title lang=ja: Bake の拡張 :keywords lang=ja: command line interface,development,bake view, bake template syntax,twig,erb tags,percent tags diff --git a/app/vendor/cakephp/bake/docs/ja/index.rst b/app/vendor/cakephp/bake/docs/ja/index.rst index a4e503963..ce1e65ed9 100644 --- a/app/vendor/cakephp/bake/docs/ja/index.rst +++ b/app/vendor/cakephp/bake/docs/ja/index.rst @@ -14,7 +14,7 @@ bake は数分で完全に機能するアプリケーションを作成できま bake を使用したり拡張する前に、アプリケーションに bake をインストールしておいてください。 bake は Composer を使ってインストールするプラグインとして提供されています。 :: - composer require --dev cakephp/bake:"^2.0" + composer require --dev cakephp/bake:"^3.0" 上記のコマンドは、bake を開発環境で使用するパッケージとしてインストールします。 この入れ方の場合、本番環境としてデプロイする際には、 bake はインストールされません。 diff --git a/app/vendor/cakephp/bake/docs/ja/usage.rst b/app/vendor/cakephp/bake/docs/ja/usage.rst index 9912102ef..595c520f1 100644 --- a/app/vendor/cakephp/bake/docs/ja/usage.rst +++ b/app/vendor/cakephp/bake/docs/ja/usage.rst @@ -12,87 +12,59 @@ cake コンソールは、 PHP CLI (command line interface) で実行します bake を実行する前にデータベースとの接続を確認しましょう。 -``bin/cake bake`` を引数無しで実行すると可能なタスクを表示できます。 - -Windows システムの場合、 ``bin\cake bake`` を試してみてください。 - -それは以下のように表示されます。 :: - - $ bin/cake bake - - Welcome to CakePHP v3.1.6 Console - --------------------------------------------------------------- - App : src - Path: /var/www/cakephp.dev/src/ - PHP: 5.5.8 - --------------------------------------------------------------- - The following commands can be used to generate skeleton code for your application. - - Available bake commands: - - - all - - behavior - - cell - - component - - controller - - fixture - - form - - helper - - mailer - - migration - - migration_snapshot - - model - - plugin - - template - - test - - By using `cake bake [name]` you can invoke a specific bake task. - -より詳しい各コマンドの情報を得るには、 ``--help`` オプションをつけ実行してください。 :: - - $ bin/cake bake controller --help - - Welcome to CakePHP v3.1.6 Console - --------------------------------------------------------------- - App : src - Path: /var/www/cakephp.dev/src/ - --------------------------------------------------------------- - Bake a controller skeleton. - - Usage: - cake bake controller [subcommand] [options] [] - - Subcommands: - - all Bake all controllers with CRUD methods. - - To see help on a subcommand use `cake bake controller [subcommand] --help` - - Options: - - --help, -h Display this help. - --verbose, -v Enable verbose output. - --quiet, -q Enable quiet output. - --plugin, -p Plugin to bake into. - --force, -f Force overwriting existing files without prompting. - --connection, -c The datasource connection to get data from. - (default: default) - --theme, -t The theme to use when baking code. - --components The comma separated list of components to use. - --helpers The comma separated list of helpers to use. - --prefix The namespace/routing prefix to use. - --no-test Do not generate a test skeleton. - --no-actions Do not generate basic CRUD action methods. - - Arguments: - - name Name of the controller to bake. Can use Plugin.name to bake - controllers into plugins. (optional) - -Bake テーマオプション +``bin/cake bake --help`` を実行すると可能なbakeコマンドを表示できます。 +(Windows システムの場合、 ``bin\cake bake --help`` を使います。):: + + $ bin/cake bake --help + Current Paths: + + * app: src/ + * root: /path/to/your/app/ + * core: /path/to/your/app/vendor/cakephp/cakephp/ + + Available Commands: + + Bake: + - bake all + - bake behavior + - bake cell + - bake command + - bake command_helper + - bake component + - bake controller + - bake controller all + - bake enum + - bake fixture + - bake fixture all + - bake form + - bake helper + - bake mailer + - bake middleware + - bake model + - bake model all + - bake plugin + - bake template + - bake template all + - bake test + + To run a command, type `cake command_name [args|options]` + To get help on a specific command, type `cake command_name --help` + +Bake モデル +=========== + +モデルは、既存のデータベーステーブルから一般的に生成(bake)されます。 +規約が適用されるため、外部キー ``thing_id`` とテーブル ``things`` の主キー ``id`` に基づいてリレーションが検出されます。 + +規約から外れたリレーションの場合、Bake がリレーションを検出するために、制約/外部キー定義でリレーションを使用できます。例:: + + ->addForeignKey('billing_country_id', 'countries') // defaults to `id` + ->addForeignKey('shipping_country_id', 'countries', 'cid') + +Bake テーマ ===================== -テーマオプションは全 bake コマンドで一般的です。また、bake テンプレートファイルを変更することができます。 +テーマオプションは全 bake コマンドで共通です。また、bakeする際のbake テンプレートファイルを変更することができます。 テーマを作るには、 :ref:`Bake テーマ作成ドキュメント ` をご覧ください。 .. meta:: diff --git a/app/vendor/cakephp/bake/phpcs.xml b/app/vendor/cakephp/bake/phpcs.xml index d17484779..16a351cd6 100644 --- a/app/vendor/cakephp/bake/phpcs.xml +++ b/app/vendor/cakephp/bake/phpcs.xml @@ -1,12 +1,15 @@ - src/ tests/ + + + + */comparisons/* tests/test_app/* diff --git a/app/vendor/cakephp/bake/phpstan.neon b/app/vendor/cakephp/bake/phpstan.neon index 32434594a..49655075a 100644 --- a/app/vendor/cakephp/bake/phpstan.neon +++ b/app/vendor/cakephp/bake/phpstan.neon @@ -2,10 +2,10 @@ includes: - phpstan-baseline.neon parameters: - level: 6 - paths: - - src/ - bootstrapFiles: - - tests/bootstrap.php - ignoreErrors: - - identifier: missingType.iterableValue + level: 8 + paths: + - src/ + bootstrapFiles: + - tests/bootstrap.php + ignoreErrors: + - identifier: missingType.iterableValue diff --git a/app/vendor/cakephp/bake/src/BakePlugin.php b/app/vendor/cakephp/bake/src/BakePlugin.php index 0b02eaad3..d4d225f66 100644 --- a/app/vendor/cakephp/bake/src/BakePlugin.php +++ b/app/vendor/cakephp/bake/src/BakePlugin.php @@ -26,7 +26,6 @@ use Cake\Http\BaseApplication; use DirectoryIterator; use ReflectionClass; -use ReflectionException; /** * Plugin class for bake @@ -140,11 +139,11 @@ protected function findInPath(string $namespace, string $path): array $class = $namespace . $item->getBasename('.php'); if (!$hasSubfolder) { - try { - $reflection = new ReflectionClass($class); - } catch (ReflectionException) { + if (!class_exists($class)) { continue; } + + $reflection = new ReflectionClass($class); if (!$reflection->isInstantiable() || !$reflection->isSubclassOf(BakeCommand::class)) { continue; } diff --git a/app/vendor/cakephp/bake/src/CodeGen/CodeParser.php b/app/vendor/cakephp/bake/src/CodeGen/CodeParser.php index c48c8eecb..9042f1bf9 100644 --- a/app/vendor/cakephp/bake/src/CodeGen/CodeParser.php +++ b/app/vendor/cakephp/bake/src/CodeGen/CodeParser.php @@ -81,7 +81,11 @@ public function parseFile(string $code): ?ParsedFile { $this->fileText = $code; try { - $this->traverser->traverse($this->parser->parse($code)); + $ast = $this->parser->parse($code); + if ($ast === null) { + return null; + } + $this->traverser->traverse($ast); } catch (Error $e) { throw new ParseException($e->getMessage(), null, $e); } @@ -172,7 +176,11 @@ public function enterNode(Node $node) throw new ParseException('Multiple constants per line are not supported, update your file'); } - $name = (string)current($constant->consts)->name; + $const = current($constant->consts); + if ($const === false) { + continue; + } + $name = (string)$const->name; $constants[$name] = $this->getNodeCode($constant); } @@ -182,7 +190,11 @@ public function enterNode(Node $node) throw new ParseException('Multiple properties per line are not supported, update your file'); } - $name = (string)current($property->props)->name; + $prop = current($property->props); + if ($prop === false) { + continue; + } + $name = (string)$prop->name; $properties[$name] = $this->getNodeCode($property); } diff --git a/app/vendor/cakephp/bake/src/CodeGen/ColumnTypeExtractor.php b/app/vendor/cakephp/bake/src/CodeGen/ColumnTypeExtractor.php new file mode 100644 index 000000000..9df1df081 --- /dev/null +++ b/app/vendor/cakephp/bake/src/CodeGen/ColumnTypeExtractor.php @@ -0,0 +1,237 @@ + + */ + protected array $columnTypes = []; + + /** + * @var bool + */ + protected bool $inInitialize = false; + + /** + * Constructor + */ + public function __construct() + { + $version = PhpVersion::fromComponents(8, 1); + $this->parser = (new ParserFactory())->createForVersion($version); + } + + /** + * Extracts column type mappings from initialize method code + * + * @param string $code The initialize method code + * @return array Map of column names to type expressions + */ + public function extract(string $code): array + { + $this->columnTypes = []; + $this->inInitialize = false; + + try { + // Wrap code in a dummy class if needed for parsing + $wrappedCode = "parser->parse($wrappedCode); + if ($ast === null) { + return []; + } + + $traverser = new NodeTraverser(); + $traverser->addVisitor($this); + $traverser->traverse($ast); + } catch (Exception $e) { + // If parsing fails, return empty array + return []; + } + + return $this->columnTypes; + } + + /** + * @inheritDoc + */ + public function enterNode(Node $node) + { + // Check if we're entering the initialize method + if ($node instanceof Node\Stmt\ClassMethod && $node->name->name === 'initialize') { + $this->inInitialize = true; + + return null; + } + + // Only process nodes within initialize method + if (!$this->inInitialize) { + return null; + } + + // Look for $this->getSchema()->setColumnType() calls + if ($node instanceof Expression && $node->expr instanceof MethodCall) { + $this->processMethodCall($node->expr); + } elseif ($node instanceof MethodCall) { + $this->processMethodCall($node); + } + + return null; + } + + /** + * @inheritDoc + */ + public function leaveNode(Node $node) + { + if ($node instanceof Node\Stmt\ClassMethod && $node->name->name === 'initialize') { + $this->inInitialize = false; + } + + return null; + } + + /** + * Process a method call to check if it's setColumnType + * + * @param \PhpParser\Node\Expr\MethodCall $methodCall The method call to process + * @return void + */ + protected function processMethodCall(MethodCall $methodCall): void + { + // Check if this is a setColumnType call + if ($methodCall->name instanceof Node\Identifier && $methodCall->name->name === 'setColumnType') { + // Check if it's called on getSchema() + if ( + $methodCall->var instanceof MethodCall && + $methodCall->var->name instanceof Node\Identifier && + $methodCall->var->name->name === 'getSchema' && + $methodCall->var->var instanceof Variable && + $methodCall->var->var->name === 'this' + ) { + // Extract the column name and type expression + if (count($methodCall->args) >= 2) { + $columnArgNode = $methodCall->args[0]; + $typeArgNode = $methodCall->args[1]; + if (!$columnArgNode instanceof Node\Arg || !$typeArgNode instanceof Node\Arg) { + return; + } + $columnArg = $columnArgNode->value; + $typeArg = $typeArgNode->value; + + // Get column name + $columnName = $this->getStringValue($columnArg); + if ($columnName === null) { + return; + } + + // Get the type expression as a string + $typeExpression = $this->getTypeExpression($typeArg); + if ($typeExpression !== null) { + $this->columnTypes[$columnName] = $typeExpression; + } + } + } + } + } + + /** + * Get string value from a node + * + * @param \PhpParser\Node $node The node to extract string from + * @return string|null The string value or null + */ + protected function getStringValue(Node $node): ?string + { + if ($node instanceof Node\Scalar\String_) { + return $node->value; + } + + return null; + } + + /** + * Convert a type expression node to string representation + * + * @param \PhpParser\Node $node The type expression node + * @return string|null String representation of the type expression + */ + protected function getTypeExpression(Node $node): ?string + { + // Handle EnumType::from() calls + if ( + $node instanceof Node\Expr\StaticCall && + $node->class instanceof Node\Name && + $node->name instanceof Node\Identifier + ) { + $className = $node->class->toString(); + $methodName = $node->name->name; + + // Handle EnumType::from() calls + if ($className === 'EnumType' || str_ends_with($className, '\\EnumType')) { + if ($methodName === 'from' && count($node->args) > 0) { + // Extract the enum class name + $argNode = $node->args[0]; + if (!$argNode instanceof Node\Arg) { + return null; + } + $arg = $argNode->value; + if ($arg instanceof Node\Expr\ClassConstFetch) { + if ( + $arg->class instanceof Node\Name && + $arg->name instanceof Node\Identifier && + $arg->name->name === 'class' + ) { + $enumClass = $arg->class->toString(); + // Return the full EnumType::from() expression + return 'EnumType::from(' . $enumClass . '::class)'; + } + } + } + } + } + + // Handle simple string types + if ($node instanceof Node\Scalar\String_) { + return '"' . $node->value . '"'; + } + + return null; + } +} diff --git a/app/vendor/cakephp/bake/src/Command/AllCommand.php b/app/vendor/cakephp/bake/src/Command/AllCommand.php index 0c0465021..8cccf7b40 100644 --- a/app/vendor/cakephp/bake/src/Command/AllCommand.php +++ b/app/vendor/cakephp/bake/src/Command/AllCommand.php @@ -124,16 +124,16 @@ public function execute(Arguments $args, ConsoleIo $io): ?int } $message = sprintf('Error generating %s for %s: %s', $commandName, $table, $e->getMessage()); - $io->err('' . $message . ''); + $io->error($message); $errors++; } } } if ($errors) { - $io->out(sprintf('Bake All completed, but with %s errors.', $errors), 1, ConsoleIo::NORMAL); + $io->warning(sprintf('Bake All completed, but with %s errors.', $errors)); } else { - $io->out('Bake All complete.', 1, ConsoleIo::NORMAL); + $io->success('Bake All complete.'); } return $errors ? static::CODE_ERROR : static::CODE_SUCCESS; diff --git a/app/vendor/cakephp/bake/src/Command/BakeCommand.php b/app/vendor/cakephp/bake/src/Command/BakeCommand.php index 930ac6b95..f5ade6a23 100644 --- a/app/vendor/cakephp/bake/src/Command/BakeCommand.php +++ b/app/vendor/cakephp/bake/src/Command/BakeCommand.php @@ -27,6 +27,7 @@ use Cake\Core\ConventionsTrait; use Cake\Event\Event; use Cake\Event\EventManager; +use Cake\ORM\Locator\TableLocator; use InvalidArgumentException; use function Cake\Core\pluginSplit; @@ -48,6 +49,22 @@ abstract class BakeCommand extends Command */ protected string $pathFragment; + /** + * Initialize the command. + * + * @return void + */ + public function initialize(): void + { + parent::initialize(); + + $locator = $this->getTableLocator(); + if ($locator instanceof TableLocator) { + $locator->allowFallbackClass(true); + $this->setTableLocator($locator); + } + } + /** * Get the command name. * @@ -95,6 +112,7 @@ protected function _getName(string $name): string */ protected function getPrefix(Arguments $args): string { + /** @var string|null $prefix */ $prefix = $args->getOption('prefix'); if (!$prefix) { return ''; @@ -180,7 +198,7 @@ protected function deleteEmptyFile(string $path, ConsoleIo $io): void { if (file_exists($path)) { unlink($path); - $io->out(sprintf('Deleted `%s`', $path), 1, ConsoleIo::NORMAL); + $io->out(sprintf('Deleted `%s`', $path)); } } @@ -208,7 +226,12 @@ protected function isValidColumnName(string $name): bool protected function parseFile(string $path): ?ParsedFile { if (file_exists($path)) { - return (new CodeParser())->parseFile(file_get_contents($path)); + $contents = file_get_contents($path); + if ($contents === false) { + return null; + } + + return (new CodeParser())->parseFile($contents); } return null; diff --git a/app/vendor/cakephp/bake/src/Command/CommandCommand.php b/app/vendor/cakephp/bake/src/Command/CommandCommand.php index 580508e19..54cc7ae53 100644 --- a/app/vendor/cakephp/bake/src/Command/CommandCommand.php +++ b/app/vendor/cakephp/bake/src/Command/CommandCommand.php @@ -69,7 +69,7 @@ public function templateData(Arguments $arguments): array $data['command_name'] = Inflector::underscore(str_replace( '.', ' ', - $arguments->getArgument('name'), + $arguments->getArgument('name') ?? '', )); return $data; diff --git a/app/vendor/cakephp/bake/src/Command/ControllerCommand.php b/app/vendor/cakephp/bake/src/Command/ControllerCommand.php index c78bc5df4..82ca60d0b 100644 --- a/app/vendor/cakephp/bake/src/Command/ControllerCommand.php +++ b/app/vendor/cakephp/bake/src/Command/ControllerCommand.php @@ -84,7 +84,7 @@ public function bake(string $controllerName, Arguments $args, ConsoleIo $io): vo $actions = ['index', 'view', 'add', 'edit', 'delete']; } if ($args->getOption('actions')) { - $actions = array_map('trim', explode(',', $args->getOption('actions'))); + $actions = array_map('trim', explode(',', (string)$args->getOption('actions'))); $actions = array_filter($actions); } if (!$args->getOption('actions') && Plugin::isLoaded('Authentication') && $controllerName === 'Users') { @@ -129,6 +129,12 @@ public function bake(string $controllerName, Arguments $args, ConsoleIo $io): vo $singularHumanName = $this->_singularHumanName($controllerName); $pluralHumanName = $this->_variableName($controllerName); + // Handle cases where singular and plural are identical (e.g., "news", "sheep") + // to avoid variable collisions in generated controller code + if ($singularName === $pluralName) { + $singularName .= 'Entity'; + } + $defaultModel = sprintf('%s\Model\Table\%sTable', $namespace, $controllerName); if (!class_exists($defaultModel)) { $defaultModel = null; @@ -221,7 +227,7 @@ public function getComponents(Arguments $args): array { $components = []; if ($args->getOption('components')) { - $components = explode(',', $args->getOption('components')); + $components = explode(',', (string)$args->getOption('components')); $components = array_values(array_filter(array_map('trim', $components))); } else { if (Plugin::isLoaded('Authorization')) { @@ -242,7 +248,7 @@ public function getHelpers(Arguments $args): array { $helpers = []; if ($args->getOption('helpers')) { - $helpers = explode(',', $args->getOption('helpers')); + $helpers = explode(',', (string)$args->getOption('helpers')); $helpers = array_values(array_filter(array_map('trim', $helpers))); } diff --git a/app/vendor/cakephp/bake/src/Command/EntryCommand.php b/app/vendor/cakephp/bake/src/Command/EntryCommand.php index 87b9dd759..7c2d1c7db 100644 --- a/app/vendor/cakephp/bake/src/Command/EntryCommand.php +++ b/app/vendor/cakephp/bake/src/Command/EntryCommand.php @@ -82,7 +82,7 @@ public function run(array $argv, ConsoleIo $io): ?int $parser->argumentNames(), ); } catch (ConsoleException $e) { - $io->err('Error: ' . $e->getMessage()); + $io->error('Error: ' . $e->getMessage()); return static::CODE_ERROR; } @@ -109,14 +109,14 @@ public function execute(Arguments $args, ConsoleIo $io): ?int { if ($args->hasArgumentAt(0)) { $name = $args->getArgumentAt(0); - $io->err( - "Could not find bake command named `$name`." - . ' Run `bake --help` to get a list of commands.', + $io->error( + "Could not find bake command named `$name`." + . ' Run `bake --help` to get a list of commands.', ); return static::CODE_ERROR; } - $io->err('No command provided. Run `bake --help` to get a list of commands.'); + $io->warning('No command provided. Run `bake --help` to get a list of commands.'); return static::CODE_ERROR; } diff --git a/app/vendor/cakephp/bake/src/Command/FixtureAllCommand.php b/app/vendor/cakephp/bake/src/Command/FixtureAllCommand.php index 83de359c3..0b9b594d5 100644 --- a/app/vendor/cakephp/bake/src/Command/FixtureAllCommand.php +++ b/app/vendor/cakephp/bake/src/Command/FixtureAllCommand.php @@ -83,7 +83,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int $this->extractCommonProperties($args); /** @var \Cake\Database\Connection $connection */ - $connection = ConnectionManager::get($args->getOption('connection') ?? 'default'); + $connection = ConnectionManager::get((string)($args->getOption('connection') ?: 'default')); $scanner = new TableScanner($connection); $fixture = new FixtureCommand(); diff --git a/app/vendor/cakephp/bake/src/Command/FixtureCommand.php b/app/vendor/cakephp/bake/src/Command/FixtureCommand.php index b461cef26..5ccdec226 100644 --- a/app/vendor/cakephp/bake/src/Command/FixtureCommand.php +++ b/app/vendor/cakephp/bake/src/Command/FixtureCommand.php @@ -122,7 +122,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int return static::CODE_SUCCESS; } - $table = $args->getOption('table') ?? ''; + $table = (string)$args->getOption('table'); $model = $this->_camelize($name); $this->bake($model, $table, $args, $io); @@ -269,7 +269,7 @@ public function generateFixtureFile(Arguments $args, ConsoleIo $io, string $mode ->set($vars) ->generate('Bake.tests/fixture'); - $io->out("\n" . sprintf('Baking test fixture for %s...', $model), 1, ConsoleIo::NORMAL); + $io->out("\n" . sprintf('Baking test fixture for %s...', $model)); $io->createFile($path . $filename, $contents, $this->force); $emptyFile = $path . '.gitkeep'; $this->deleteEmptyFile($emptyFile, $io); @@ -285,16 +285,19 @@ protected function _generateSchema(TableSchemaInterface $table): string { $cols = $indexes = $constraints = []; foreach ($table->columns() as $field) { + /** @var array $fieldData */ $fieldData = $table->getColumn($field); $properties = implode(', ', $this->_values($fieldData)); $cols[] = " '$field' => [$properties],"; } foreach ($table->indexes() as $index) { + /** @var array $fieldData */ $fieldData = $table->getIndex($index); $properties = implode(', ', $this->_values($fieldData)); $indexes[] = " '$index' => [$properties],"; } foreach ($table->constraints() as $index) { + /** @var array $fieldData */ $fieldData = $table->getConstraint($index); $properties = implode(', ', $this->_values($fieldData)); $constraints[] = " '$index' => [$properties],"; @@ -360,6 +363,7 @@ protected function _generateRecords(TableSchemaInterface $table, int $recordCoun for ($i = 0; $i < $recordCount; $i++) { $record = []; foreach ($table->columns() as $field) { + /** @var array $fieldInfo */ $fieldInfo = $table->getColumn($field); $insert = ''; switch ($fieldInfo['type']) { diff --git a/app/vendor/cakephp/bake/src/Command/ModelCommand.php b/app/vendor/cakephp/bake/src/Command/ModelCommand.php index 48c45204a..33ec59f5a 100644 --- a/app/vendor/cakephp/bake/src/Command/ModelCommand.php +++ b/app/vendor/cakephp/bake/src/Command/ModelCommand.php @@ -16,6 +16,7 @@ */ namespace Bake\Command; +use Bake\CodeGen\ColumnTypeExtractor; use Bake\CodeGen\FileBuilder; use Bake\Utility\Model\EnumParser; use Bake\Utility\TableScanner; @@ -391,7 +392,8 @@ public function findBelongsTo(Table $model, array $associations, ?Arguments $arg if ($className && $className !== $tmpModelName) { $assoc['className'] = $className; } - if ($schema->getColumn($fieldName)['null'] === false) { + $columnInfo = $schema->getColumn($fieldName); + if ($columnInfo !== null && ($columnInfo['null'] ?? true) === false) { $assoc['joinType'] = 'INNER'; } } @@ -423,7 +425,7 @@ public function findTableReferencedBy(TableSchemaInterface $schema, string $keyF foreach ($schema->constraints() as $constraint) { $constraintInfo = $schema->getConstraint($constraint); - if (!in_array($keyField, $constraintInfo['columns'])) { + if (!in_array($keyField, $constraintInfo['columns'] ?? [])) { continue; } @@ -483,8 +485,9 @@ public function hasUniqueConstraintFor(TableSchemaInterface $schema, string $key foreach ($schema->constraints() as $constraint) { $constraintInfo = $schema->getConstraint($constraint); if ( - $constraintInfo['type'] === TableSchema::CONSTRAINT_UNIQUE && - $constraintInfo['columns'] === [$keyField] + $constraintInfo !== null && + ($constraintInfo['type'] ?? null) === TableSchema::CONSTRAINT_UNIQUE && + ($constraintInfo['columns'] ?? []) === [$keyField] ) { return true; } @@ -641,15 +644,15 @@ public function findBelongsToMany(Table $model, array $associations): array * * @param \Cake\ORM\Table $model The model to introspect. * @param \Cake\Console\Arguments $args CLI Arguments - * @return array|string|null + * @return array|string */ - public function getDisplayField(Table $model, Arguments $args): array|string|null + public function getDisplayField(Table $model, Arguments $args): array|string { if ($args->getOption('display-field')) { return (string)$args->getOption('display-field'); } - return $model->getDisplayField(); + return $model->getDisplayField() ?? []; } /** @@ -662,7 +665,7 @@ public function getDisplayField(Table $model, Arguments $args): array|string|nul public function getPrimaryKey(Table $model, Arguments $args): array { if ($args->getOption('primary-key')) { - $fields = explode(',', $args->getOption('primary-key')); + $fields = explode(',', (string)$args->getOption('primary-key')); return array_values(array_filter(array_map('trim', $fields))); } @@ -701,6 +704,7 @@ public function getEntityPropertySchema(Table $model): array $schema = $model->getSchema(); foreach ($schema->columns() as $column) { + /** @var array $columnSchema */ $columnSchema = $schema->getColumn($column); $properties[$column] = [ @@ -756,7 +760,7 @@ public function getFields(Table $table, Arguments $args): array|false|null return false; } if ($args->getOption('fields')) { - $fields = explode(',', $args->getOption('fields')); + $fields = explode(',', (string)$args->getOption('fields')); return array_values(array_filter(array_map('trim', $fields))); } @@ -785,7 +789,7 @@ public function getHiddenFields(Table $model, Arguments $args): array return []; } if ($args->getOption('hidden')) { - $fields = explode(',', $args->getOption('hidden')); + $fields = explode(',', (string)$args->getOption('hidden')); return array_values(array_filter(array_map('trim', $fields))); } @@ -931,8 +935,9 @@ public function fieldValidation( } foreach ($schema->constraints() as $constraint) { + /** @var array $constraint */ $constraint = $schema->getConstraint($constraint); - if (!in_array($fieldName, $constraint['columns'], true) || count($constraint['columns']) > 1) { + if (!in_array($fieldName, $constraint['columns'] ?? [], true) || count($constraint['columns']) > 1) { continue; } @@ -1009,6 +1014,7 @@ public function getRules(Table $model, array $associations, Arguments $args): ar $uniqueConstraintsColumns = []; foreach ($schema->constraints() as $name) { + /** @var array $constraint */ $constraint = $schema->getConstraint($name); if ($constraint['type'] !== TableSchema::CONSTRAINT_UNIQUE) { continue; @@ -1027,7 +1033,18 @@ public function getRules(Table $model, array $associations, Arguments $args): ar } } - $uniqueRules[] = ['name' => 'isUnique', 'fields' => $constraintFields, 'options' => $options]; + $rule = ['name' => 'isUnique', 'fields' => $constraintFields, 'options' => $options]; + + // Add descriptive message for composite unique constraints + if (count($constraintFields) > 1) { + $rule['message'] = sprintf( + 'This combination of %s and %s already exists', + implode(', ', array_slice($constraintFields, 0, -1)), + end($constraintFields), + ); + } + + $uniqueRules[] = $rule; } $possiblyUniqueColumns = ['username', 'login']; @@ -1146,7 +1163,7 @@ public function bakeEntity(Table $model, array $data, Arguments $args, ConsoleIo } $name = $this->_entityName($model->getAlias()); - $io->out("\n" . sprintf('Baking entity class for %s...', $name), 1, ConsoleIo::NORMAL); + $io->out("\n" . sprintf('Baking entity class for %s...', $name)); $namespace = Configure::read('App.namespace'); $pluginPath = ''; @@ -1198,7 +1215,7 @@ public function bakeTable(Table $model, array $data, Arguments $args, ConsoleIo } $name = $model->getAlias(); - $io->out("\n" . sprintf('Baking table class for %s...', $name), 1, ConsoleIo::NORMAL); + $io->out("\n" . sprintf('Baking table class for %s...', $name)); $namespace = Configure::read('App.namespace'); $pluginPath = ''; @@ -1210,11 +1227,24 @@ public function bakeTable(Table $model, array $data, Arguments $args, ConsoleIo $filename = $path . 'Table' . DS . $name . 'Table.php'; $parsedFile = null; + $customColumnTypes = []; if ($args->getOption('update')) { $parsedFile = $this->parseFile($filename); + // Extract custom column types from existing file + if ($parsedFile && isset($parsedFile->class->methods['initialize'])) { + $customColumnTypes = $this->extractCustomColumnTypes($parsedFile->class->methods['initialize']); + } } $entity = $this->_entityName($model->getAlias()); + $enums = $this->enums($model, $entity, $namespace); + + // Merge custom column types with generated enums + // Remove custom types that are now handled by enums + foreach ($enums as $field => $enumClass) { + unset($customColumnTypes[$field]); + } + $data += [ 'plugin' => $this->plugin, 'pluginPath' => $pluginPath, @@ -1228,7 +1258,8 @@ public function bakeTable(Table $model, array $data, Arguments $args, ConsoleIo 'validation' => [], 'rulesChecker' => [], 'behaviors' => [], - 'enums' => $this->enums($model, $entity, $namespace), + 'enums' => $enums, + 'customColumnTypes' => $customColumnTypes, 'connection' => $this->connection, 'fileBuilder' => new FileBuilder($io, "{$namespace}\Model\Table", $parsedFile), ]; @@ -1237,7 +1268,7 @@ public function bakeTable(Table $model, array $data, Arguments $args, ConsoleIo ->set($data) ->generate('Bake.Model/table'); - $this->writefile($io, $filename, $contents, $this->force); + $this->writeFile($io, $filename, $contents, $this->force); // Work around composer caching that classes/files do not exist. // Check for the file as it might not exist in tests. @@ -1450,6 +1481,7 @@ protected function possibleEnumFields(TableSchemaInterface $schema): array $fields = []; foreach ($schema->columns() as $column) { + /** @var array $columnSchema */ $columnSchema = $schema->getColumn($column); if (str_starts_with($columnSchema['type'], 'enum-')) { $fields[] = $column; @@ -1476,6 +1508,7 @@ protected function getEnumDefinitions(TableSchemaInterface $schema): array $enums = []; foreach ($schema->columns() as $column) { + /** @var array $columnSchema */ $columnSchema = $schema->getColumn($column); if ( !in_array($columnSchema['type'], ['string', 'integer', 'tinyinteger', 'smallinteger'], true) @@ -1593,4 +1626,17 @@ protected function createAssociationAlias(array $association): string return $this->_modelNameFromKey($foreignKey); } + + /** + * Extract custom column type mappings from existing initialize method + * + * @param string $initializeMethod The initialize method code + * @return array Map of column names to type expressions + */ + protected function extractCustomColumnTypes(string $initializeMethod): array + { + $extractor = new ColumnTypeExtractor(); + + return $extractor->extract($initializeMethod); + } } diff --git a/app/vendor/cakephp/bake/src/Command/PluginCommand.php b/app/vendor/cakephp/bake/src/Command/PluginCommand.php index 341f73e3d..551d10de7 100644 --- a/app/vendor/cakephp/bake/src/Command/PluginCommand.php +++ b/app/vendor/cakephp/bake/src/Command/PluginCommand.php @@ -56,8 +56,8 @@ public function execute(Arguments $args, ConsoleIo $io): ?int { $name = $args->getArgument('name'); if (empty($name)) { - $io->err('You must provide a plugin name in CamelCase format.'); - $io->err('To make an "MyExample" plugin, run `cake bake plugin MyExample`.'); + $io->error('You must provide a plugin name in CamelCase format.'); + $io->out('To make an "MyExample" plugin, run `cake bake plugin MyExample`.'); return static::CODE_ERROR; } @@ -65,19 +65,19 @@ public function execute(Arguments $args, ConsoleIo $io): ?int $plugin = implode('/', array_map([Inflector::class, 'camelize'], $parts)); if ($args->getOption('standalone-path')) { - $this->path = $args->getOption('standalone-path'); + $this->path = (string)$args->getOption('standalone-path'); $this->path = rtrim($this->path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; $this->isVendor = true; if (!is_dir($this->path)) { - $io->err(sprintf('Path `%s` does not exist.', $this->path)); + $io->error(sprintf('Path `%s` does not exist.', $this->path)); return static::CODE_ERROR; } } $pluginPath = $this->_pluginPath($plugin); - if (is_dir($pluginPath)) { + if (is_dir($pluginPath) && !$args->getOption('class-only')) { $io->out(sprintf('Plugin: %s already exists, no action taken', $plugin)); $io->out(sprintf('Path: %s', $pluginPath)); @@ -105,7 +105,8 @@ public function bake(string $plugin, Arguments $args, ConsoleIo $io): ?bool { if (!$this->isVendor) { $pathOptions = App::path('plugins'); - $this->path = current($pathOptions); + $currentPath = current($pathOptions); + $this->path = $currentPath !== false ? $currentPath : ''; if (count($pathOptions) > 1) { $this->findPath($pathOptions, $io); @@ -125,11 +126,18 @@ public function bake(string $plugin, Arguments $args, ConsoleIo $io): ?bool $this->_generateFiles($plugin, $this->path, $args, $io); if (!$this->isVendor) { - $this->_modifyApplication($plugin, $io); + if (!$args->getOption('class-only')) { + $this->_modifyApplication($plugin, $io); + } $composer = $this->findComposer($args, $io); + if ($composer === false) { + $io->error('Could not find composer executable.'); + $this->abort(); + } try { + /** @var non-empty-string $cwd */ $cwd = getcwd(); // Windows makes running multiple commands at once hard. @@ -198,7 +206,7 @@ protected function _generateFiles( $package = Inflector::dasherize($vendor) . '/' . Inflector::dasherize($name); $composerConfig = json_decode( - file_get_contents(ROOT . DS . 'composer.json'), + (string)file_get_contents(ROOT . DS . 'composer.json'), true, ); @@ -219,7 +227,7 @@ protected function _generateFiles( $paths = []; if ($args->hasOption('theme')) { - $paths[] = Plugin::templatePath($args->getOption('theme')); + $paths[] = Plugin::templatePath((string)$args->getOption('theme')); } $paths = array_merge($paths, Configure::read('App.paths.templates')); @@ -247,6 +255,12 @@ protected function _generateFiles( } } + if ($args->getOption('class-only')) { + $files = array_filter($files, function ($file) { + return $file->getFilename() === 'Plugin.php.twig'; + }); + } + $templates = array_keys($files); } } while (!$templates); @@ -256,8 +270,8 @@ protected function _generateFiles( $template = substr($template, strrpos($template, 'Plugin' . DIRECTORY_SEPARATOR) + 7, -4); $template = rtrim($template, '.'); $filename = $template; - if ($filename === 'src/Plugin.php') { - $filename = 'src/' . $name . 'Plugin.php'; + if ($filename === 'src' . DIRECTORY_SEPARATOR . 'Plugin.php') { + $filename = 'src' . DIRECTORY_SEPARATOR . $name . 'Plugin.php'; } $this->_generateFile($renderer, $template, $root, $filename, $io); } @@ -370,6 +384,10 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar ->addOption('standalone-path', [ 'short' => 'p', 'help' => 'Generate a standalone plugin in the provided path.', + ])->addOption('class-only', [ + 'short' => 'c', + 'boolean' => true, + 'help' => 'Generate only the plugin class.', ]); return $parser; @@ -380,7 +398,7 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar * * @param \Cake\Console\Arguments $args The command arguments. * @param \Cake\Console\ConsoleIo $io The console io - * @return string|bool Either the path to composer or false if it cannot be found. + * @return string|false Either the path to composer or false if it cannot be found. */ public function findComposer(Arguments $args, ConsoleIo $io): string|bool { @@ -392,7 +410,7 @@ public function findComposer(Arguments $args, ConsoleIo $io): string|bool } } $composer = false; - $path = env('PATH'); + $path = (string)env('PATH'); if (!empty($path)) { $paths = explode(PATH_SEPARATOR, $path); $composer = $this->_searchPath($paths, $io); @@ -406,7 +424,7 @@ public function findComposer(Arguments $args, ConsoleIo $io): string|bool * * @param array $path The paths to search. * @param \Cake\Console\ConsoleIo $io The console io - * @return string|bool + * @return string|false */ protected function _searchPath(array $path, ConsoleIo $io): string|bool { diff --git a/app/vendor/cakephp/bake/src/Command/SimpleBakeCommand.php b/app/vendor/cakephp/bake/src/Command/SimpleBakeCommand.php index 35527749a..2df9572af 100644 --- a/app/vendor/cakephp/bake/src/Command/SimpleBakeCommand.php +++ b/app/vendor/cakephp/bake/src/Command/SimpleBakeCommand.php @@ -78,7 +78,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int $this->extractCommonProperties($args); $name = $args->getArgumentAt(0); if (empty($name)) { - $io->err('You must provide a name to bake a ' . $this->name()); + $io->error('You must provide a name to bake a ' . $this->name()); $this->abort(); } $name = $this->_getName($name); diff --git a/app/vendor/cakephp/bake/src/Command/TemplateCommand.php b/app/vendor/cakephp/bake/src/Command/TemplateCommand.php index 558187ab9..64619f00c 100644 --- a/app/vendor/cakephp/bake/src/Command/TemplateCommand.php +++ b/app/vendor/cakephp/bake/src/Command/TemplateCommand.php @@ -100,7 +100,17 @@ class TemplateCommand extends BakeCommand */ public function initialize(): void { - $this->path = current(App::path('templates')); + parent::initialize(); + + $templatePaths = App::path('templates'); + if ($templatePaths === []) { + throw new RuntimeException( + 'Could not read template paths. ' . + 'Ensure `App.paths.templates` is defined in your application configuration.', + ); + } + + $this->path = current($templatePaths); } /** @@ -130,8 +140,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int $template = $args->getArgument('template'); $action = $args->getArgument('action'); - $controller = $args->getOption('controller'); - $this->controller($args, $name, $controller); + $this->controller($args, $name, (string)$args->getOption('controller')); $this->model($name); if ($template && $action === null) { @@ -316,6 +325,12 @@ protected function _loadController(ConsoleIo $io): array $pluralVar = Inflector::variable($this->controllerName); $pluralHumanName = $this->_pluralHumanName($this->controllerName); + // Handle cases where singular and plural are identical (e.g., "news", "sheep") + // to avoid generating invalid code like `foreach ($news as $news)` + if ($singularVar === $pluralVar) { + $singularVar .= 'Entity'; + } + return compact( 'modelObject', 'modelClass', @@ -360,14 +375,14 @@ public function bake( } if (empty($content)) { // phpcs:ignore Generic.Files.LineLength - $io->err("No generated content for '{$template}.{$this->ext}', not generating template."); + $io->warning("No generated content for '{$template}.{$this->ext}', not generating template."); return; } $path = $this->getTemplatePath($args); $filename = $path . Inflector::underscore($outputFile) . '.' . $this->ext; - $io->out("\n" . sprintf('Baking `%s` view template file...', $outputFile), 1, ConsoleIo::NORMAL); + $io->out("\n" . sprintf('Baking `%s` view template file...', $outputFile)); $io->createFile($filename, $content, $this->force); } diff --git a/app/vendor/cakephp/bake/src/Command/TestCommand.php b/app/vendor/cakephp/bake/src/Command/TestCommand.php index dd5e6c301..0231bf88b 100644 --- a/app/vendor/cakephp/bake/src/Command/TestCommand.php +++ b/app/vendor/cakephp/bake/src/Command/TestCommand.php @@ -55,6 +55,7 @@ class TestCommand extends BakeCommand 'Command' => 'Command', 'CommandHelper' => 'Command\Helper', 'Middleware' => 'Middleware', + 'Class' => '', ]; /** @@ -75,6 +76,7 @@ class TestCommand extends BakeCommand 'Command' => 'Command', 'CommandHelper' => 'Helper', 'Middleware' => 'Middleware', + 'Class' => '', ]; /** @@ -108,7 +110,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int return null; } - $type = $this->normalize($args->getArgument('type')); + $type = $this->normalize((string)$args->getArgument('type')); if ($args->getOption('all')) { $this->_bakeAll($type, $args, $io); @@ -120,11 +122,15 @@ public function execute(Arguments $args, ConsoleIo $io): ?int return null; } - $name = $args->getArgument('name'); + $name = (string)$args->getArgument('name'); $name = $this->_getName($name); - if ($this->bake($type, $name, $args, $io)) { - $io->out('Done'); + $result = $this->bake($type, $name, $args, $io); + if ($result === static::CODE_ERROR) { + return static::CODE_ERROR; + } + if ($result) { + $io->success('Done'); } return static::CODE_SUCCESS; @@ -188,13 +194,13 @@ protected function _bakeAll(string $type, Arguments $args, ConsoleIo $io): void foreach ($classes as $class) { if ($this->bake($type, $class, $args, $io)) { - $io->out('Done - ' . $class . ''); + $io->success('Done - ' . $class); } else { - $io->out('Failed - ' . $class . ''); + $io->error('Failed - ' . $class); } } - $io->out('Bake finished'); + $io->info('Bake finished'); } /** @@ -212,10 +218,30 @@ protected function _getClassOptions(string $namespace): array } $path = $base . str_replace('\\', DS, $namespace); - $files = (new Filesystem())->find($path); - foreach ($files as $fileObj) { - if ($fileObj->isFile()) { - $classes[] = substr($fileObj->getFileName(), 0, -4) ?: ''; + + // For generic Class type (empty namespace), search recursively + if ($namespace === '') { + $files = (new Filesystem())->findRecursive($path, '/\.php$/'); + foreach ($files as $fileObj) { + if ($fileObj->isFile() && $fileObj->getFileName() !== 'Application.php') { + // Build the namespace path relative to App directory + /** @var string $relativePath */ + $relativePath = str_replace($base, '', $fileObj->getPath()); + $relativePath = trim(str_replace(DIRECTORY_SEPARATOR, '\\', $relativePath), '\\'); + $className = substr($fileObj->getFileName(), 0, -4) ?: ''; + if ($relativePath) { + $classes[] = $relativePath . '\\' . $className; + } else { + $classes[] = $className; + } + } + } + } else { + $files = (new Filesystem())->find($path); + foreach ($files as $fileObj) { + if ($fileObj->isFile()) { + $classes[] = substr($fileObj->getFileName(), 0, -4) ?: ''; + } } } sort($classes); @@ -230,26 +256,58 @@ protected function _getClassOptions(string $namespace): array * @param string $className the 'cake name' for the class ie. Posts for the PostsController * @param \Cake\Console\Arguments $args Arguments * @param \Cake\Console\ConsoleIo $io ConsoleIo instance - * @return string|bool + * @return string|bool|int Returns the generated code as string on success, false on failure, or CODE_ERROR for validation errors */ - public function bake(string $type, string $className, Arguments $args, ConsoleIo $io): string|bool + public function bake(string $type, string $className, Arguments $args, ConsoleIo $io): string|bool|int { $type = $this->normalize($type); if (!isset($this->classSuffixes[$type]) || !isset($this->classTypes[$type])) { return false; } + // For Class type, validate that backslashes are properly escaped + if ($type === 'Class' && !str_contains($className, '\\')) { + $io->error('Class name appears to have no namespace separators.'); + $io->out(''); + $io->out('If you meant to specify a namespaced class, please use quotes:'); + $io->out(" bin/cake bake test class '{$className}'"); + $io->out(''); + $io->out('Or specify without the base namespace:'); + $io->out(' bin/cake bake test class YourNamespace\ClassName'); + + return static::CODE_ERROR; + } + $prefix = $this->getPrefix($args); $fullClassName = $this->getRealClassName($type, $className, $prefix); + // For Class type, validate that the class exists + if ($type === 'Class' && !class_exists($fullClassName)) { + $io->error("Class '{$fullClassName}' does not exist or cannot be loaded."); + $io->out(''); + $io->out('Please check:'); + $io->out(' - The class file exists in the correct location'); + $io->out(' - The class is properly autoloaded'); + $io->out(' - The namespace and class name are correct'); + + return static::CODE_ERROR; + } + + // Check if fixture factories plugin is available + $hasFixtureFactories = $this->hasFixtureFactories(); + if (!$args->getOption('no-fixture')) { - if ($args->getOption('fixtures')) { - $fixtures = array_map('trim', explode(',', $args->getOption('fixtures'))); + if ($hasFixtureFactories) { + $io->info('Fixture Factories plugin detected - skipping fixture property generation.'); + } elseif ($args->getOption('fixtures')) { + $fixtures = array_map('trim', explode(',', (string)$args->getOption('fixtures'))); $this->_fixtures = array_filter($fixtures); } elseif ($this->typeCanDetectFixtures($type) && class_exists($fullClassName)) { $io->out('Bake is detecting possible fixtures...'); $testSubject = $this->buildTestSubject($type, $fullClassName); - $this->generateFixtureList($testSubject); + if ($testSubject instanceof Table || $testSubject instanceof Controller) { + $this->generateFixtureList($testSubject); + } } } @@ -261,8 +319,14 @@ public function bake(string $type, string $className, Arguments $args, ConsoleIo [$preConstruct, $construction, $postConstruct] = $this->generateConstructor($type, $fullClassName); $uses = $this->generateUses($type, $fullClassName); - $subject = $className; - [$namespace, $className] = namespaceSplit($fullClassName); + // For generic Class type, extract just the class name for the subject + if ($type === 'Class') { + [$namespace, $className] = namespaceSplit($fullClassName); + $subject = $className; + } else { + $subject = $className; + [$namespace, $className] = namespaceSplit($fullClassName); + } $baseNamespace = Configure::read('App.namespace'); if ($this->plugin) { @@ -277,6 +341,7 @@ public function bake(string $type, string $className, Arguments $args, ConsoleIo $contents = $this->createTemplateRenderer() ->set('fixtures', $this->_fixtures) ->set('plugin', $this->plugin) + ->set('hasFixtureFactories', $hasFixtureFactories) ->set(compact( 'subject', 'className', @@ -305,6 +370,17 @@ public function bake(string $type, string $className, Arguments $args, ConsoleIo return false; } + /** + * Check if the CakePHP Fixture Factories plugin is available + * + * @return bool + */ + protected function hasFixtureFactories(): bool + { + return class_exists('CakephpFixtureFactories\Plugin') + || class_exists('CakephpFixtureFactories\CakephpFixtureFactoriesPlugin'); + } + /** * Checks whether the chosen type can find its own fixtures. * Currently only model, and controller are supported @@ -364,6 +440,17 @@ public function getRealClassName(string $type, string $class, ?string $prefix = if ($this->plugin) { $namespace = str_replace('/', '\\', $this->plugin); } + + // For generic Class type, the class name contains the full subnamespace path + if ($type === 'Class') { + // Strip base namespace if user included it + if (str_starts_with($class, $namespace . '\\')) { + $class = substr($class, strlen($namespace) + 1); + } + + return $namespace . '\\' . $class; + } + $suffix = $this->classSuffixes[$type]; $subSpace = $this->mapType($type); if ($suffix && strpos($class, $suffix) === false) { @@ -398,7 +485,7 @@ public function getSubspacePath(string $type): string */ public function mapType(string $type): string { - if (empty($this->classTypes[$type])) { + if (!isset($this->classTypes[$type])) { throw new CakeException('Invalid object type: ' . $type); } @@ -409,7 +496,7 @@ public function mapType(string $type): string * Get methods declared in the class given. * No parent methods will be returned * - * @param string $className Name of class to look at. + * @param class-string $className Name of class to look at. * @return array Array of method names. * @throws \ReflectionException */ @@ -568,6 +655,18 @@ public function generateConstructor(string $type, string $fullClassName): array $pre .= ' $this->io = new ConsoleIo($this->stub);'; $construct = "new {$className}(\$this->io);"; } + if ($type === 'Class') { + // Check if class has required constructor parameters + if (class_exists($fullClassName)) { + $reflection = new ReflectionClass($fullClassName); + $constructor = $reflection->getConstructor(); + if (!$constructor || $constructor->getNumberOfRequiredParameters() === 0) { + $construct = "new {$className}();"; + } + } else { + $construct = "new {$className}();"; + } + } return [$pre, $construct, $post]; } @@ -618,7 +717,17 @@ public function generateProperties(string $type, string $subject, string $fullCl break; } - if (!in_array($type, ['Controller', 'Command'])) { + // Skip test subject property for Controller, Command, and Class types with required constructor params + $skipProperty = in_array($type, ['Controller', 'Command'], true); + if ($type === 'Class' && class_exists($fullClassName)) { + $reflection = new ReflectionClass($fullClassName); + $constructor = $reflection->getConstructor(); + if ($constructor && $constructor->getNumberOfRequiredParameters() > 0) { + $skipProperty = true; + } + } + + if (!$skipProperty) { $properties[] = [ 'description' => 'Test subject', 'type' => '\\' . $fullClassName, diff --git a/app/vendor/cakephp/bake/src/Utility/CommonOptionsTrait.php b/app/vendor/cakephp/bake/src/Utility/CommonOptionsTrait.php index fde67f954..b2a379f9c 100644 --- a/app/vendor/cakephp/bake/src/Utility/CommonOptionsTrait.php +++ b/app/vendor/cakephp/bake/src/Utility/CommonOptionsTrait.php @@ -62,7 +62,7 @@ protected function extractCommonProperties(Arguments $args): void // These properties should ideally not exist, but until ConsoleOptionParser // gets validation and transform logic they will have to stay. if ($args->hasOption('plugin')) { - $plugin = $args->getOption('plugin'); + $plugin = (string)$args->getOption('plugin'); $parts = explode('/', $plugin); $this->plugin = implode('/', array_map([$this, '_camelize'], $parts)); @@ -73,9 +73,11 @@ protected function extractCommonProperties(Arguments $args): void } } - $this->theme = $args->getOption('theme'); - $this->connection = $args->getOption('connection'); - $this->force = $args->getOption('force'); + $theme = $args->getOption('theme'); + $this->theme = is_string($theme) ? $theme : null; + $connection = $args->getOption('connection'); + $this->connection = is_string($connection) ? $connection : 'default'; + $this->force = (bool)$args->getOption('force'); } /** diff --git a/app/vendor/cakephp/bake/src/Utility/Model/AssociationFilter.php b/app/vendor/cakephp/bake/src/Utility/Model/AssociationFilter.php index c6f6a47c5..3ed039321 100644 --- a/app/vendor/cakephp/bake/src/Utility/Model/AssociationFilter.php +++ b/app/vendor/cakephp/bake/src/Utility/Model/AssociationFilter.php @@ -93,6 +93,7 @@ public function filterAssociations(Table $model): array } try { + $foreignKey = (array)$assoc->getForeignKey(); $associations[$type][$assocName] = [ 'property' => $assoc->getProperty(), 'variable' => Inflector::variable($assocName), @@ -101,7 +102,7 @@ public function filterAssociations(Table $model): array 'foreignKey' => $assoc->getForeignKey(), 'alias' => $alias, 'controller' => $className, - 'fields' => $target->getSchema()->columns(), + 'fields' => array_values(array_diff($target->getSchema()->columns(), $foreignKey)), 'navLink' => $navLink, ]; } catch (Exception $e) { diff --git a/app/vendor/cakephp/bake/src/Utility/Model/EnumParser.php b/app/vendor/cakephp/bake/src/Utility/Model/EnumParser.php index e559fe03e..3cf32999b 100644 --- a/app/vendor/cakephp/bake/src/Utility/Model/EnumParser.php +++ b/app/vendor/cakephp/bake/src/Utility/Model/EnumParser.php @@ -23,9 +23,10 @@ public static function parseCases(?string $casesString, bool $int): array $definition = []; foreach ($enumCases as $k => $enumCase) { $case = $value = trim($enumCase); - if (str_contains($case, ':')) { - $value = trim(mb_substr($case, strpos($case, ':') + 1)); - $case = mb_substr($case, 0, strpos($case, ':')); + $pos = strpos($case, ':'); + if ($pos !== false) { + $value = trim(mb_substr($case, $pos + 1)); + $case = mb_substr($case, 0, $pos); } elseif ($int) { $value = $k; } @@ -52,8 +53,9 @@ public static function parseCases(?string $casesString, bool $int): array public static function parseDefinitionString(string $comment): string { $string = trim(mb_substr($comment, strpos($comment, '[enum]') + 6)); - if (str_contains($string, ';')) { - $string = trim(mb_substr($string, 0, strpos($string, ';'))); + $pos = strpos($string, ';'); + if ($pos !== false) { + $string = trim(mb_substr($string, 0, $pos)); } return $string; diff --git a/app/vendor/cakephp/bake/src/Utility/SubsetSchemaCollection.php b/app/vendor/cakephp/bake/src/Utility/SubsetSchemaCollection.php index 290332159..6f202c08d 100644 --- a/app/vendor/cakephp/bake/src/Utility/SubsetSchemaCollection.php +++ b/app/vendor/cakephp/bake/src/Utility/SubsetSchemaCollection.php @@ -33,7 +33,7 @@ class SubsetSchemaCollection implements CollectionInterface protected CollectionInterface $collection; /** - * @var list + * @var array */ protected array $tables = []; @@ -60,7 +60,7 @@ public function getInnerCollection(): CollectionInterface /** * Get the list of tables in this schema collection. * - * @return list + * @return array */ public function listTables(): array { diff --git a/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php b/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php index d3f8eb633..42996b97a 100644 --- a/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php +++ b/app/vendor/cakephp/bake/src/Utility/TemplateRenderer.php @@ -59,7 +59,7 @@ public function __construct(?string $theme = null) /** * Get view instance * - * @return \Cake\View\View + * @return \Bake\View\BakeView * @triggers Bake.initialize $view */ public function getView(): View diff --git a/app/vendor/cakephp/bake/src/View/BakeView.php b/app/vendor/cakephp/bake/src/View/BakeView.php index 841865434..78928f10a 100644 --- a/app/vendor/cakephp/bake/src/View/BakeView.php +++ b/app/vendor/cakephp/bake/src/View/BakeView.php @@ -18,17 +18,12 @@ use Cake\Core\Configure; use Cake\Core\ConventionsTrait; -use Cake\Event\EventDispatcherTrait; use Cake\Event\EventInterface; use Cake\TwigView\View\TwigView; use function Cake\Core\pluginSplit; class BakeView extends TwigView { - /** - * @use \Cake\Event\EventDispatcherTrait<\Cake\View\View> - */ - use EventDispatcherTrait; use ConventionsTrait; /** @@ -81,6 +76,8 @@ public function initialize(): void */ public function render(?string $template = null, string|false|null $layout = null): string { + assert($template !== null, 'Template name must be provided.'); + $viewFileName = $this->_getTemplateFileName($template); [, $templateEventName] = pluginSplit($template); $templateEventName = str_replace(['/', '\\'], '.', $templateEventName); @@ -107,19 +104,19 @@ public function render(?string $template = null, string|false|null $layout = nul * * Use the Bake prefix for bake related view events * - * @template TSubject of \Cake\View\View * @param string $name Name of the event. * @param array $data Any value you wish to be transported with this event to * it can be read by listeners. - * - * @param TSubject|null $subject The object that this event applies to + * @param object|null $subject The object that this event applies to * ($this by default). - * @return \Cake\Event\EventInterface<\Cake\View\View> + * @return \Cake\Event\EventInterface + * @phpstan-ignore missingType.generics */ public function dispatchEvent(string $name, array $data = [], ?object $subject = null): EventInterface { - $name = preg_replace('/^View\./', 'Bake.', $name); + $name = (string)preg_replace('/^View\./', 'Bake.', $name); + /** @phpstan-ignore-next-line missingType.generics */ return parent::dispatchEvent($name, $data, $subject); } @@ -128,7 +125,7 @@ public function dispatchEvent(string $name, array $data = [], ?object $subject = * * @param ?string $plugin Optional plugin name to scan for view files. * @param bool $cached Set to false to force a refresh of view paths. Default true. - * @return list paths + * @return array paths */ protected function _paths(?string $plugin = null, bool $cached = true): array { diff --git a/app/vendor/cakephp/bake/src/View/Helper/BakeHelper.php b/app/vendor/cakephp/bake/src/View/Helper/BakeHelper.php index 41b48a9e7..51aa44a23 100644 --- a/app/vendor/cakephp/bake/src/View/Helper/BakeHelper.php +++ b/app/vendor/cakephp/bake/src/View/Helper/BakeHelper.php @@ -21,6 +21,8 @@ /** * Bake helper + * + * @extends \Cake\View\Helper<\Cake\View\View> */ class BakeHelper extends Helper { @@ -304,7 +306,7 @@ public function columnData(string $field, TableSchema $schema): ?array public function enumSupportsLabel(string $field, TableSchema $schema): bool { $typeName = $schema->getColumnType($field); - if (!str_starts_with($typeName, 'enum-')) { + if (!$typeName || !str_starts_with($typeName, 'enum-')) { return false; } $type = TypeFactory::build($typeName); diff --git a/app/vendor/cakephp/bake/src/View/Helper/DocBlockHelper.php b/app/vendor/cakephp/bake/src/View/Helper/DocBlockHelper.php index 05b988f1a..a0618413c 100644 --- a/app/vendor/cakephp/bake/src/View/Helper/DocBlockHelper.php +++ b/app/vendor/cakephp/bake/src/View/Helper/DocBlockHelper.php @@ -13,6 +13,8 @@ /** * DocBlock helper + * + * @extends \Cake\View\Helper<\Cake\View\View> */ class DocBlockHelper extends Helper { diff --git a/app/vendor/cakephp/bake/templates/bake/Command/command.twig b/app/vendor/cakephp/bake/templates/bake/Command/command.twig index 9580b3fa4..d862366b0 100644 --- a/app/vendor/cakephp/bake/templates/bake/Command/command.twig +++ b/app/vendor/cakephp/bake/templates/bake/Command/command.twig @@ -58,7 +58,7 @@ class {{ name }}Command extends Command /** * Hook method for defining this command's option parser. * - * @see https://book.cakephp.org/5/en/console-commands/commands.html#defining-arguments-and-options + * @link https://book.cakephp.org/5/en/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined * @return \Cake\Console\ConsoleOptionParser The built parser. */ diff --git a/app/vendor/cakephp/bake/templates/bake/Controller/controller.twig b/app/vendor/cakephp/bake/templates/bake/Controller/controller.twig index 83a843e1c..3212114f6 100644 --- a/app/vendor/cakephp/bake/templates/bake/Controller/controller.twig +++ b/app/vendor/cakephp/bake/templates/bake/Controller/controller.twig @@ -32,7 +32,7 @@ {% endif %} {%- for component in components %} -{% set classInfo = Bake.classInfo(component, 'Controller/Component', 'Component') %} + {%~ set classInfo = Bake.classInfo(component, 'Controller/Component', 'Component') %} * @property {{ classInfo.fqn }} ${{ classInfo.name }} {% endfor %} */ @@ -48,20 +48,20 @@ class {{ name }}Controller extends AppController { parent::initialize(); -{% for component in components %} + {%~ for component in components %} $this->loadComponent('{{ component }}'); -{% endfor %} -{% if helpers %} + {%~ endfor %} + {%~ if helpers %} $this->viewBuilder()->setHelpers({{ Bake.exportArray(helpers)|raw }}); -{% endif %} -{% if has_login %} + {%~ endif %} + {%~ if has_login %} $this->Authentication->allowUnauthenticated(['login']); -{% endif %} + {%~ endif %} } -{% if actions|length %}{{ "\n" }}{% endif %} + {%~ if actions|length %}{{ "\n" }}{% endif %} {% endif %} -{%- for action in actions %} -{% if loop.index > 1 %}{{ "\n" }}{% endif %} +{% for action in actions %} + {%~ if loop.index > 1 %}{{ "\n" }}{% endif %} {{- element('Bake.Controller/' ~ action) -}} {% endfor %} } diff --git a/app/vendor/cakephp/bake/templates/bake/Model/entity.twig b/app/vendor/cakephp/bake/templates/bake/Model/entity.twig index 2524788ee..ab924dd7b 100644 --- a/app/vendor/cakephp/bake/templates/bake/Model/entity.twig +++ b/app/vendor/cakephp/bake/templates/bake/Model/entity.twig @@ -18,8 +18,8 @@ {% set annotations = DocBlock.propertyHints(propertyHintMap) %} {%- if associationHintMap %} - {%- set annotations = annotations|merge(['']) %} - {%- set annotations = annotations|merge(DocBlock.propertyHints(associationHintMap)) %} + {%~ set annotations = annotations|merge(['']) %} + {%~ set annotations = annotations|merge(DocBlock.propertyHints(associationHintMap)) %} {% endif %} {%- set accessible = Bake.getFieldAccessibility(fields, primaryKey) %} @@ -39,7 +39,7 @@ class {{ name }} extends Entity{{ fileBuilder.classBuilder.implements ? ' implem {% endif %} {% if accessible %} -{%- set generatedProperties = generatedProperties|merge(['_accessible']) %} +{%~ set generatedProperties = generatedProperties|merge(['_accessible']) %} /** * Fields that can be mass assigned using newEntity() or patchEntity(). * @@ -54,12 +54,12 @@ class {{ name }} extends Entity{{ fileBuilder.classBuilder.implements ? ' implem {% if accessible and hidden %} {% endif %} -{%- if hidden %} -{%- set generatedProperties = generatedProperties|merge(['_hidden']) %} +{% if hidden %} + {%~ set generatedProperties = generatedProperties|merge(['_hidden']) %} /** * Fields that are excluded from JSON versions of the entity. * - * @var list + * @var array */ protected array $_hidden = {{ Bake.exportVar(hidden, 1)|raw }}; {% endif %} diff --git a/app/vendor/cakephp/bake/templates/bake/Model/table.twig b/app/vendor/cakephp/bake/templates/bake/Model/table.twig index acd786fae..76511babc 100644 --- a/app/vendor/cakephp/bake/templates/bake/Model/table.twig +++ b/app/vendor/cakephp/bake/templates/bake/Model/table.twig @@ -50,58 +50,49 @@ class {{ name }}Table extends Table{{ fileBuilder.classBuilder.implements ? ' im {%- if displayField %} $this->setDisplayField({{ (displayField is iterable ? Bake.exportArray(displayField) : Bake.exportVar(displayField))|raw }}); {% endif %} - -{%- if primaryKey %} - {%- if primaryKey is iterable and primaryKey|length > 1 %} +{% if primaryKey %} + {%~ if primaryKey is iterable and primaryKey|length > 1 %} $this->setPrimaryKey({{ Bake.exportArray(primaryKey)|raw }}); - {{- "\n" }} - {%- else %} + {%~ else %} $this->setPrimaryKey('{{ primaryKey|as_array|first }}'); - {{- "\n" }} - {%- endif %} -{% endif %} - -{%- if enums %} - + {%~ endif %} {% endif %} +{% if enums %} -{%- if enums %} - -{%- for name, className in enums %} + {%~ for name, className in enums %} $this->getSchema()->setColumnType('{{ name }}', \Cake\Database\Type\EnumType::from(\{{ className }}::class)); -{% endfor %} + {%~ endfor %} {% endif %} +{% if customColumnTypes is defined and customColumnTypes %} -{%- if behaviors %} - + {%~ for columnName, typeExpression in customColumnTypes %} + $this->getSchema()->setColumnType('{{ columnName }}', {{ typeExpression|raw }}); + {%~ endfor %} {% endif %} +{% if behaviors %} -{%- for behavior, behaviorData in behaviors %} + {%~ for behavior, behaviorData in behaviors %} $this->addBehavior('{{ behavior }}'{{ (behaviorData ? (", " ~ Bake.exportArray(behaviorData, 2)|raw ~ '') : '')|raw }}); -{% endfor %} - -{%- if associations.belongsTo or associations.hasMany or associations.belongsToMany %} - + {%~ endfor %} {% endif %} - -{%- for type, assocs in associations %} - {%- for assoc in assocs %} - {%- set assocData = [] %} - {%- for key, val in assoc %} - {%- if key is not same as('alias') %} - {%- set assocData = assocData|merge({(key): val}) %} - {%- endif %} - {%- endfor %} +{% if associations.belongsTo or associations.hasMany or associations.belongsToMany %} + + {%~ for type, assocs in associations %} + {%~ for assoc in assocs %} + {%~ set assocData = [] %} + {%~ for key, val in assoc %} + {%~ if key is not same as('alias') %} + {%~ set assocData = assocData|merge({(key): val}) %} + {%~ endif %} + {%~ endfor %} $this->{{ type }}('{{ assoc.alias }}', {{ Bake.exportArray(assocData, 2)|raw }}); - {{- "\n" }} - {%- endfor %} -{% endfor %} + {%~ endfor %} + {%~ endfor %} +{% endif %} } -{{- "\n" }} - -{%- if validation %} -{% set generatedFunctions = generatedFunctions|merge(['validationDefault']) %} +{% if validation %} + {%~ set generatedFunctions = generatedFunctions|merge(['validationDefault']) %} /** * Default validation rules. * @@ -110,25 +101,24 @@ class {{ name }}Table extends Table{{ fileBuilder.classBuilder.implements ? ' im */ public function validationDefault(Validator $validator): Validator { -{% for field, rules in validation %} -{% set validationMethods = Bake.getValidationMethods(field, rules) %} -{% if validationMethods %} + {%~ for field, rules in validation %} + {%~ set validationMethods = Bake.getValidationMethods(field, rules) %} + {%~ if validationMethods %} $validator -{% for validationMethod in validationMethods %} -{% if loop.last %} -{% set validationMethod = validationMethod ~ ';' %} -{% endif %} + {%~ for validationMethod in validationMethods %} + {%~ if loop.last %} + {%~ set validationMethod = validationMethod ~ ';' %} + {%~ endif %} {{ validationMethod|raw }} -{% endfor %} + {%~ endfor %} -{% endif %} -{% endfor %} + {%~ endif %} + {%~ endfor %} return $validator; } {% endif %} - {%- if rulesChecker %} -{% set generatedFunctions = generatedFunctions|merge(['buildRules']) %} + {%~ set generatedFunctions = generatedFunctions|merge(['buildRules']) %} /** * Returns a rules checker object that will be used for validating @@ -139,21 +129,24 @@ class {{ name }}Table extends Table{{ fileBuilder.classBuilder.implements ? ' im */ public function buildRules(RulesChecker $rules): RulesChecker { -{% for rule in rulesChecker %} -{% set fields = Bake.exportArray(rule.fields) %} -{% set options = '' %} -{% for optionName, optionValue in rule.options %} - {%~ set options = (loop.first ? '[' : options) ~ "'#{optionName}' => " ~ Bake.exportVar(optionValue) ~ (loop.last ? ']' : ', ') %} -{% endfor %} - $rules->add($rules->{{ rule.name }}({{ fields|raw }}{{ (rule.extra|default ? ", '#{rule.extra}'" : '')|raw }}{{ (options ? ', ' ~ options : '')|raw }}), ['errorField' => '{{ rule.fields[0] }}']); -{% endfor %} + {%~ for rule in rulesChecker %} + {%~ set fields = Bake.exportArray(rule.fields) %} + {%~ set options = '' %} + {%~ for optionName, optionValue in rule.options %} + {%~ set options = (loop.first ? '[' : options) ~ "'#{optionName}' => " ~ Bake.exportVar(optionValue) ~ (loop.last ? ']' : ', ') %} + {%~ endfor %} + {%~ set ruleOptions = "'errorField' => '" ~ rule.fields[0] ~ "'" %} + {%~ if rule.message is defined %} + {%~ set ruleOptions = ruleOptions ~ ", 'message' => __(" ~ Bake.exportVar(rule.message) ~ ")" %} + {%~ endif %} + $rules->add($rules->{{ rule.name }}({{ fields|raw }}{{ (rule.extra|default ? ", '#{rule.extra}'" : '')|raw }}{{ (options ? ', ' ~ options : '')|raw }}), [{{ ruleOptions|raw }}]); + {%~ endfor %} return $rules; } {% endif %} - -{%- if connection is not same as('default') %} -{% set generatedFunctions = generatedFunctions|merge(['defaultConnectionName']) %} +{% if connection is not same as('default') %} + {%~ set generatedFunctions = generatedFunctions|merge(['defaultConnectionName']) %} /** * Returns the database connection name to use by default. diff --git a/app/vendor/cakephp/bake/templates/bake/Template/add.twig b/app/vendor/cakephp/bake/templates/bake/Template/add.twig index c21d7c1d2..bfbfcbada 100644 --- a/app/vendor/cakephp/bake/templates/bake/Template/add.twig +++ b/app/vendor/cakephp/bake/templates/bake/Template/add.twig @@ -17,18 +17,15 @@ /** * @var \{{ namespace }}\View\AppView $this * @var \{{ entityClass }} ${{ singularVar }} - {{- "\n" }} -{%- if associations.BelongsTo is defined %} - {%- for assocName, assocData in associations.BelongsTo %} +{% if associations.BelongsTo is defined %} + {%~ for assocName, assocData in associations.BelongsTo %} * @var \Cake\Collection\CollectionInterface|string[] ${{ assocData.variable }} - {{- "\n" }} - {%- endfor %} + {%~ endfor %} {% endif %} -{%- if associations.BelongsToMany is defined %} - {%- for assocName, assocData in associations.BelongsToMany %} +{% if associations.BelongsToMany is defined %} + {%~ for assocName, assocData in associations.BelongsToMany %} * @var \Cake\Collection\CollectionInterface|string[] ${{ assocData.variable }} - {{- "\n" }} - {%- endfor %} + {%~ endfor %} {% endif %} */ ?> diff --git a/app/vendor/cakephp/bake/templates/bake/Template/edit.twig b/app/vendor/cakephp/bake/templates/bake/Template/edit.twig index 90fed4ec4..a7d57e8ff 100644 --- a/app/vendor/cakephp/bake/templates/bake/Template/edit.twig +++ b/app/vendor/cakephp/bake/templates/bake/Template/edit.twig @@ -17,18 +17,15 @@ /** * @var \{{ namespace }}\View\AppView $this * @var \{{ entityClass }} ${{ singularVar }} - {{- "\n" }} -{%- if associations.BelongsTo is defined %} - {%- for assocName, assocData in associations.BelongsTo %} +{% if associations.BelongsTo is defined %} + {%~ for assocName, assocData in associations.BelongsTo %} * @var string[]|\Cake\Collection\CollectionInterface ${{ assocData.variable }} - {{- "\n" }} - {%- endfor %} + {%~ endfor %} {% endif %} -{%- if associations.BelongsToMany is defined %} - {%- for assocName, assocData in associations.BelongsToMany %} +{% if associations.BelongsToMany is defined %} + {%~ for assocName, assocData in associations.BelongsToMany %} * @var string[]|\Cake\Collection\CollectionInterface ${{ assocData.variable }} - {{- "\n" }} - {%- endfor %} + {%~ endfor %} {% endif %} */ ?> diff --git a/app/vendor/cakephp/bake/templates/bake/Template/index.twig b/app/vendor/cakephp/bake/templates/bake/Template/index.twig index 7cab8aa11..4a81b76fe 100644 --- a/app/vendor/cakephp/bake/templates/bake/Template/index.twig +++ b/app/vendor/cakephp/bake/templates/bake/Template/index.twig @@ -38,28 +38,28 @@ {% for field in fields %} -{% set isKey = false %} -{% if associations.BelongsTo is defined %} -{% for alias, details in associations.BelongsTo %} -{% if field == details.foreignKey %} -{% set isKey = true %} + {%~ set isKey = false %} + {%~ if associations.BelongsTo is defined %} + {%~ for alias, details in associations.BelongsTo %} + {%~ if field == details.foreignKey %} + {%~ set isKey = true %} hasValue('{{ details.property }}') ? $this->Html->link(${{ singularVar }}->{{ details.property }}->{{ details.displayField }}, ['controller' => '{{ details.controller }}', 'action' => 'view', ${{ singularVar }}->{{ details.property }}->{{ details.primaryKey[0] }}]) : '' ?> -{% endif %} -{% endfor %} -{% endif %} -{% if isKey is not same as(true) %} -{% set columnData = Bake.columnData(field, schema) %} -{% set supportsLabel = Bake.enumSupportsLabel(field, schema) %} -{% if columnData.type starts with 'enum-' %} + {%~ endif %} + {%~ endfor %} + {%~ endif %} + {%~ if isKey is not same as(true) %} + {%~ set columnData = Bake.columnData(field, schema) %} + {%~ set supportsLabel = Bake.enumSupportsLabel(field, schema) %} + {%~ if columnData.type starts with 'enum-' %} {{ field }} === null ? '' : h(${{ singularVar }}->{{ field }}->{% if supportsLabel %}label(){% else %}value{% endif %}) ?> -{% elseif columnData.type not in ['integer', 'float', 'decimal', 'biginteger', 'smallinteger', 'tinyinteger'] %} + {%~ elseif columnData.type not in ['integer', 'float', 'decimal', 'biginteger', 'smallinteger', 'tinyinteger'] %} {{ field }}) ?> -{% elseif columnData.null %} + {%~ elseif columnData.null %} {{ field }} === null ? '' : $this->Number->format(${{ singularVar }}->{{ field }}) ?> -{% else %} + {%~ else %} Number->format(${{ singularVar }}->{{ field }}) ?> -{% endif %} -{% endif %} + {%~ endif %} + {%~ endif %} {% endfor %} {% set pk = '$' ~ singularVar ~ '->' ~ primaryKey[0] %} diff --git a/app/vendor/cakephp/bake/templates/bake/Template/view.twig b/app/vendor/cakephp/bake/templates/bake/Template/view.twig index de4141355..a6841f352 100644 --- a/app/vendor/cakephp/bake/templates/bake/Template/view.twig +++ b/app/vendor/cakephp/bake/templates/bake/Template/view.twig @@ -24,6 +24,7 @@ {% set associationFields = fieldsData.associationFields %} {% set groupedFields = fieldsData.groupedFields %} {% set pK = '$' ~ singularVar ~ '->' ~ primaryKey[0] %} +{% set done = [] %}
@@ -40,104 +40,107 @@

{{ displayField }}) ?>

{% if groupedFields['string'] %} -{% for field in groupedFields['string'] %} -{% if associationFields[field] is defined %} -{% set details = associationFields[field] %} + {%~ for field in groupedFields['string'] %} + {%~ if associationFields[field] is defined %} + {%~ set details = associationFields[field] %} -{% else %} + {%~ else %} -{% endif %} -{% endfor %} + {%~ endif %} + {%~ endfor %} {% endif %} {% if associations.HasOne %} -{% for alias, details in associations.HasOne %} + {%~ for alias, details in associations.HasOne %} -{% endfor %} + {%~ endfor %} {% endif %} {% if groupedFields.number %} -{% for field in groupedFields.number %} + {%~ for field in groupedFields.number %} -{% set columnData = Bake.columnData(field, schema) %} -{% if columnData.null %} + {%~ set columnData = Bake.columnData(field, schema) %} + {%~ if columnData.null %} -{% else %} + {%~ else %} -{% endif %} + {%~ endif %} -{% endfor %} + {%~ endfor %} {% endif %} {% if groupedFields.enum %} -{% for field in groupedFields.enum %} + {%~ for field in groupedFields.enum %} -{% set columnData = Bake.columnData(field, schema) %} -{% set supportsLabel = Bake.enumSupportsLabel(field, schema) %} -{% if columnData.null %} + {%~ set columnData = Bake.columnData(field, schema) %} + {%~ set supportsLabel = Bake.enumSupportsLabel(field, schema) %} + {%~ if columnData.null %} -{% else %} + {%~ else %} -{% endif %} + {%~ endif %} -{% endfor %} + {%~ endfor %} {% endif %} {% if groupedFields.date %} -{% for field in groupedFields.date %} + {%~ for field in groupedFields.date %} -{% endfor %} + {%~ endfor %} {% endif %} {% if groupedFields.boolean %} -{% for field in groupedFields.boolean %} + {%~ for field in groupedFields.boolean %} -{% endfor %} + {%~ endfor %} {% endif %}
hasValue('{{ details.property }}') ? $this->Html->link(${{ singularVar }}->{{ details.property }}->{{ details.displayField }}, ['controller' => '{{ details.controller }}', 'action' => 'view', ${{ singularVar }}->{{ details.property }}->{{ details.primaryKey[0] }}]) : '' ?>
{{ field }}) ?>
hasValue('{{ details.property }}') ? $this->Html->link(${{ singularVar }}->{{ details.property }}->{{ details.displayField }}, ['controller' => '{{ details.controller }}', 'action' => 'view', ${{ singularVar }}->{{ details.property }}->{{ details.primaryKey[0] }}]) : '' ?>
{{ field }} === null ? '' : $this->Number->format(${{ singularVar }}->{{ field }}) ?>Number->format(${{ singularVar }}->{{ field }}) ?>
{{ field }} === null ? '' : h(${{ singularVar }}->{{ field }}->{% if supportsLabel %}label(){% else %}value{% endif %}) ?>{{ field }}->{% if supportsLabel %}label(){% else %}value{% endif %}) ?>
{{ field }}) ?>
{{ field }} ? __('Yes') : __('No'); ?>
{% if groupedFields.text %} -{% for field in groupedFields.text %} + {%~ for field in groupedFields.text %}
Text->autoParagraph(h(${{ singularVar }}->{{ field }})); ?>
-{% endfor %} + {%~ endfor %} {% endif %} {% set relations = associations.BelongsToMany|merge(associations.HasMany) %} {% for alias, details in relations %} -{% set otherSingularVar = alias|singularize|variable %} -{% set otherPluralHumanName = details.controller|underscore|humanize %} + {%~ set otherSingularVar = alias|singularize|variable %} + {%~ if otherSingularVar == singularVar %} + {%~ set otherSingularVar = otherSingularVar ~ 'Related' %} + {%~ endif %} + {%~ set otherPluralHumanName = details.controller|underscore|humanize %} -HTML; +
+
    + $renderedTags +
+
+ HTML; } } diff --git a/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php b/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php index 382e2b3c9..424a7e620 100644 --- a/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php +++ b/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php @@ -58,17 +58,17 @@ protected function configure(): void $this ->addOption('format', null, InputOption::VALUE_REQUIRED, \sprintf('The output format (%s)', implode(', ', $this->getAvailableFormats())), 'cli') ->setHelp(<<<'EOF' -%command.name% starts a dump server that collects and displays -dumps in a single place for debugging you application: + %command.name% starts a dump server that collects and displays + dumps in a single place for debugging you application: - php %command.full_name% + php %command.full_name% -You can consult dumped data in HTML format in your browser by providing the --format=html option -and redirecting the output to a file: + You can consult dumped data in HTML format in your browser by providing the --format=html option + and redirecting the output to a file: - php %command.full_name% --format="html" > dump.html + php %command.full_name% --format="html" > dump.html -EOF + EOF ) ; } diff --git a/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php index 835d6d94a..f391e047c 100644 --- a/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +++ b/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -148,615 +148,615 @@ protected function getDumpHeader(): string } $line = str_replace('{$options}', json_encode($this->displayOptions, \JSON_FORCE_OBJECT), <<<'EOHTML' -