start network creation infraestructure

This commit is contained in:
2023-07-10 22:51:15 +02:00
parent c002a37da9
commit 509ec65a62
5 changed files with 177 additions and 486 deletions

434
Cargo.lock generated
View File

@@ -2,12 +2,6 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 3
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]] [[package]]
name = "ahash" name = "ahash"
version = "0.8.3" version = "0.8.3"
@@ -40,19 +34,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "asynchronous-codec"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182"
dependencies = [
"bytes",
"futures-sink",
"futures-util",
"memchr",
"pin-project-lite",
]
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@@ -65,6 +46,12 @@ version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
version = "0.21.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.3.2" version = "1.3.2"
@@ -79,15 +66,13 @@ checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84"
[[package]] [[package]]
name = "bollard" name = "bollard"
version = "0.11.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c92fed694fd5a7468c971538351c61b9c115f1ae6ed411cd2800f0f299403a4b" checksum = "af254ed2da4936ef73309e9597180558821cb16ae9bba4cb24ce6b612d8d80ed"
dependencies = [ dependencies = [
"base64", "base64 0.21.2",
"bollard-stubs", "bollard-stubs",
"bytes", "bytes",
"chrono",
"dirs-next",
"futures-core", "futures-core",
"futures-util", "futures-util",
"hex", "hex",
@@ -95,27 +80,27 @@ dependencies = [
"hyper", "hyper",
"hyperlocal", "hyperlocal",
"log", "log",
"pin-project", "pin-project-lite",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
"serde_repr",
"serde_urlencoded", "serde_urlencoded",
"thiserror", "thiserror",
"tokio", "tokio",
"tokio-util 0.6.10", "tokio-util",
"url", "url",
"winapi", "winapi",
] ]
[[package]] [[package]]
name = "bollard-stubs" name = "bollard-stubs"
version = "1.41.0" version = "1.42.0-rc.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2f2e73fffe9455141e170fb9c1feb0ac521ec7e7dcd47a7cab72a658490fb8" checksum = "602bda35f33aeb571cef387dcd4042c643a8bf689d8aaac2cc47ea24cb7bc7e0"
dependencies = [ dependencies = [
"chrono",
"serde", "serde",
"serde_with 1.14.0", "serde_with",
] ]
[[package]] [[package]]
@@ -124,12 +109,6 @@ version = "3.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]] [[package]]
name = "bytes" name = "bytes"
version = "1.4.0" version = "1.4.0"
@@ -156,181 +135,17 @@ checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
dependencies = [ dependencies = [
"android-tzdata", "android-tzdata",
"iana-time-zone", "iana-time-zone",
"js-sys",
"num-traits", "num-traits",
"serde", "serde",
"time 0.1.45",
"wasm-bindgen",
"winapi", "winapi",
] ]
[[package]]
name = "containers-api"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74a6c297451ce82117ff9090e5174bf18f86e6bcbfbfc3820246abbc4f44fa16"
dependencies = [
"chrono",
"flate2",
"futures-util",
"http",
"hyper",
"hyperlocal",
"log",
"mime",
"paste",
"pin-project",
"serde",
"serde_json",
"tar",
"thiserror",
"tokio",
"url",
]
[[package]] [[package]]
name = "core-foundation-sys" name = "core-foundation-sys"
version = "0.8.4" version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if",
]
[[package]]
name = "darling"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
dependencies = [
"darling_core 0.13.4",
"darling_macro 0.13.4",
]
[[package]]
name = "darling"
version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944"
dependencies = [
"darling_core 0.20.1",
"darling_macro 0.20.1",
]
[[package]]
name = "darling_core"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn 1.0.109",
]
[[package]]
name = "darling_core"
version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn 2.0.18",
]
[[package]]
name = "darling_macro"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
dependencies = [
"darling_core 0.13.4",
"quote",
"syn 1.0.109",
]
[[package]]
name = "darling_macro"
version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a"
dependencies = [
"darling_core 0.20.1",
"quote",
"syn 2.0.18",
]
[[package]]
name = "dirs-next"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
dependencies = [
"cfg-if",
"dirs-sys-next",
]
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]]
name = "docker-api"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4576e993f4ef4805931a835b7afe71dec6cbd096e9b08bbd8e8f03e1940b2745"
dependencies = [
"asynchronous-codec",
"base64",
"byteorder",
"bytes",
"chrono",
"containers-api",
"docker-api-stubs",
"futures-util",
"http",
"hyper",
"log",
"paste",
"serde",
"serde_json",
"tar",
"thiserror",
"url",
]
[[package]]
name = "docker-api-stubs"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6198e6d77eb486d04c9b3997aec536428a7cbba833e84cdfda49e144c8df1734"
dependencies = [
"chrono",
"serde",
"serde_json",
"serde_with 2.3.3",
]
[[package]] [[package]]
name = "fallible-iterator" name = "fallible-iterator"
version = "0.2.0" version = "0.2.0"
@@ -343,28 +158,6 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
[[package]]
name = "filetime"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.2.16",
"windows-sys",
]
[[package]]
name = "flate2"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
dependencies = [
"crc32fast",
"miniz_oxide",
]
[[package]] [[package]]
name = "fnv" name = "fnv"
version = "1.0.7" version = "1.0.7"
@@ -436,7 +229,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
] ]
[[package]] [[package]]
@@ -469,17 +262,6 @@ dependencies = [
"slab", "slab",
] ]
[[package]]
name = "getrandom"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [
"cfg-if",
"libc",
"wasi 0.11.0+wasi-snapshot-preview1",
]
[[package]] [[package]]
name = "h2" name = "h2"
version = "0.3.19" version = "0.3.19"
@@ -495,7 +277,7 @@ dependencies = [
"indexmap", "indexmap",
"slab", "slab",
"tokio", "tokio",
"tokio-util 0.7.8", "tokio-util",
"tracing", "tracing",
] ]
@@ -633,12 +415,6 @@ dependencies = [
"cc", "cc",
] ]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.4.0" version = "0.4.0"
@@ -714,21 +490,6 @@ version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "mime"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "miniz_oxide"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
dependencies = [
"adler",
]
[[package]] [[package]]
name = "mio" name = "mio"
version = "0.8.8" version = "0.8.8"
@@ -736,7 +497,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
dependencies = [ dependencies = [
"libc", "libc",
"wasi 0.11.0+wasi-snapshot-preview1", "wasi",
"windows-sys", "windows-sys",
] ]
@@ -745,7 +506,6 @@ name = "mrdeployer"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"bollard", "bollard",
"docker-api",
"futures", "futures",
"rusqlite", "rusqlite",
"tokio", "tokio",
@@ -794,17 +554,11 @@ checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"redox_syscall 0.3.5", "redox_syscall",
"smallvec", "smallvec",
"windows-targets", "windows-targets",
] ]
[[package]]
name = "paste"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
[[package]] [[package]]
name = "percent-encoding" name = "percent-encoding"
version = "2.3.0" version = "2.3.0"
@@ -828,7 +582,7 @@ checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
] ]
[[package]] [[package]]
@@ -867,15 +621,6 @@ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]]
name = "redox_syscall"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
"bitflags 1.3.2",
]
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.3.5" version = "0.3.5"
@@ -885,17 +630,6 @@ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
] ]
[[package]]
name = "redox_users"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom",
"redox_syscall 0.2.16",
"thiserror",
]
[[package]] [[package]]
name = "rusqlite" name = "rusqlite"
version = "0.29.0" version = "0.29.0"
@@ -939,7 +673,7 @@ checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
] ]
[[package]] [[package]]
@@ -953,6 +687,17 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_repr"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "serde_urlencoded" name = "serde_urlencoded"
version = "0.7.1" version = "0.7.1"
@@ -965,54 +710,19 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_with"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
dependencies = [
"serde",
"serde_with_macros 1.5.2",
]
[[package]] [[package]]
name = "serde_with" name = "serde_with"
version = "2.3.3" version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe"
dependencies = [ dependencies = [
"base64", "base64 0.13.1",
"chrono", "chrono",
"hex", "hex",
"indexmap", "indexmap",
"serde", "serde",
"serde_json", "serde_json",
"serde_with_macros 2.3.3", "time",
"time 0.3.21",
]
[[package]]
name = "serde_with_macros"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
dependencies = [
"darling 0.13.4",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "serde_with_macros"
version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f"
dependencies = [
"darling 0.20.1",
"proc-macro2",
"quote",
"syn 2.0.18",
] ]
[[package]] [[package]]
@@ -1049,23 +759,6 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.18" version = "2.0.18"
@@ -1077,17 +770,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "tar"
version = "0.4.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
dependencies = [
"filetime",
"libc",
"xattr",
]
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.40" version = "1.0.40"
@@ -1105,18 +787,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
]
[[package]]
name = "time"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
dependencies = [
"libc",
"wasi 0.10.0+wasi-snapshot-preview1",
"winapi",
] ]
[[package]] [[package]]
@@ -1188,21 +859,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
]
[[package]]
name = "tokio-util"
version = "0.6.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"log",
"pin-project-lite",
"tokio",
] ]
[[package]] [[package]]
@@ -1305,12 +962,6 @@ dependencies = [
"try-lock", "try-lock",
] ]
[[package]]
name = "wasi"
version = "0.10.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.11.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
@@ -1338,7 +989,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -1360,7 +1011,7 @@ checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.18", "syn",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -1467,12 +1118,3 @@ name = "windows_x86_64_msvc"
version = "0.48.0" version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "xattr"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
dependencies = [
"libc",
]

