diff --git a/Cargo.lock b/Cargo.lock index 30b0e79..7558170 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.16" +version = "0.12.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" +checksum = "b2a5b0a5ab8561c603f16c3b78c24a386b1f70e7fc1b1b1e8c15738828e4a176" dependencies = [ "anstyle", "memchr", @@ -131,6 +131,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "berg-controller" version = "1.1.4" @@ -138,13 +144,14 @@ dependencies = [ "anyhow", "chrono", "futures", + "gateway-api", "k8s-openapi", "kube", "rand", "schemars", "serde", + "serde-saphyr 2.0.0", "serde_json", - "serde_yaml", "thiserror", "tokio", "tracing", @@ -187,9 +194,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50a649af8a827553c29fb0cb4bd4a6f1a0dd695bd3232b9bc98bd9c8a3ffbb8b" +checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" dependencies = [ "find-msvc-tools", "shlex", @@ -217,9 +224,9 @@ dependencies = [ [[package]] name = "combine" -version = "4.6.8" +version = "4.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92" dependencies = [ "bytes", "memchr", @@ -308,9 +315,9 @@ checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "defmt" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +checksum = "e4a0795ac740cb54d7b3775c9c17345f6aaecf884c01733b39d6017738e0e3e1" dependencies = [ "bitflags 1.3.2", "defmt-macros", @@ -318,25 +325,36 @@ dependencies = [ [[package]] name = "defmt-macros" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +checksum = "840bb056bd99c495c9188198a258ab787c79f306d864db3e6e8451442d6d8366" dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] name = "defmt-parser" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +checksum = "71958f69fb2de856c5dd51ac9377e986ca1aa5919f931bf5395a807277f889a0" dependencies = [ "thiserror", ] +[[package]] +name = "delegate" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "derive_more" version = "2.1.1" @@ -432,14 +450,14 @@ checksum = "a65863d15a4ce2888bd2f0f543cc963d3879c3a022c8ee43f6141d479a3ac815" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" [[package]] name = "errno" @@ -479,9 +497,9 @@ checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "foldhash" @@ -554,7 +572,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] @@ -586,6 +604,20 @@ dependencies = [ "slab", ] +[[package]] +name = "gateway-api" +version = "0.22.0" +source = "git+https://github.com/cfi2017/gateway-api-rs.git?branch=chore%2Fv1-6#26ce3b7447c7329eab06a58fce4bed262c1f32f8" +dependencies = [ + "delegate", + "k8s-openapi", + "kube", + "regex-lite", + "schemars", + "serde", + "serde_json", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -665,12 +697,6 @@ dependencies = [ "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - [[package]] name = "hostname" version = "0.4.2" @@ -821,16 +847,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "indexmap" -version = "2.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", -] - [[package]] name = "itoa" version = "1.0.18" @@ -948,9 +964,9 @@ dependencies = [ [[package]] name = "jsonpath-rust" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23892d4caa103325a558250e9f4e406d81cf64f7c01679ae7a64e0413321e51" +checksum = "b1c4668c489390e66d586fe2238ee8568473f7ac1607b411342f787c5e1bedd7" dependencies = [ "pest", "pest_derive", @@ -975,7 +991,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c6922f6afe80418dd6019818af5d0d34584c371780ff09b9752370c25b4abb" dependencies = [ - "base64", + "base64 0.22.1", "jiff", "schemars", "serde", @@ -1001,7 +1017,7 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e940a73033a7c5c7918b5ece7851d84571b58be25e937198da37fa13f116d3" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "either", "futures", @@ -1021,7 +1037,7 @@ dependencies = [ "rustls-platform-verifier", "secrecy", "serde", - "serde-saphyr", + "serde-saphyr 0.0.29", "serde_json", "thiserror", "tokio", @@ -1077,7 +1093,7 @@ dependencies = [ "backon", "educe", "futures", - "hashbrown 0.16.1", + "hashbrown", "hostname", "json-patch", "k8s-openapi", @@ -1100,9 +1116,9 @@ checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" [[package]] name = "libc" -version = "0.2.190" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "lock_api" @@ -1237,7 +1253,7 @@ version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64", + "base64 0.22.1", "serde_core", ] @@ -1249,9 +1265,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b568374ba38b33a6c627141f891faf16902b08d2db26b8ede1bcb0a15b1919fa" +checksum = "fd47a460a9cbc3b3429c7e22bf0d76653e779319bae45a499ca010c9a990bb23" dependencies = [ "memchr", "psm", @@ -1261,9 +1277,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66e184b924cebaaff20ab2256ca52f12332d528a39aa76553b5d96f92aacf7f" +checksum = "203e46697708f7519ab1608393cf89239cafb46b8e6d08a8ffe359359b11ef44" dependencies = [ "pest", "pest_generator", @@ -1271,22 +1287,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87478d267e4de54a626af9754f2f0f58e927aac6ed0575fe89bc05ad6851694" +checksum = "e84ae6340a458d3d6cfc73cf328cf3cfe90b2484cd0de25eb66aa954615ed4d5" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] name = "pest_meta" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f986f248b4241ac359b831f6139aaa34e03b08a37b6caf7e201a33f95c869e1" +checksum = "b57f92f32b3dbce6598fd8f5cdf1f06a6072570b8103fa21728fa9036923e710" dependencies = [ "pest", ] @@ -1435,7 +1451,7 @@ checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] @@ -1461,6 +1477,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.8.11" @@ -1492,9 +1514,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "log", "once_cell", @@ -1507,9 +1529,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +checksum = "4a073f5dc7469f984c52ad2752b63b0807745133b6de880b7b64c1ac4c48aec4" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -1555,9 +1577,9 @@ checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f" [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "ring", "rustls-pki-types", @@ -1570,12 +1592,6 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - [[package]] name = "same-file" version = "1.0.6" @@ -1587,18 +1603,18 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "9cb23c424d8ee841bb4d813677ca237e2a610067d594fec130f87d6093495ab5" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "schemars" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +checksum = "ab508826f74a77ca9d5aba6ff19b522583ee3eaf28a19384ff3d0e5835fadf6e" dependencies = [ "dyn-clone", "ref-cast", @@ -1609,14 +1625,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba" +checksum = "e1c3a92094fa7d61aa124645844facb6b554dfc797136d0f5fd1f890e2bffc69" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] @@ -1681,7 +1697,7 @@ checksum = "7bd22781911de0ca6debda95f073c8f18bec65d1a94f1fa9573f3102e514cea4" dependencies = [ "ahash", "annotate-snippets", - "base64", + "base64 0.22.1", "encoding_rs_io", "getrandom 0.3.4", "granit-parser", @@ -1692,6 +1708,19 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde-saphyr" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a253edfdea34032da21af84e16fcc94f4c7a6ba237f9f3bc2dbf43cea8535c44" +dependencies = [ + "base64 0.23.1", + "nohash-hasher", + "num-traits", + "serde_core", + "zmij", +] + [[package]] name = "serde-value" version = "0.7.0" @@ -1719,7 +1748,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] @@ -1730,14 +1759,14 @@ checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -1746,19 +1775,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "sha1" version = "0.10.7" @@ -1871,9 +1887,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.7" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d62a2e0561533f2ca2561d0cf27fd9fedb640a1bf2616ff5d5c80d99017faadc" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" dependencies = [ "proc-macro2", "quote", @@ -1903,7 +1919,7 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] @@ -1917,9 +1933,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.2" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", @@ -1940,7 +1956,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", ] [[package]] @@ -2003,7 +2019,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "base64", + "base64 0.22.1", "bitflags 2.13.2", "bytes", "http", @@ -2139,9 +2155,9 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unicode-ident" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "unicode-width" @@ -2149,12 +2165,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" @@ -2251,7 +2261,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.7", + "syn 3.0.9", "wasm-bindgen-shared", ] @@ -2266,9 +2276,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +checksum = "58ec80e73fd8baf57bf0d9615554c75348bda990d6d5bbeab964dd068319fecb" dependencies = [ "rustls-pki-types", ] @@ -2431,18 +2441,18 @@ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "zerocopy" -version = "0.8.62" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.62" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 1a68574..8295c85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ k8s-openapi = { version = "0.28", features = ["v1_34", "schemars"] } # Serialization serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -serde_yaml = "0.9" +serde-saphyr = { version = "2", default-features = false, features = ["serialize"] } schemars = "1" # Async runtime @@ -55,3 +55,4 @@ tracing-subscriber = { version = "0.3", features = [ # Random for entropy rand = "0.9" +gateway-api = { git = "https://github.com/cfi2017/gateway-api-rs.git", branch = "chore/v1-6" } diff --git a/src/bin/crdgen.rs b/src/bin/crdgen.rs index e108e0b..044f9b6 100644 --- a/src/bin/crdgen.rs +++ b/src/bin/crdgen.rs @@ -14,18 +14,18 @@ fn main() { // Challenge CRD let challenge_crd = - serde_yaml::to_string(&Challenge::crd()).expect("Failed to serialize Challenge CRD"); + serde_saphyr::to_string(&Challenge::crd()).expect("Failed to serialize Challenge CRD"); println!("{}", challenge_crd.trim()); println!("---"); // ChallengeInstance CRD - let instance_crd = serde_yaml::to_string(&ChallengeInstance::crd()) + let instance_crd = serde_saphyr::to_string(&ChallengeInstance::crd()) .expect("Failed to serialize ChallengeInstance CRD"); println!("{}", instance_crd.trim()); println!("---"); // ChallengeInstanceClass CRD - let class_crd = serde_yaml::to_string(&ChallengeInstanceClass::crd()) + let class_crd = serde_saphyr::to_string(&ChallengeInstanceClass::crd()) .expect("Failed to serialize ChallengeInstanceClass CRD"); println!("{}", class_crd.trim()); } diff --git a/src/crds/gateway.rs b/src/crds/gateway.rs deleted file mode 100644 index 29d12b4..0000000 --- a/src/crds/gateway.rs +++ /dev/null @@ -1,132 +0,0 @@ -use kube::CustomResource; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -/// HTTPRoute CRD (Gateway API v1) -#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[kube( - group = "gateway.networking.k8s.io", - version = "v1", - kind = "HTTPRoute", - namespaced -)] -#[serde(rename_all = "camelCase")] -pub struct HTTPRouteSpec { - #[serde(skip_serializing_if = "Option::is_none")] - pub hostnames: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub parent_refs: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub rules: Option>, -} - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct HTTPRouteRule { - #[serde(skip_serializing_if = "Option::is_none")] - pub name: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub backend_refs: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub filters: Option>, -} - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct HTTPRouteFilter { - #[serde(skip_serializing_if = "Option::is_none")] - pub r#type: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub request_redirect: Option, -} - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct HTTPRequestRedirectFilter { - #[serde(skip_serializing_if = "Option::is_none")] - pub scheme: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub hostname: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub path: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub port: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub status_code: Option, -} - -/// TLSRoute CRD (Gateway API v1alpha2) -#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[kube( - group = "gateway.networking.k8s.io", - version = "v1alpha2", - kind = "TLSRoute", - namespaced -)] -#[serde(rename_all = "camelCase")] -pub struct TLSRouteSpec { - #[serde(skip_serializing_if = "Option::is_none")] - pub hostnames: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub parent_refs: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub rules: Option>, -} - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct TLSRouteRule { - pub name: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub backend_refs: Option>, -} - -/// Common types - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct ParentReference { - #[serde(skip_serializing_if = "Option::is_none")] - pub group: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub kind: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub namespace: Option, - pub name: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub section_name: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub port: Option, -} - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct BackendRef { - #[serde(skip_serializing_if = "Option::is_none")] - pub group: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub kind: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub namespace: Option, - pub name: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub port: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub weight: Option, -} - -#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)] -#[serde(rename_all = "camelCase")] -pub struct HTTPBackendRef { - #[serde(skip_serializing_if = "Option::is_none")] - pub group: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub kind: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub namespace: Option, - pub name: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub port: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub weight: Option, -} diff --git a/src/crds/mod.rs b/src/crds/mod.rs index fba8bbf..6ec94ac 100644 --- a/src/crds/mod.rs +++ b/src/crds/mod.rs @@ -2,7 +2,6 @@ pub mod challenge; pub mod challenge_instance; pub mod challenge_instance_class; pub mod cilium; -pub mod gateway; // Re-export types pub use challenge::{ @@ -21,7 +20,3 @@ pub use cilium::{ CiliumDnsRule, CiliumEgressRule, CiliumFQDNRule, CiliumL7Rule, CiliumNetworkPolicy, CiliumNetworkPolicySpec, CiliumPortProtocol, CiliumPortRule, }; -pub use gateway::{ - BackendRef, HTTPBackendRef, HTTPRoute, HTTPRouteRule, HTTPRouteSpec, ParentReference, TLSRoute, - TLSRouteRule, TLSRouteSpec, -}; diff --git a/src/main.rs b/src/main.rs index e6c89ac..15f8dbb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,11 @@ use berg_operator::{ config::ControllerConfig, - crds::{ChallengeInstance, CiliumNetworkPolicy, HTTPRoute, TLSRoute}, + crds::{ChallengeInstance, CiliumNetworkPolicy}, reconciler::{self, Context}, telemetry::{self, Metrics}, }; use futures::StreamExt; +use gateway_api::{httproutes::HttpRoute, tlsroutes::TlsRoute}; use k8s_openapi::api::{ apps::v1::Deployment, core::v1::{ConfigMap, Namespace, Secret, Service}, @@ -46,8 +47,8 @@ async fn main() -> anyhow::Result<()> { let np = Api::::all(client.to_owned()); let pdb = Api::::all(client.to_owned()); let services = Api::::all(client.to_owned()); - let http_routes = Api::::all(client.to_owned()); - let tls_routes = Api::::all(client.to_owned()); + let http_routes = Api::::all(client.to_owned()); + let tls_routes = Api::::all(client.to_owned()); let (mut reload_tx, reload_rx) = futures::channel::mpsc::channel(0); let (shutdown_tx, shutdown_rx) = std::sync::mpsc::channel::<()>(); diff --git a/src/resources/gateway.rs b/src/resources/gateway.rs index 11c64d8..5313b00 100644 --- a/src/resources/gateway.rs +++ b/src/resources/gateway.rs @@ -1,12 +1,16 @@ use crate::{ - crds::{ - BackendRef, ChallengeInstance, ChallengeInstanceClass, ContainerSpec, HTTPBackendRef, - HTTPRoute, HTTPRouteRule, HTTPRouteSpec, ParentReference, PortType, ServiceEndpoint, - TLSRoute, TLSRouteRule, TLSRouteSpec, - }, + crds::{ChallengeInstance, ChallengeInstanceClass, ContainerSpec, PortType, ServiceEndpoint}, error::{Error, Result}, reconciler::Context, }; +use gateway_api::{ + httproutes::{ + HttpRoute, HttpRouteParentRefs, HttpRouteRules, HttpRouteRulesBackendRefs, HttpRouteSpec, + }, + tlsroutes::{ + TlsRoute, TlsRouteParentRefs, TlsRouteRules, TlsRouteRulesBackendRefs, TlsRouteSpec, + }, +}; use kube::api::{Api, PostParams}; use std::collections::BTreeMap; use tracing::{debug, info}; @@ -21,7 +25,7 @@ pub async fn create_http_routes( class: &ChallengeInstanceClass, ctx: &Context, ) -> Result> { - let api: Api = Api::namespaced(ctx.client.clone(), namespace); + let api: Api = Api::namespaced(ctx.client.clone(), namespace); let mut endpoints = Vec::new(); @@ -32,7 +36,7 @@ pub async fn create_http_routes( let route_name = format!("{}-{}", container.hostname, port.port); - let route = HTTPRoute { + let route = HttpRoute { metadata: kube::api::ObjectMeta { name: Some(route_name.clone()), namespace: Some(namespace.to_string()), @@ -62,9 +66,9 @@ pub async fn create_http_routes( }), ..Default::default() }, - spec: HTTPRouteSpec { + spec: HttpRouteSpec { hostnames: Some(vec![hostname.clone()]), - parent_refs: Some(vec![ParentReference { + parent_refs: Some(vec![HttpRouteParentRefs { group: None, kind: Some("Gateway".to_string()), namespace: Some(class.spec.gateway.namespace.clone()), @@ -72,19 +76,21 @@ pub async fn create_http_routes( section_name: Some(class.spec.gateway.http_listener_name.clone()), port: None, }]), - rules: Some(vec![HTTPRouteRule { + rules: Some(vec![HttpRouteRules { name: None, - backend_refs: Some(vec![HTTPBackendRef { + backend_refs: Some(vec![HttpRouteRulesBackendRefs { group: None, kind: None, namespace: Some(namespace.to_string()), name: container.hostname.clone(), port: Some(port.port as i32), weight: None, + ..Default::default() }]), - filters: None, + ..Default::default() }]), }, + ..Default::default() }; match api.create(&PostParams::default(), &route).await { @@ -123,7 +129,7 @@ pub async fn create_tls_routes( class: &ChallengeInstanceClass, ctx: &Context, ) -> Result> { - let api: Api = Api::namespaced(ctx.client.clone(), namespace); + let api: Api = Api::namespaced(ctx.client.clone(), namespace); let mut endpoints = Vec::new(); for port in &container.ports { @@ -133,7 +139,7 @@ pub async fn create_tls_routes( let route_name = format!("{}-{}", container.hostname, port.port); - let route = TLSRoute { + let route = TlsRoute { metadata: kube::api::ObjectMeta { name: Some(route_name.clone()), namespace: Some(namespace.to_string()), @@ -163,9 +169,9 @@ pub async fn create_tls_routes( }), ..Default::default() }, - spec: TLSRouteSpec { - hostnames: Some(vec![hostname.clone()]), - parent_refs: Some(vec![ParentReference { + spec: TlsRouteSpec { + hostnames: vec![hostname.clone()], + parent_refs: Some(vec![TlsRouteParentRefs { group: None, kind: Some("Gateway".to_string()), namespace: Some(class.spec.gateway.namespace.clone()), @@ -173,18 +179,19 @@ pub async fn create_tls_routes( section_name: Some(class.spec.gateway.tls_listener_name.clone()), port: None, }]), - rules: Some(vec![TLSRouteRule { - name: route_name.clone(), - backend_refs: Some(vec![BackendRef { + rules: vec![TlsRouteRules { + name: Some(route_name.clone()), + backend_refs: vec![TlsRouteRulesBackendRefs { group: None, kind: None, namespace: Some(namespace.to_string()), name: container.hostname.clone(), port: Some(port.port as i32), weight: None, - }]), - }]), + }], + }], }, + ..Default::default() }; match api.create(&PostParams::default(), &route).await { @@ -194,7 +201,7 @@ pub async fn create_tls_routes( Err(kube::Error::Api(ae)) if ae.code == 409 => { debug!("TLSRoute {} already exists", route_name); let route = api.get(&route.metadata.name.unwrap()).await?; - hostname = route.spec.hostnames.unwrap().first().unwrap().to_owned(); + hostname = route.spec.hostnames.first().unwrap().to_owned(); } Err(e) => return Err(Error::from(e)), }