View File

@@ -4,8 +4,7 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
docker-api = "*" bollard = "0.14"
bollard = "0.11"
futures = "0.3" futures = "0.3"
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
rusqlite = { version = "0.29.0", features = ["bundled"] } rusqlite = { version = "0.29.0", features = ["bundled"] }

View File

@@ -1,50 +1,87 @@
use docker_api::opts::ContainerCreateOpts; use bollard::container::{StartContainerOptions, CreateContainerOptions, Config, NetworkingConfig};
use bollard::models::{EndpointSettings, EndpointIpamConfig};
use bollard::errors::Error;
use std::collections::hash_map::HashMap;
pub async fn list(docker: docker_api::Docker){ pub struct Container {
match docker.images().list(&Default::default()).await { name: String,
Ok(images) => { start: bool,
for image in images { ip: String,
println!("{0:?}", image.repo_tags); net: String,
} id: Option<String>,
},
Err(e) => println!("Something bad happened! {e}"),
}
} }
pub async fn list_c(docker: docker_api::Docker){ impl Container {
match docker.containers().list(&Default::default()).await { pub async fn new(docker: bollard::Docker,
Ok(containers) => { name: String,
for container in containers { ip: String,
println!("{0:?}", container.status); net: String) -> Result<Container, Error> {
}
},
Err(e) => println!("Something bad happened! {e}"),
}
}
pub async fn create(docker: docker_api::Docker){ let mut container = Container {
let env = vec!["EULA=TRUE"]; name: name,
let opts = ContainerCreateOpts::builder() ip: ip,
.image("itzg/minecraft-server:latest") net: net,
.env(env) start: false,
//.network_config(network_config) id: None,
.build(); };
let cont = match docker.containers().create(&opts).await {
match container.create(docker).await {
Ok(c) => { Ok(c) => {
println!("OK: {c:?}"); container.start=true;
c container.id = Some(c);
}, Ok(container)
Err(e) => {eprintln!("Error: {e}"); panic!("{e}")}, }
}; Err(e) => Err(e),
match cont.start().await { }
Ok(s) => { }
println!("Ok {s:?}")
},
Err(e) => eprintln!("Error: {e}"),
async fn create(&self, docker: bollard::Docker) -> Result<String, Error>{
let create = docker.create_container(Some(
create_options(self.name.clone())),
create_config(self.ip.clone(), self.net.clone()))
.await?;
docker.start_container(&self.name, None::<StartContainerOptions<String>>).await?;
return Ok(create.id);
}
pub fn get_id(&self) -> String {
match &self.id {
Some(id) => id.clone(),
None => String::from(""),
}
}
}
fn create_config(ip: String, net: String) -> Config<String> {
let endpoint = EndpointSettings {
ipam_config: Some(EndpointIpamConfig{
ipv4_address: Some(ip),
..Default::default()
}),
..Default::default()
}; };
let mut hash = HashMap::new();
hash.insert(net, endpoint);
let net = NetworkingConfig {
endpoints_config: hash
};
let env = vec!["EULA=TRUE".to_string()];
Config {
image: Some("itzg/minecraft-server:latest".to_string()),
env: Some(env),
networking_config: Some(net),
..Default::default()
}
} }
/*async fn get_network(docker: docker_api::Docker) -> Network { fn create_options(name: String) -> CreateContainerOptions<String> {
CreateContainerOptions{
name: name,
platform: None,
}
}
}*/ async fn create(docker: bollard::Docker, name: String, ip: String, net: String) -> Result<String, Error>{
let create = docker.create_container(Some(create_options(name.clone())), create_config(ip, net)).await?;
docker.start_container(&name, None::<StartContainerOptions<String>>).await?;
return Ok(create.id);
}

View File

@@ -1,13 +1,7 @@
use futures::executor::block_on;
use std::io;
use tokio::net::TcpListener;
use tokio::io::AsyncWriteExt;
use std::collections::hash_map::HashMap;
use bollard::Docker; use bollard::Docker;
use bollard::container::{StartContainerOptions, CreateContainerOptions, Config, NetworkingConfig};
use bollard::models::{EndpointSettings, EndpointIpamConfig};
mod create_container; mod create_container;
mod network_docker;
mod server; mod server;
mod conf; mod conf;
@@ -18,47 +12,18 @@ async fn main() {
Err(e) => panic!("error:{}",e.to_string()), Err(e) => panic!("error:{}",e.to_string()),
}; };
let options = Some(CreateContainerOptions{ let net_name = String::from("customnetwork");
name: "my-new-container", let net_range = String::from("172.20.0.0/24");
//platform: None,
}); match network_docker::Network::create_network(docker.clone(), net_name, net_range).await {
let ip = Some(String::from("172.20.0.5")); Ok(_n)=> println!("va"),
let endpoint = EndpointSettings { Err(e)=> println!("err: {}", e),
ipam_config: Some(EndpointIpamConfig{
ipv4_address: ip.clone(),
..Default::default()
}),
//network_id: Some(String::from("672821882d72")),
//ip_address: ip.clone(),
..Default::default()
};
let mut hash = HashMap::new();
hash.insert("customnetwork", endpoint);
let net = NetworkingConfig {
endpoints_config: hash
};
let env = vec!["EULA=TRUE"];
let config = Config {
image: Some("itzg/minecraft-server:latest"),
env: Some(env),
networking_config: Some(net),
..Default::default()
}; };
match docker.create_container(options, config).await{ match create_container::Container::new(docker, String::from("container1"),
Ok(r) => println!("va1"), String::from("172.20.0.5"),
Err(e) => println!("error1:{}",e.to_string()), String::from("customnetwork")).await {
} Ok(c) => println!("id: {}", c.get_id()),
match docker.start_container("my-new-container", None::<StartContainerOptions<String>>).await { Err(e) => println!("error: {}", e),
Ok(r) => println!("va2"),
Err(e) => println!("error2:{}",e.to_string()),
}; };
/*let docker = match docker_api::Docker::new("unix:///var/run/docker.sock") {
Ok(d) => d,
Err(e) => {print!("{}",e.to_string()); panic!("{}", e.to_string())},
};
block_on(create_container::list(docker.clone()));*/
//block_on(create_container::create(docker.clone()));
//block_on(create_container::list_c(docker));
//server::start().await;
} }

48
src/network_docker.rs Normal file
View File

@@ -0,0 +1,48 @@
use bollard::Docker;
use bollard::errors::Error;
use bollard::models::{IpamConfig,Ipam};
use bollard::network::CreateNetworkOptions;
pub struct Network {
name: String,
range: String,
}
impl Network {
async fn check_network(docker: bollard::Docker, name) -> bool {
let mut list_networks_filters = HashMap::new();
list_networks_filters.insert("name", name);
match docker.list_networks(Some(ListNetworksOptions {
filters: list_networks_filters,
})).await {
Ok(l)=> l.len()>0,
Err(e)=> false
}
}
pub async fn create_network(docker: bollard::Docker, name: String, range: String) -> Result<Self, Error>{
let ipam_config = IpamConfig {
subnet: Some(range.clone()),
..Default::default()
};
let create_network_options = CreateNetworkOptions {
name: name.as_str(),
driver: "bridge",
ipam: Ipam {
config: Some(vec![ipam_config]),
..Default::default()
},
..Default::default()
};
match docker.create_network(create_network_options).await {
Ok(n)=> Ok(Network {
name: name,
range: range,
}),
Err(e)=> Err(e),
}
}
}