From 4ab4b522fb628e870eab109332602d4e1bebab4d Mon Sep 17 00:00:00 2001 From: xeniape Date: Mon, 7 Apr 2025 16:40:24 +0200 Subject: [PATCH 01/15] feat: add rolling upgrade support for nifi 2.x --- Cargo.lock | 531 +++++++----- Cargo.nix | 805 +++++++++++------- rust/operator-binary/src/controller.rs | 184 ++-- .../templates/kuttl/upgrade/04-assert.yaml.j2 | 8 +- ...nifi.yaml => 04-prepare-test-nifi.yaml.j2} | 4 + .../templates/kuttl/upgrade/07-assert.yaml.j2 | 2 + tests/templates/kuttl/upgrade/flow.py | 172 +++- .../upgrade/generate-and-log-flowfiles.json | 338 ++++++++ 8 files changed, 1382 insertions(+), 662 deletions(-) rename tests/templates/kuttl/upgrade/{04-prepare-test-nifi.yaml => 04-prepare-test-nifi.yaml.j2} (71%) create mode 100644 tests/templates/kuttl/upgrade/generate-and-log-flowfiles.json diff --git a/Cargo.lock b/Cargo.lock index 87c46ab1..30b3eaa9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -112,9 +112,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "async-broadcast" @@ -147,18 +147,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -222,9 +222,9 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "block-buffer" @@ -237,9 +237,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" dependencies = [ "chrono", "git2", @@ -247,9 +247,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -259,15 +259,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.10" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "jobserver", "libc", @@ -282,22 +282,22 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets", + "windows-link", ] [[package]] name = "clap" -version = "4.5.27" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" dependencies = [ "clap_builder", "clap_derive", @@ -305,9 +305,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" dependencies = [ "anstream", "anstyle", @@ -317,14 +317,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -405,9 +405,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -439,9 +439,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -449,45 +449,45 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "delegate" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297806318ef30ad066b15792a8372858020ae3ca2e414ee6c2133b1eb9e9e945" +checksum = "b9b6483c2bbed26f97861cf57651d4f2b731964a28cd2257f934a4b452480d21" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -510,7 +510,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -535,9 +535,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "educe" @@ -548,14 +548,14 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encoding_rs" @@ -592,14 +592,14 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "event-listener" @@ -614,9 +614,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener", "pin-project-lite", @@ -641,9 +641,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "form_urlencoded" @@ -716,7 +716,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -779,14 +779,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -797,9 +797,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git2" -version = "0.19.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" +checksum = "5220b8ba44c68a9a7f7a7659e864dd73692e417ef0211bea133c7b74e031eeb9" dependencies = [ "bitflags", "libc", @@ -883,9 +883,9 @@ dependencies = [ [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -904,12 +904,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -917,9 +917,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -929,9 +929,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -948,9 +948,9 @@ dependencies = [ [[package]] name = "hyper-http-proxy" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d06dbdfbacf34d996c6fb540a71a684a7aae9056c71951163af8a8a4c07b9a4" +checksum = "7ad4b0a1e37510028bc4ba81d0e38d239c39671b0f0ce9e02dfa93a8133f7c08" dependencies = [ "bytes", "futures-util", @@ -1000,9 +1000,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -1010,6 +1010,7 @@ dependencies = [ "http", "http-body", "hyper", + "libc", "pin-project-lite", "socket2", "tokio", @@ -1019,16 +1020,17 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core", + "windows-core 0.61.0", ] [[package]] @@ -1081,9 +1083,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -1105,9 +1107,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -1126,9 +1128,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -1155,7 +1157,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1187,9 +1189,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown", @@ -1197,9 +1199,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "instant" @@ -1233,9 +1235,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "java-properties" @@ -1250,10 +1252,11 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -1289,7 +1292,7 @@ dependencies = [ "pest_derive", "regex", "serde_json", - "thiserror 2.0.11", + "thiserror 2.0.12", ] [[package]] @@ -1369,7 +1372,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "thiserror 2.0.11", + "thiserror 2.0.12", "tokio", "tokio-util", "tower", @@ -1392,7 +1395,7 @@ dependencies = [ "serde", "serde-value", "serde_json", - "thiserror 2.0.11", + "thiserror 2.0.12", ] [[package]] @@ -1405,7 +1408,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1431,7 +1434,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror 2.0.11", + "thiserror 2.0.12", "tokio", "tokio-util", "tracing", @@ -1445,15 +1448,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libgit2-sys" -version = "0.17.0+1.8.1" +version = "0.18.1+1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" +checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e" dependencies = [ "cc", "libc", @@ -1463,9 +1466,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.21" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" dependencies = [ "cc", "libc", @@ -1475,9 +1478,9 @@ dependencies = [ [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -1491,9 +1494,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.25" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "matchers" @@ -1518,9 +1521,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" dependencies = [ "adler2", ] @@ -1582,9 +1585,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl-probe" @@ -1705,9 +1708,9 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.4" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" dependencies = [ "base64 0.22.1", "serde", @@ -1721,20 +1724,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" dependencies = [ "memchr", - "thiserror 2.0.11", + "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" dependencies = [ "pest", "pest_generator", @@ -1742,22 +1745,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "pest_meta" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" dependencies = [ "once_cell", "pest", @@ -1766,22 +1769,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1798,9 +1801,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "powerfmt" @@ -1810,27 +1813,27 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy 0.8.24", ] [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -1853,13 +1856,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.8.5" @@ -1879,7 +1888,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", - "zerocopy 0.8.23", + "zerocopy 0.8.24", ] [[package]] @@ -1917,14 +1926,14 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.2", ] [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags", ] @@ -2019,7 +2028,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.96", + "syn 2.0.100", "unicode-ident", ] @@ -2040,9 +2049,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" dependencies = [ "log", "once_cell", @@ -2089,15 +2098,15 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" dependencies = [ "ring", "rustls-pki-types", @@ -2106,15 +2115,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "schannel" @@ -2127,9 +2136,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ "dyn-clone", "schemars_derive", @@ -2140,14 +2149,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2203,15 +2212,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] @@ -2228,13 +2237,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2245,14 +2254,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -2330,9 +2339,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "snafu" @@ -2373,14 +2382,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2466,7 +2475,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2502,7 +2511,7 @@ dependencies = [ "kube", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2530,7 +2539,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2552,9 +2561,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -2575,7 +2584,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2589,11 +2598,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.12", ] [[package]] @@ -2604,18 +2613,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2652,9 +2661,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -2667,15 +2676,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -2693,9 +2702,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -2717,14 +2726,14 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", @@ -2743,9 +2752,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", @@ -2763,9 +2772,9 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "toml_datetime", @@ -2851,7 +2860,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2932,9 +2941,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" @@ -2944,9 +2953,9 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unicode-ident" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" @@ -3037,9 +3046,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -3066,7 +3075,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "wasm-bindgen-shared", ] @@ -3088,7 +3097,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3140,7 +3149,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ - "windows-core", + "windows-core 0.52.0", "windows-targets", ] @@ -3153,6 +3162,65 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-core" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -3237,18 +3305,18 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.24" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" dependencies = [ "memchr", ] [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags", ] @@ -3291,7 +3359,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -3301,17 +3369,16 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", "zerocopy-derive 0.7.35", ] [[package]] name = "zerocopy" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ - "zerocopy-derive 0.8.23", + "zerocopy-derive 0.8.24", ] [[package]] @@ -3322,38 +3389,38 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -3382,5 +3449,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] diff --git a/Cargo.nix b/Cargo.nix index 301d71bc..3808f0c7 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -366,9 +366,9 @@ rec { }; "anyhow" = rec { crateName = "anyhow"; - version = "1.0.95"; + version = "1.0.97"; edition = "2018"; - sha256 = "010vd1ki8w84dzgx6c81sc8qm9n02fxic1gkpv52zp4nwrn0kb1l"; + sha256 = "0kvspbiwncmmkdgrwjrimsmbmhzxc641p5ql99l2rjq6smmdbznw"; authors = [ "David Tolnay " ]; @@ -455,7 +455,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" "visit-mut" ]; } ]; @@ -463,9 +463,9 @@ rec { }; "async-trait" = rec { crateName = "async-trait"; - version = "0.1.85"; + version = "0.1.88"; edition = "2021"; - sha256 = "0mm0gwad44zs7mna4a0m1z4dhzpmydfj73w4wm23c8xpnhrli4rz"; + sha256 = "1dgxvz7g75cmz6vqqz0mri4xazc6a8xfj1db6r9fxz29lzyd6fg5"; procMacro = true; libName = "async_trait"; authors = [ @@ -482,7 +482,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; usesDefaultFeatures = false; features = [ "clone-impls" "full" "parsing" "printing" "proc-macro" "visit-mut" ]; } @@ -659,9 +659,9 @@ rec { }; "bitflags" = rec { crateName = "bitflags"; - version = "2.8.0"; + version = "2.9.0"; edition = "2021"; - sha256 = "0dixc6168i98652jxf0z9nbyn0zcis3g6hi6qdr7z5dbhcygas4g"; + sha256 = "1gb5w7pxnmx8l2bjz1i6rkbwbm2167k294rhy6cl1y3vbc8i90jw"; authors = [ "The Rust Project Developers" ]; @@ -693,9 +693,9 @@ rec { }; "built" = rec { crateName = "built"; - version = "0.7.5"; + version = "0.7.7"; edition = "2021"; - sha256 = "0fyhzjgymls3qylggd6rs4vkq44rkl1kyv33lfbfrdsjxmd50q63"; + sha256 = "0ywn0m11xm80pg6zrzq3sdj3vmzg3qs6baqnvfmkd377ly8n3van"; authors = [ "Lukas Lueg " ]; @@ -725,9 +725,9 @@ rec { }; "bumpalo" = rec { crateName = "bumpalo"; - version = "3.16.0"; + version = "3.17.0"; edition = "2021"; - sha256 = "0b015qb4knwanbdlp1x48pkb4pm57b8gidbhhhxr900q2wb6fabr"; + sha256 = "1gxxsn2fsjmv03g8p3m749mczv2k4m8xspifs5l7bcx0vx3gna0n"; authors = [ "Nick Fitzgerald " ]; @@ -752,24 +752,25 @@ rec { }; "bytes" = rec { crateName = "bytes"; - version = "1.9.0"; + version = "1.10.1"; edition = "2018"; - sha256 = "16ykzx24v1x4f42v2lxyvlczqhdfji3v7r4ghwckpwijzvb1hn9j"; + sha256 = "0smd4wi2yrhp5pmq571yiaqx84bjqlm1ixqhnvfwzzc6pqkn26yp"; authors = [ "Carl Lerche " "Sean McArthur " ]; features = { "default" = [ "std" ]; + "extra-platforms" = [ "dep:extra-platforms" ]; "serde" = [ "dep:serde" ]; }; resolvedDefaultFeatures = [ "default" "std" ]; }; "cc" = rec { crateName = "cc"; - version = "1.2.10"; + version = "1.2.18"; edition = "2018"; - sha256 = "0aaj2ivamhfzhgb9maasnfkh03s2mzhzpzwrkghgzbkfnv5qy80k"; + sha256 = "0p6d2pfyrjgqpf2w399wzj4hmyffj6g0gyzg3pdy6xl3gmhlcl2j"; authors = [ "Alex Crichton " ]; @@ -814,9 +815,9 @@ rec { }; "chrono" = rec { crateName = "chrono"; - version = "0.4.39"; + version = "0.4.40"; edition = "2021"; - sha256 = "09g8nf409lb184kl9j4s85k0kn8wzgjkp5ls9zid50b886fwqdky"; + sha256 = "0z334kqnvq5zx6xsq1k6zk8g9z14fgk2w3vkn4n13pvi3mhn8y8s"; dependencies = [ { name = "android-tzdata"; @@ -843,8 +844,8 @@ rec { usesDefaultFeatures = false; } { - name = "windows-targets"; - packageId = "windows-targets"; + name = "windows-link"; + packageId = "windows-link"; optional = true; target = { target, features }: (target."windows" or false); } @@ -868,17 +869,17 @@ rec { "unstable-locales" = [ "pure-rust-locales" ]; "wasm-bindgen" = [ "dep:wasm-bindgen" ]; "wasmbind" = [ "wasm-bindgen" "js-sys" ]; - "winapi" = [ "windows-targets" ]; - "windows-targets" = [ "dep:windows-targets" ]; + "winapi" = [ "windows-link" ]; + "windows-link" = [ "dep:windows-link" ]; }; - resolvedDefaultFeatures = [ "alloc" "android-tzdata" "clock" "iana-time-zone" "now" "serde" "std" "winapi" "windows-targets" ]; + resolvedDefaultFeatures = [ "alloc" "android-tzdata" "clock" "iana-time-zone" "now" "serde" "std" "winapi" "windows-link" ]; }; "clap" = rec { crateName = "clap"; - version = "4.5.27"; + version = "4.5.35"; edition = "2021"; crateBin = []; - sha256 = "15j720q1z953h1qxm2q5nwkmyhhl2vb45v017rqlhjrbk12h36vn"; + sha256 = "0i1rnz7mwbhs5qf10r6vmrkplkzm3477khkwz189rha49f9qdanq"; dependencies = [ { name = "clap_builder"; @@ -907,6 +908,7 @@ rec { "unicode" = [ "clap_builder/unicode" ]; "unstable-doc" = [ "clap_builder/unstable-doc" "derive" ]; "unstable-ext" = [ "clap_builder/unstable-ext" ]; + "unstable-markdown" = [ "clap_derive/unstable-markdown" ]; "unstable-styles" = [ "clap_builder/unstable-styles" ]; "unstable-v5" = [ "clap_builder/unstable-v5" "clap_derive?/unstable-v5" "deprecated" ]; "usage" = [ "clap_builder/usage" ]; @@ -916,9 +918,9 @@ rec { }; "clap_builder" = rec { crateName = "clap_builder"; - version = "4.5.27"; + version = "4.5.35"; edition = "2021"; - sha256 = "1mys7v60lys8zkwpk49wif9qnja9zamm4dnrsbj40wdmni78h9hv"; + sha256 = "1nczcw6cc49ap99nn3v3n0vrv7j74zin34palq6ji586vnrdn514"; dependencies = [ { name = "anstream"; @@ -955,9 +957,9 @@ rec { }; "clap_derive" = rec { crateName = "clap_derive"; - version = "4.5.24"; + version = "4.5.32"; edition = "2021"; - sha256 = "131ih3dm76srkbpfx7zfspp9b556zgzj31wqhl0ji2b39lcmbdsl"; + sha256 = "1mqcag8qapb5yhygg2hi153kzmbf7w5hqp3nl3fvl5cn4yp6l5q9"; procMacro = true; dependencies = [ { @@ -974,12 +976,13 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } ]; features = { "raw-deprecated" = [ "deprecated" ]; + "unstable-markdown" = [ "dep:pulldown-cmark" "dep:anstyle" ]; "unstable-v5" = [ "deprecated" ]; }; resolvedDefaultFeatures = [ "default" ]; @@ -1185,9 +1188,9 @@ rec { }; "cpufeatures" = rec { crateName = "cpufeatures"; - version = "0.2.16"; + version = "0.2.17"; edition = "2018"; - sha256 = "1hy466fkhxjbb16i7na95wz8yr14d0kd578pwzj5lbkz14jh5f0n"; + sha256 = "10023dnnaghhdl70xcds12fsx2b966sxbxjq5sxs49mvxqw5ivar"; authors = [ "RustCrypto Developers" ]; @@ -1195,21 +1198,25 @@ rec { { name = "libc"; packageId = "libc"; + usesDefaultFeatures = false; target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "aarch64-linux-android"); } { name = "libc"; packageId = "libc"; + usesDefaultFeatures = false; target = { target, features }: (("aarch64" == target."arch" or null) && ("linux" == target."os" or null)); } { name = "libc"; packageId = "libc"; + usesDefaultFeatures = false; target = { target, features }: (("aarch64" == target."arch" or null) && ("apple" == target."vendor" or null)); } { name = "libc"; packageId = "libc"; + usesDefaultFeatures = false; target = { target, features }: (("loongarch64" == target."arch" or null) && ("linux" == target."os" or null)); } ]; @@ -1274,9 +1281,9 @@ rec { }; "darling" = rec { crateName = "darling"; - version = "0.20.10"; + version = "0.20.11"; edition = "2021"; - sha256 = "1299h2z88qn71mizhh05j26yr3ik0wnqmw11ijds89l8i9nbhqvg"; + sha256 = "1vmlphlrlw4f50z16p4bc9p5qwdni1ba95qmxfrrmzs6dh8lczzw"; authors = [ "Ted Driggs " ]; @@ -1299,9 +1306,9 @@ rec { }; "darling_core" = rec { crateName = "darling_core"; - version = "0.20.10"; + version = "0.20.11"; edition = "2021"; - sha256 = "1rgr9nci61ahnim93yh3xy6fkfayh7sk4447hahawah3m1hkh4wm"; + sha256 = "0bj1af6xl4ablnqbgn827m43b8fiicgv180749f5cphqdmcvj00d"; authors = [ "Ted Driggs " ]; @@ -1329,7 +1336,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" "extra-traits" ]; } ]; @@ -1341,9 +1348,9 @@ rec { }; "darling_macro" = rec { crateName = "darling_macro"; - version = "0.20.10"; + version = "0.20.11"; edition = "2021"; - sha256 = "01kq3ibbn47czijj39h3vxyw0c2ksd0jvc097smcrk7n2jjs4dnk"; + sha256 = "1bbfbc2px6sj1pqqq97bgqn6c8xdnb2fmz66f7f40nrqrcybjd7w"; procMacro = true; authors = [ "Ted Driggs " @@ -1359,16 +1366,16 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; }; "delegate" = rec { crateName = "delegate"; - version = "0.13.2"; + version = "0.13.3"; edition = "2018"; - sha256 = "0ig9x6wiwfqkqbk4wh9frbihl0jq50vsi4jpn5kd02pkiqqhcy19"; + sha256 = "088d919b991lz5bj5k989ab33dzjsi8pdx8whsbnzlmy5cy4idmr"; procMacro = true; authors = [ "Godfrey Chan " @@ -1385,7 +1392,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" "visit-mut" ]; } ]; @@ -1393,9 +1400,9 @@ rec { }; "deranged" = rec { crateName = "deranged"; - version = "0.3.11"; + version = "0.4.0"; edition = "2021"; - sha256 = "1d1ibqqnr5qdrpw8rclwrf1myn3wf0dygl04idf4j2s49ah6yaxl"; + sha256 = "13h6skwk411wzhf1l9l7d3yz5y6vg9d7s3dwhhb4a942r88nm7lw"; authors = [ "Jacob Pratt " ]; @@ -1409,10 +1416,13 @@ rec { ]; features = { "default" = [ "std" ]; + "macros" = [ "dep:deranged-macros" ]; "num" = [ "dep:num-traits" ]; "powerfmt" = [ "dep:powerfmt" ]; "quickcheck" = [ "dep:quickcheck" "alloc" ]; - "rand" = [ "dep:rand" ]; + "rand" = [ "rand08" "rand09" ]; + "rand08" = [ "dep:rand08" ]; + "rand09" = [ "dep:rand09" ]; "serde" = [ "dep:serde" ]; "std" = [ "alloc" ]; }; @@ -1472,7 +1482,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; features = { @@ -1530,9 +1540,9 @@ rec { }; "dyn-clone" = rec { crateName = "dyn-clone"; - version = "1.0.17"; + version = "1.0.19"; edition = "2018"; - sha256 = "09cig7dgg6jnqa10p4233nd8wllbjf4ffsw7wj0m4lwa5w3z0vhd"; + sha256 = "01ahm5abl20480v48nxy4ffyx80cs6263q9zf0gnrxpvm6w8yyhw"; libName = "dyn_clone"; authors = [ "David Tolnay " @@ -1565,13 +1575,13 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; devDependencies = [ { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } ]; @@ -1583,17 +1593,18 @@ rec { }; "either" = rec { crateName = "either"; - version = "1.13.0"; - edition = "2018"; - sha256 = "1w2c1mybrd7vljyxk77y9f4w9dyjrmp3yp82mk7bcm8848fazcb0"; + version = "1.15.0"; + edition = "2021"; + sha256 = "069p1fknsmzn9llaizh77kip0pqmcwpdsykv2x30xpjyija5gis8"; authors = [ "bluss" ]; features = { - "default" = [ "use_std" ]; + "default" = [ "std" ]; "serde" = [ "dep:serde" ]; + "use_std" = [ "std" ]; }; - resolvedDefaultFeatures = [ "default" "use_std" ]; + resolvedDefaultFeatures = [ "default" "std" "use_std" ]; }; "encoding_rs" = rec { crateName = "encoding_rs"; @@ -1673,7 +1684,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; features = { @@ -1681,9 +1692,9 @@ rec { }; "equivalent" = rec { crateName = "equivalent"; - version = "1.0.1"; + version = "1.0.2"; edition = "2015"; - sha256 = "1malmx5f4lkfvqasz319lq6gb3ddg19yzf9s8cykfsgzdmyq0hsl"; + sha256 = "03swzqznragy8n0x31lqc78g2af054jwivp7lkrbrc0khz74lyl7"; }; "event-listener" = rec { @@ -1727,9 +1738,9 @@ rec { }; "event-listener-strategy" = rec { crateName = "event-listener-strategy"; - version = "0.5.3"; + version = "0.5.4"; edition = "2021"; - sha256 = "1ch5gf6knllyq12jkb5zdfag573dh44307q4pwwi2g37sc6lwgiw"; + sha256 = "14rv18av8s7n8yixg38bxp5vg2qs394rl1w052by5npzmbgz7scb"; libName = "event_listener_strategy"; authors = [ "John Nunley " @@ -1748,6 +1759,7 @@ rec { features = { "default" = [ "std" ]; "loom" = [ "event-listener/loom" ]; + "portable-atomic" = [ "event-listener/portable-atomic" ]; "std" = [ "event-listener/std" ]; }; resolvedDefaultFeatures = [ "default" "std" ]; @@ -1804,9 +1816,9 @@ rec { }; "foldhash" = rec { crateName = "foldhash"; - version = "0.1.4"; + version = "0.1.5"; edition = "2021"; - sha256 = "0vsxw2iwpgs7yy6l7pndm7b8nllaq5vdxwnmjn1qpm5kyzhzvlm0"; + sha256 = "1wisr1xlc2bj7hk4rgkcjkz3j2x4dhd1h9lwk7mj8p71qpdgbi6r"; authors = [ "Orson Peters " ]; @@ -2011,7 +2023,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } ]; @@ -2212,11 +2224,11 @@ rec { }; resolvedDefaultFeatures = [ "std" ]; }; - "getrandom 0.3.1" = rec { + "getrandom 0.3.2" = rec { crateName = "getrandom"; - version = "0.3.1"; + version = "0.3.2"; edition = "2021"; - sha256 = "1y154yzby383p63ndw6zpfm0fz3vf6c0zdwc7df6vkl150wrr923"; + sha256 = "1w2mlixa1989v7czr68iji7h67yra2pbg3s480wsqjza1r2sizkk"; authors = [ "The Rand Project Developers" ]; @@ -2229,13 +2241,13 @@ rec { name = "libc"; packageId = "libc"; usesDefaultFeatures = false; - target = { target, features }: ((("linux" == target."os" or null) || ("android" == target."os" or null)) && (!(("custom" == target."getrandom_backend" or null) || ("rdrand" == target."getrandom_backend" or null) || ("rndr" == target."getrandom_backend" or null)))); + target = { target, features }: ((("linux" == target."os" or null) || ("android" == target."os" or null)) && (!((("linux" == target."os" or null) && ("" == target."env" or null)) || ("custom" == target."getrandom_backend" or null) || ("linux_raw" == target."getrandom_backend" or null) || ("rdrand" == target."getrandom_backend" or null) || ("rndr" == target."getrandom_backend" or null)))); } { name = "libc"; packageId = "libc"; usesDefaultFeatures = false; - target = { target, features }: (("dragonfly" == target."os" or null) || ("freebsd" == target."os" or null) || ("hurd" == target."os" or null) || ("illumos" == target."os" or null) || (("horizon" == target."os" or null) && ("arm" == target."arch" or null))); + target = { target, features }: (("dragonfly" == target."os" or null) || ("freebsd" == target."os" or null) || ("hurd" == target."os" or null) || ("illumos" == target."os" or null) || ("cygwin" == target."os" or null) || (("horizon" == target."os" or null) && ("arm" == target."arch" or null))); } { name = "libc"; @@ -2274,15 +2286,16 @@ rec { target = { target, features }: ("vxworks" == target."os" or null); } { - name = "wasi"; - packageId = "wasi 0.13.3+wasi-0.2.2"; + name = "r-efi"; + packageId = "r-efi"; usesDefaultFeatures = false; - target = { target, features }: (("wasm32" == target."arch" or null) && ("wasi" == target."os" or null) && ("p2" == target."env" or null)); + target = { target, features }: (("uefi" == target."os" or null) && ("efi_rng" == target."getrandom_backend" or null)); } { - name = "windows-targets"; - packageId = "windows-targets"; - target = { target, features }: ((target."windows" or false) && (!("win7" == target."vendor" or null))); + name = "wasi"; + packageId = "wasi 0.14.2+wasi-0.2.4"; + usesDefaultFeatures = false; + target = { target, features }: (("wasm32" == target."arch" or null) && ("wasi" == target."os" or null) && ("p2" == target."env" or null)); } ]; features = { @@ -2310,9 +2323,9 @@ rec { }; "git2" = rec { crateName = "git2"; - version = "0.19.0"; + version = "0.20.1"; edition = "2018"; - sha256 = "091pv7866z1qjq800ys0wjv8n73wrv7fqdrddxcnq36w8lzbf0xr"; + sha256 = "1fgf67h78yrw2gm1n8ghgr0jwsbkvmjfhnbng9zrm2n68jxbh82j"; authors = [ "Josh Triplett " "Alex Crichton " @@ -2340,12 +2353,11 @@ rec { } ]; features = { - "default" = [ "ssh" "https" "ssh_key_from_memory" ]; + "default" = [ "ssh" "https" ]; "https" = [ "libgit2-sys/https" "openssl-sys" "openssl-probe" ]; "openssl-probe" = [ "dep:openssl-probe" ]; "openssl-sys" = [ "dep:openssl-sys" ]; "ssh" = [ "libgit2-sys/ssh" ]; - "ssh_key_from_memory" = [ "libgit2-sys/ssh_key_from_memory" ]; "vendored-libgit2" = [ "libgit2-sys/vendored" ]; "vendored-openssl" = [ "openssl-sys/vendored" "libgit2-sys/vendored-openssl" ]; "zlib-ng-compat" = [ "libgit2-sys/zlib-ng-compat" ]; @@ -2537,9 +2549,9 @@ rec { }; "http" = rec { crateName = "http"; - version = "1.2.0"; + version = "1.3.1"; edition = "2018"; - sha256 = "1skglzdf98j5nzxlii540n11is0w4l80mi5sm3xrj716asps4v7i"; + sha256 = "0r95i5h7dr1xadp1ac9453w0s62s27hzkam356nyx2d9mqqmva7l"; authors = [ "Alex Crichton " "Carl Lerche " @@ -2589,9 +2601,9 @@ rec { }; "http-body-util" = rec { crateName = "http-body-util"; - version = "0.1.2"; + version = "0.1.3"; edition = "2018"; - sha256 = "0kslwazg4400qnc2azkrgqqci0fppv12waicnsy5d8hncvbjjd3r"; + sha256 = "0jm6jv4gxsnlsi1kzdyffjrj8cfr3zninnxpw73mvkxy4qzdj8dh"; libName = "http_body_util"; authors = [ "Carl Lerche " @@ -2604,8 +2616,8 @@ rec { packageId = "bytes"; } { - name = "futures-util"; - packageId = "futures-util"; + name = "futures-core"; + packageId = "futures-core"; usesDefaultFeatures = false; } { @@ -2621,13 +2633,17 @@ rec { packageId = "pin-project-lite"; } ]; - + features = { + "channel" = [ "dep:tokio" ]; + "full" = [ "channel" ]; + }; + resolvedDefaultFeatures = [ "default" ]; }; "httparse" = rec { crateName = "httparse"; - version = "1.9.5"; + version = "1.10.1"; edition = "2018"; - sha256 = "0ip9v8m9lvgvq1lznl31wvn0ch1v254na7lhid9p29yx9rbx6wbx"; + sha256 = "11ycd554bw2dkgw0q61xsa7a4jn1wb1xbfacmf3dbwsikvkkvgvd"; authors = [ "Sean McArthur " ]; @@ -2648,9 +2664,9 @@ rec { }; "hyper" = rec { crateName = "hyper"; - version = "1.5.2"; + version = "1.6.0"; edition = "2021"; - sha256 = "1q7akfb443yrjzkmnnbp2vs8zi15hgbk466rr4y144v4ppabhvr5"; + sha256 = "103ggny2k31z0iq2gzwk2vbx601wx6xkpjpxn40hr3p3b0b5fayc"; authors = [ "Sean McArthur " ]; @@ -2745,9 +2761,9 @@ rec { }; "hyper-http-proxy" = rec { crateName = "hyper-http-proxy"; - version = "1.0.0"; + version = "1.1.0"; edition = "2021"; - sha256 = "195r0x68m2mgcc8rawbc0plsm9w4lrqhlm7vqsbdjd6gpbgxn1jx"; + sha256 = "023w7w9si4zs5phfj30g3dkkk713ipix10dsqj5h443mwfhv1m3s"; libName = "hyper_http_proxy"; authors = [ "MetalBear Tech LTD " @@ -2992,9 +3008,9 @@ rec { }; "hyper-util" = rec { crateName = "hyper-util"; - version = "0.1.10"; + version = "0.1.11"; edition = "2021"; - sha256 = "1d1iwrkysjhq63pg54zk3vfby1j7zmxzm9zzyfr4lwvp0szcybfz"; + sha256 = "1wj3svb1r6yv6kgk5fsz6wwajmngc4zxcw4wxpwlmpbgl8rvqys9"; libName = "hyper_util"; authors = [ "Sean McArthur " @@ -3026,6 +3042,11 @@ rec { name = "hyper"; packageId = "hyper"; } + { + name = "libc"; + packageId = "libc"; + optional = true; + } { name = "pin-project-lite"; packageId = "pin-project-lite"; @@ -3073,8 +3094,8 @@ rec { ]; features = { "client" = [ "hyper/client" "dep:tracing" "dep:futures-channel" "dep:tower-service" ]; - "client-legacy" = [ "client" "dep:socket2" "tokio/sync" ]; - "full" = [ "client" "client-legacy" "server" "server-auto" "server-graceful" "service" "http1" "http2" "tokio" ]; + "client-legacy" = [ "client" "dep:socket2" "tokio/sync" "dep:libc" ]; + "full" = [ "client" "client-legacy" "server" "server-auto" "server-graceful" "service" "http1" "http2" "tokio" "tracing" ]; "http1" = [ "hyper/http1" ]; "http2" = [ "hyper/http2" ]; "server" = [ "hyper/server" ]; @@ -3082,14 +3103,15 @@ rec { "server-graceful" = [ "server" "tokio/sync" "futures-util/alloc" ]; "service" = [ "dep:tower-service" ]; "tokio" = [ "dep:tokio" "tokio/net" "tokio/rt" "tokio/time" ]; + "tracing" = [ "dep:tracing" ]; }; resolvedDefaultFeatures = [ "client" "client-legacy" "default" "http1" "tokio" ]; }; "iana-time-zone" = rec { crateName = "iana-time-zone"; - version = "0.1.61"; - edition = "2018"; - sha256 = "085jjsls330yj1fnwykfzmb2f10zp6l7w4fhq81ng81574ghhpi3"; + version = "0.1.63"; + edition = "2021"; + sha256 = "1n171f5lbc7bryzmp1h30zw86zbvl5480aq02z92lcdwvvjikjdh"; libName = "iana_time_zone"; authors = [ "Andrew Straw " @@ -3105,7 +3127,7 @@ rec { { name = "core-foundation-sys"; packageId = "core-foundation-sys"; - target = { target, features }: (("macos" == target."os" or null) || ("ios" == target."os" or null)); + target = { target, features }: ("apple" == target."vendor" or null); } { name = "iana-time-zone-haiku"; @@ -3117,6 +3139,11 @@ rec { packageId = "js-sys"; target = { target, features }: (("wasm32" == target."arch" or null) && ("unknown" == target."os" or null)); } + { + name = "log"; + packageId = "log"; + target = { target, features }: (("wasm32" == target."arch" or null) && ("unknown" == target."os" or null)); + } { name = "wasm-bindgen"; packageId = "wasm-bindgen"; @@ -3124,7 +3151,7 @@ rec { } { name = "windows-core"; - packageId = "windows-core"; + packageId = "windows-core 0.61.0"; target = { target, features }: ("windows" == target."os" or null); } ]; @@ -3289,9 +3316,9 @@ rec { }; "icu_locid_transform_data" = rec { crateName = "icu_locid_transform_data"; - version = "1.5.0"; + version = "1.5.1"; edition = "2021"; - sha256 = "0vkgjixm0wzp2n3v5mw4j89ly05bg3lx96jpdggbwlpqi0rzzj7x"; + sha256 = "07gignya9gzynnyds88bmra4blq9jxzgrcss43vzk2q9h7byc5bm"; authors = [ "The ICU4X Project Developers" ]; @@ -3379,9 +3406,9 @@ rec { }; "icu_normalizer_data" = rec { crateName = "icu_normalizer_data"; - version = "1.5.0"; + version = "1.5.1"; edition = "2021"; - sha256 = "05lmk0zf0q7nzjnj5kbmsigj3qgr0rwicnn5pqi9n7krmbvzpjpq"; + sha256 = "1dqcm86spcqcs4jnra81yqq3g5bpw6bvf5iz621spj5x52137s65"; authors = [ "The ICU4X Project Developers" ]; @@ -3450,9 +3477,9 @@ rec { }; "icu_properties_data" = rec { crateName = "icu_properties_data"; - version = "1.5.0"; + version = "1.5.1"; edition = "2021"; - sha256 = "0scms7pd5a7yxx9hfl167f5qdf44as6r3bd8myhlngnxqgxyza37"; + sha256 = "1qm5vf17nyiwb87s3g9x9fsj32gkv4a7q7d2sblawx9vfncqgyw5"; authors = [ "The ICU4X Project Developers" ]; @@ -3550,7 +3577,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; @@ -3620,9 +3647,9 @@ rec { }; "indexmap" = rec { crateName = "indexmap"; - version = "2.7.1"; + version = "2.9.0"; edition = "2021"; - sha256 = "0lmnm1zbr5gq3wic3d8a76gpvampridzwckfl97ckd5m08mrk74c"; + sha256 = "07m15a571yywmvqyb7ms717q9n42b46badbpsmx215jrg7dhv9yf"; dependencies = [ { name = "equivalent"; @@ -3641,16 +3668,15 @@ rec { "default" = [ "std" ]; "quickcheck" = [ "dep:quickcheck" ]; "rayon" = [ "dep:rayon" ]; - "rustc-rayon" = [ "dep:rustc-rayon" ]; "serde" = [ "dep:serde" ]; }; resolvedDefaultFeatures = [ "default" "std" ]; }; "indoc" = rec { crateName = "indoc"; - version = "2.0.5"; + version = "2.0.6"; edition = "2021"; - sha256 = "1dgjk49rkmx4kjy07k4b90qb5vl89smgb5rcw02n0q0x9ligaj5j"; + sha256 = "1gbn2pkx5sgbd9lp05d2bkqpbfgazi0z3nvharh5ajah11d29izl"; procMacro = true; authors = [ "David Tolnay " @@ -3728,9 +3754,9 @@ rec { }; "itoa" = rec { crateName = "itoa"; - version = "1.0.14"; + version = "1.0.15"; edition = "2018"; - sha256 = "0x26kr9m062mafaxgcf2p6h2x7cmixm0zw95aipzn2hr3d5jlnnp"; + sha256 = "0b4fj9kz54dr3wam0vprjwgygvycyw8r0qwg7vp19ly8b2w16psa"; authors = [ "David Tolnay " ]; @@ -3765,13 +3791,19 @@ rec { }; "jobserver" = rec { crateName = "jobserver"; - version = "0.1.32"; + version = "0.1.33"; edition = "2021"; - sha256 = "1l2k50qmj84x9mn39ivjz76alqmx72jhm12rw33zx9xnpv5xpla8"; + sha256 = "12jkn3cxvfs7jsb6knmh9y2b41lwmrk3vdqywkmssx61jzq65wiq"; authors = [ "Alex Crichton " ]; dependencies = [ + { + name = "getrandom"; + packageId = "getrandom 0.3.2"; + target = { target, features }: (target."windows" or false); + features = [ "std" ]; + } { name = "libc"; packageId = "libc"; @@ -3876,7 +3908,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; } ]; @@ -4213,7 +4245,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; } { name = "tokio"; @@ -4377,7 +4409,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; } ]; devDependencies = [ @@ -4429,7 +4461,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "extra-traits" ]; } ]; @@ -4524,7 +4556,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; } { name = "tokio"; @@ -4577,9 +4609,9 @@ rec { }; "libc" = rec { crateName = "libc"; - version = "0.2.169"; + version = "0.2.171"; edition = "2021"; - sha256 = "02m253hs8gw0m1n8iyrsc4n15yzbqwhddi7w1l0ds7i92kdsiaxm"; + sha256 = "1mipla3dy3l59pfa9xy4iw2vdgn8n30dzf4vdnasjflxdqhkg6f1"; authors = [ "The Rust Project Developers" ]; @@ -4593,10 +4625,10 @@ rec { }; "libgit2-sys" = rec { crateName = "libgit2-sys"; - version = "0.17.0+1.8.1"; + version = "0.18.1+1.9.0"; edition = "2018"; links = "git2"; - sha256 = "093jxfl2i9vxdlgf7vk9d040sjwy0nq4fid640y7qix6m0k26iqh"; + sha256 = "03i98nb84aa99bn7sxja11pllq6fghsaw4d3qwjxikgzhh7v5p71"; libName = "libgit2_sys"; libPath = "lib.rs"; authors = [ @@ -4637,10 +4669,10 @@ rec { }; "libz-sys" = rec { crateName = "libz-sys"; - version = "1.1.21"; + version = "1.1.22"; edition = "2018"; links = "z"; - sha256 = "1ajfpf413j9m7kmf4fwvvgv5jxxm5s438f2pfbv2c2vf1vjni6yz"; + sha256 = "07b5wxh0ska996kc0g2hanjhmb4di7ksm6ndljhr4pi0vykyfw4b"; libName = "libz_sys"; authors = [ "Alex Crichton " @@ -4679,14 +4711,13 @@ rec { }; "litemap" = rec { crateName = "litemap"; - version = "0.7.4"; + version = "0.7.5"; edition = "2021"; - sha256 = "012ili3vppd4952sh6y3qwcd0jkd0bq2qpr9h7cppc8sj11k7saf"; + sha256 = "0mi8ykav0s974ps79p438x04snh0cdb7lc864b42jws5375i9yr3"; authors = [ "The ICU4X Project Developers" ]; features = { - "bench" = [ "serde" ]; "databake" = [ "dep:databake" ]; "default" = [ "alloc" ]; "serde" = [ "dep:serde" ]; @@ -4725,9 +4756,9 @@ rec { }; "log" = rec { crateName = "log"; - version = "0.4.25"; + version = "0.4.27"; edition = "2021"; - sha256 = "17ydv5zhfv1zzygy458bmg3f3jx1vfziv9d74817w76yhfqgbjq4"; + sha256 = "150x589dqil307rv0rwj0jsgz5bjbwvl83gyl61jf873a7rjvp0k"; authors = [ "The Rust Project Developers" ]; @@ -4794,9 +4825,9 @@ rec { }; "miniz_oxide" = rec { crateName = "miniz_oxide"; - version = "0.8.3"; + version = "0.8.7"; edition = "2021"; - sha256 = "093r1kd1r9dyf05cbvsibgmh96pxp3qhzfvpd6f15bpggamjqh5q"; + sha256 = "0c4lj692adnzw0h9j8l24d7imds3icpgdkk3b03zlhxf90zcww7z"; authors = [ "Frommi " "oyvindln " @@ -4815,6 +4846,7 @@ rec { "core" = [ "dep:core" ]; "default" = [ "with-alloc" ]; "rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "adler2/rustc-dep-of-std" ]; + "serde" = [ "dep:serde" ]; "simd" = [ "simd-adler32" ]; "simd-adler32" = [ "dep:simd-adler32" ]; }; @@ -4983,9 +5015,9 @@ rec { }; "once_cell" = rec { crateName = "once_cell"; - version = "1.20.2"; + version = "1.21.3"; edition = "2021"; - sha256 = "0xb7rw1aqr7pa4z3b00y7786gyf8awx2gca3md73afy76dzgwq8j"; + sha256 = "0b9x77lb9f1j6nqgf5aka4s2qj0nly176bpbrv6f9iakk5ff3xa2"; authors = [ "Aleksey Kladov " ]; @@ -5419,9 +5451,9 @@ rec { }; "pem" = rec { crateName = "pem"; - version = "3.0.4"; + version = "3.0.5"; edition = "2021"; - sha256 = "1blgcn17wc41yxdzrxlsir5m6ds8r13ijmpsqda6lwwhwmjr6icf"; + sha256 = "1wwfk8sbyi9l18fvvn6z9p2gy7v7q7wimbhvrvixxj8a8zl3ibrq"; authors = [ "Jonathan Creekmore " ]; @@ -5463,9 +5495,9 @@ rec { }; "pest" = rec { crateName = "pest"; - version = "2.7.15"; + version = "2.8.0"; edition = "2021"; - sha256 = "1p4rq45xprw9cx0pb8mmbfa0ih49l0baablv3cpfdy3c1pkayz4b"; + sha256 = "1dp741bxqiracvvwl66mfvlr29byvvph28n4c6ip136m652vg38r"; authors = [ "Dragoș Tiselice " ]; @@ -5477,7 +5509,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; optional = true; } { @@ -5497,9 +5529,9 @@ rec { }; "pest_derive" = rec { crateName = "pest_derive"; - version = "2.7.15"; + version = "2.8.0"; edition = "2021"; - sha256 = "0zpmcd1jv1c53agad5b3jb66ylxlzyv43x1bssh8fs7w3i11hrc1"; + sha256 = "1icp5i01mgpbgwbkrcy4d0ykbxmns4wyz8j1jg6dr1wysz7xj9fp"; procMacro = true; authors = [ "Dragoș Tiselice " @@ -5526,9 +5558,9 @@ rec { }; "pest_generator" = rec { crateName = "pest_generator"; - version = "2.7.15"; + version = "2.8.0"; edition = "2021"; - sha256 = "0yrpk5ymc56pffv7gqr5rkv92p3dc6s73lb8hy1wf3w77byrc4vx"; + sha256 = "0hgqngsxfr8y5p47bgjvd038j55ix1x4dpzr6amndaz8ddr02zfv"; authors = [ "Dragoș Tiselice " ]; @@ -5552,7 +5584,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; features = { @@ -5565,9 +5597,9 @@ rec { }; "pest_meta" = rec { crateName = "pest_meta"; - version = "2.7.15"; + version = "2.8.0"; edition = "2021"; - sha256 = "1skx7gm932bp77if63f7d72jrk5gygj39d8zsfzigmr5xa4q1rg1"; + sha256 = "182w5fyiqm7zbn0p8313xc5wc73rnn59ycm5zk8hcja9f0j877vz"; authors = [ "Dragoș Tiselice " ]; @@ -5595,9 +5627,9 @@ rec { }; "pin-project" = rec { crateName = "pin-project"; - version = "1.1.8"; + version = "1.1.10"; edition = "2021"; - sha256 = "05jr3xfy1spgmz3q19l4mmvv46vgvkvsgphamifx7x45swxcabhy"; + sha256 = "12kadbnfm1f43cyadw9gsbyln1cy7vj764wz5c8wxaiza3filzv7"; libName = "pin_project"; dependencies = [ { @@ -5609,9 +5641,9 @@ rec { }; "pin-project-internal" = rec { crateName = "pin-project-internal"; - version = "1.1.8"; + version = "1.1.10"; edition = "2021"; - sha256 = "1yzfhf6l27nhzv7r5hfrwj2g0x7xmfhgil19fj9am4srqp06csnm"; + sha256 = "0qgqzfl0f4lzaz7yl5llhbg97g68r15kljzihaw9wm64z17qx4bf"; procMacro = true; libName = "pin_project_internal"; dependencies = [ @@ -5625,7 +5657,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; usesDefaultFeatures = false; features = [ "parsing" "printing" "clone-impls" "proc-macro" "full" "visit-mut" ]; } @@ -5653,9 +5685,9 @@ rec { }; "pkg-config" = rec { crateName = "pkg-config"; - version = "0.3.31"; + version = "0.3.32"; edition = "2018"; - sha256 = "1wk6yp2phl91795ia0lwkr3wl4a9xkrympvhqq8cxk4d75hwhglm"; + sha256 = "0k4h3gnzs94sjb2ix6jyksacs52cf1fanpwsmlhjnwrdnp8dppby"; libName = "pkg_config"; authors = [ "Alex Crichton " @@ -5678,9 +5710,9 @@ rec { }; "ppv-lite86" = rec { crateName = "ppv-lite86"; - version = "0.2.20"; + version = "0.2.21"; edition = "2021"; - sha256 = "017ax9ssdnpww7nrl1hvqh2lzncpv04nnsibmnw9nxjnaqlpp5bp"; + sha256 = "1abxx6qz5qnd43br1dd9b2savpihzjza8gb4fbzdql1gxp2f7sl5"; libName = "ppv_lite86"; authors = [ "The CryptoCorrosion Contributors" @@ -5688,8 +5720,8 @@ rec { dependencies = [ { name = "zerocopy"; - packageId = "zerocopy 0.7.35"; - features = [ "simd" "derive" ]; + packageId = "zerocopy 0.8.24"; + features = [ "simd" ]; } ]; features = { @@ -5699,9 +5731,9 @@ rec { }; "proc-macro-crate" = rec { crateName = "proc-macro-crate"; - version = "3.2.0"; + version = "3.3.0"; edition = "2021"; - sha256 = "0yzsqnavb3lmrcsmbrdjfrky9vcbl46v59xi9avn0796rb3likwf"; + sha256 = "0d9xlymplfi9yv3f5g4bp0d6qh70apnihvqcjllampx4f5lmikpd"; libName = "proc_macro_crate"; authors = [ "Bastian Köcher " @@ -5710,15 +5742,17 @@ rec { { name = "toml_edit"; packageId = "toml_edit"; + usesDefaultFeatures = false; + features = [ "parse" ]; } ]; }; "proc-macro2" = rec { crateName = "proc-macro2"; - version = "1.0.93"; + version = "1.0.94"; edition = "2021"; - sha256 = "169dw9wch753if1mgyi2nfl1il77gslvh6y2q46qplprwml6m530"; + sha256 = "114wxb56gdj9vy44q0ll3l2x9niqzcbyqikydmlb5f3h5rsp26d3"; libName = "proc_macro2"; authors = [ "David Tolnay " @@ -5792,9 +5826,9 @@ rec { }; "quote" = rec { crateName = "quote"; - version = "1.0.38"; + version = "1.0.40"; edition = "2018"; - sha256 = "1k0s75w61k6ch0rs263r4j69b7vj1wadqgb9dia4ylc9mymcqk8f"; + sha256 = "1394cxjg6nwld82pzp2d4fp6pmaz32gai1zh9z5hvh0dawww118q"; authors = [ "David Tolnay " ]; @@ -5811,6 +5845,19 @@ rec { }; resolvedDefaultFeatures = [ "default" "proc-macro" ]; }; + "r-efi" = rec { + crateName = "r-efi"; + version = "5.2.0"; + edition = "2018"; + sha256 = "1ig93jvpqyi87nc5kb6dri49p56q7r7qxrn8kfizmqkfj5nmyxkl"; + libName = "r_efi"; + features = { + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "examples" = [ "native" ]; + "rustc-dep-of-std" = [ "compiler_builtins/rustc-dep-of-std" "core" ]; + }; + }; "rand 0.8.5" = rec { crateName = "rand"; version = "0.8.5"; @@ -5878,7 +5925,7 @@ rec { } { name = "zerocopy"; - packageId = "zerocopy 0.8.21"; + packageId = "zerocopy 0.8.24"; usesDefaultFeatures = false; features = [ "simd" ]; } @@ -5998,7 +6045,7 @@ rec { dependencies = [ { name = "getrandom"; - packageId = "getrandom 0.3.1"; + packageId = "getrandom 0.3.2"; optional = true; } ]; @@ -6011,9 +6058,9 @@ rec { }; "redox_syscall" = rec { crateName = "redox_syscall"; - version = "0.5.8"; + version = "0.5.11"; edition = "2021"; - sha256 = "0d48ylyd6gsamynyp257p6n2zl4dw2fhnn5z9y3nhgpri6rn5a03"; + sha256 = "18qijn18r10haiglv4261wb0yh1agqqlvs0nxfy8yjbpsb307wfj"; libName = "syscall"; authors = [ "Jeremy Soller " @@ -6223,13 +6270,10 @@ rec { }; "ring" = rec { crateName = "ring"; - version = "0.17.8"; + version = "0.17.14"; edition = "2021"; - links = "ring_core_0_17_8"; - sha256 = "03fwlb1ssrmfxdckvqv033pfmk01rhx9ynwi7r186dcfcp5s8zy1"; - authors = [ - "Brian Smith " - ]; + links = "ring_core_0_17_14_"; + sha256 = "1dw32gv19ccq4hsx3ribhpdzri1vnrlcfqb2vj41xn4l49n9ws54"; dependencies = [ { name = "cfg-if"; @@ -6244,14 +6288,13 @@ rec { name = "libc"; packageId = "libc"; usesDefaultFeatures = false; - target = { target, features }: ((("android" == target."os" or null) || ("linux" == target."os" or null)) && (("aarch64" == target."arch" or null) || ("arm" == target."arch" or null))); + target = { target, features }: ((("aarch64" == target."arch" or null) && ("little" == target."endian" or null)) && ("apple" == target."vendor" or null) && (("ios" == target."os" or null) || ("macos" == target."os" or null) || ("tvos" == target."os" or null) || ("visionos" == target."os" or null) || ("watchos" == target."os" or null))); } { - name = "spin"; - packageId = "spin"; + name = "libc"; + packageId = "libc"; usesDefaultFeatures = false; - target = { target, features }: (("aarch64" == target."arch" or null) || ("arm" == target."arch" or null) || ("x86" == target."arch" or null) || ("x86_64" == target."arch" or null)); - features = [ "once" ]; + target = { target, features }: (((("aarch64" == target."arch" or null) && ("little" == target."endian" or null)) || (("arm" == target."arch" or null) && ("little" == target."endian" or null))) && (("android" == target."os" or null) || ("linux" == target."os" or null))); } { name = "untrusted"; @@ -6260,7 +6303,7 @@ rec { { name = "windows-sys"; packageId = "windows-sys 0.52.0"; - target = { target, features }: (("aarch64" == target."arch" or null) && ("windows" == target."os" or null)); + target = { target, features }: ((("aarch64" == target."arch" or null) && ("little" == target."endian" or null)) && ("windows" == target."os" or null)); features = [ "Win32_Foundation" "Win32_System_Threading" ]; } ]; @@ -6365,7 +6408,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" "parsing" "extra-traits" "visit" "visit-mut" ]; } { @@ -6415,9 +6458,9 @@ rec { }; "rustls" = rec { crateName = "rustls"; - version = "0.23.21"; + version = "0.23.25"; edition = "2021"; - sha256 = "1f75gicypi40bdq20h1rglwaapr3ifnchgf697clkxibc0j7ja4g"; + sha256 = "0g5idwxm04i71k3n66ml30zyfbgv6p85a7jky2i09v64i8cfjbl2"; dependencies = [ { name = "log"; @@ -6466,13 +6509,14 @@ rec { ]; features = { "aws-lc-rs" = [ "aws_lc_rs" ]; - "aws_lc_rs" = [ "dep:aws-lc-rs" "webpki/aws_lc_rs" ]; + "aws_lc_rs" = [ "dep:aws-lc-rs" "webpki/aws-lc-rs" "aws-lc-rs/aws-lc-sys" "aws-lc-rs/prebuilt-nasm" ]; "brotli" = [ "dep:brotli" "dep:brotli-decompressor" "std" ]; "default" = [ "aws_lc_rs" "logging" "std" "tls12" ]; - "fips" = [ "aws_lc_rs" "aws-lc-rs?/fips" ]; + "fips" = [ "aws_lc_rs" "aws-lc-rs?/fips" "webpki/aws-lc-rs-fips" ]; "hashbrown" = [ "dep:hashbrown" ]; "log" = [ "dep:log" ]; "logging" = [ "log" ]; + "prefer-post-quantum" = [ "aws_lc_rs" ]; "read_buf" = [ "rustversion" "std" ]; "ring" = [ "dep:ring" "webpki/ring" ]; "rustversion" = [ "dep:rustversion" ]; @@ -6567,9 +6611,9 @@ rec { }; "rustls-pki-types" = rec { crateName = "rustls-pki-types"; - version = "1.10.1"; + version = "1.11.0"; edition = "2021"; - sha256 = "0dqb3d0cbld1yrp084wyzgw6yk3qzzic8l5pbs1b6bcjzzk4ggyj"; + sha256 = "0755isc0x5iymm3wsn59s0ad1pm9zidw7p34qfqlsjsac9jf4z4i"; libName = "rustls_pki_types"; features = { "default" = [ "alloc" ]; @@ -6581,9 +6625,9 @@ rec { }; "rustls-webpki" = rec { crateName = "rustls-webpki"; - version = "0.102.8"; + version = "0.103.1"; edition = "2021"; - sha256 = "1sdy8ks86b7jpabpnb2px2s7f1sq8v0nqf6fnlvwzm4vfk41pjk4"; + sha256 = "00rcdz0rb9ia2ivrq7412ry9qkvbh78pra2phl4p7kxck9vbiy7y"; libName = "webpki"; dependencies = [ { @@ -6605,8 +6649,9 @@ rec { ]; features = { "alloc" = [ "ring?/alloc" "pki-types/alloc" ]; - "aws_lc_rs" = [ "dep:aws-lc-rs" ]; - "default" = [ "std" "ring" ]; + "aws-lc-rs" = [ "dep:aws-lc-rs" "aws-lc-rs/aws-lc-sys" "aws-lc-rs/prebuilt-nasm" ]; + "aws-lc-rs-fips" = [ "dep:aws-lc-rs" "aws-lc-rs/fips" ]; + "default" = [ "std" ]; "ring" = [ "dep:ring" ]; "std" = [ "alloc" "pki-types/std" ]; }; @@ -6614,9 +6659,9 @@ rec { }; "rustversion" = rec { crateName = "rustversion"; - version = "1.0.19"; + version = "1.0.20"; edition = "2018"; - sha256 = "1m39qd65jcd1xgqzdm3017ppimiggh2446xngwp1ngr8hjbmpi7p"; + sha256 = "1lhwjb16dsm8brd18bn2bh0ryzc7qi29bi2jjsc6ny2zbwn3ivgd"; procMacro = true; build = "build/build.rs"; authors = [ @@ -6626,9 +6671,9 @@ rec { }; "ryu" = rec { crateName = "ryu"; - version = "1.0.18"; + version = "1.0.20"; edition = "2018"; - sha256 = "17xx2s8j1lln7iackzd9p0sv546vjq71i779gphjq923vjh5pjzk"; + sha256 = "07s855l8sb333h6bpn24pka5sp7hjk2w667xy6a0khkf6sqv5lr8"; authors = [ "David Tolnay " ]; @@ -6663,9 +6708,9 @@ rec { }; "schemars" = rec { crateName = "schemars"; - version = "0.8.21"; + version = "0.8.22"; edition = "2021"; - sha256 = "14lyx04388wgbilgcm0nl75w6359nw16glswfqv7x2rpi9329h09"; + sha256 = "05an9nbi18ynyxv1rjmwbg6j08j0496hd64mjggh53mwp3hjmgrz"; authors = [ "Graham Esau " ]; @@ -6729,9 +6774,9 @@ rec { }; "schemars_derive" = rec { crateName = "schemars_derive"; - version = "0.8.21"; + version = "0.8.22"; edition = "2021"; - sha256 = "03ncmrkldfmdc9skmlyysx2vqdlyyz91r5mbavw77zwaay4fbvmi"; + sha256 = "0kakyzrp5801s4i043l4ilv96lzimnlh01pap958h66n99w6bqij"; procMacro = true; authors = [ "Graham Esau " @@ -6751,7 +6796,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "extra-traits" ]; } ]; @@ -6913,9 +6958,9 @@ rec { }; "semver" = rec { crateName = "semver"; - version = "1.0.25"; + version = "1.0.26"; edition = "2018"; - sha256 = "00sy306qpi7vfand7dxm2vc76nlc8fkh1rrhdy0qh12v50nzx7gp"; + sha256 = "1l5q2vb8fjkby657kdyfpvv40x2i2xqq9bg57pxqakfj92fgmrjn"; authors = [ "David Tolnay " ]; @@ -6927,9 +6972,9 @@ rec { }; "serde" = rec { crateName = "serde"; - version = "1.0.217"; + version = "1.0.219"; edition = "2018"; - sha256 = "0w2ck1p1ajmrv1cf51qf7igjn2nc51r0izzc00fzmmhkvxjl5z02"; + sha256 = "1dl6nyxnsi82a197sd752128a4avm6mxnscywas1jq30srp2q3jz"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -6982,9 +7027,9 @@ rec { }; "serde_derive" = rec { crateName = "serde_derive"; - version = "1.0.217"; + version = "1.0.219"; edition = "2015"; - sha256 = "180r3rj5gi5s1m23q66cr5wlfgc5jrs6n1mdmql2njnhk37zg6ss"; + sha256 = "001azhjmj7ya52pmfiw4ppxm16nd44y15j2pf5gkcwrcgz7pc0jv"; procMacro = true; authors = [ "Erick Tryzelaar " @@ -7005,7 +7050,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; usesDefaultFeatures = false; features = [ "clone-impls" "derive" "parsing" "printing" "proc-macro" ]; } @@ -7037,7 +7082,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; usesDefaultFeatures = false; features = [ "clone-impls" "derive" "parsing" "printing" ]; } @@ -7046,9 +7091,9 @@ rec { }; "serde_json" = rec { crateName = "serde_json"; - version = "1.0.137"; + version = "1.0.140"; edition = "2021"; - sha256 = "0sql0gndrw2miw440sl0m2lrk6bsxyxrmlnpma52k6dzd9pgn34k"; + sha256 = "0wwkp4vc20r87081ihj3vpyz5qf7wqkqipq17v99nv6wjrp8n1i0"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -7276,17 +7321,21 @@ rec { }; "smallvec" = rec { crateName = "smallvec"; - version = "1.13.2"; + version = "1.15.0"; edition = "2018"; - sha256 = "0rsw5samawl3wsw6glrsb127rx6sh89a8wyikicw6dkdcjd1lpiw"; + sha256 = "1sgfw8z729nlxk8k13dhs0a762wnaxmlx70a7xlf3wz989bjh5w9"; authors = [ "The Servo Project Developers" ]; features = { "arbitrary" = [ "dep:arbitrary" ]; + "bincode" = [ "dep:bincode" ]; "const_new" = [ "const_generics" ]; "drain_keep_rest" = [ "drain_filter" ]; + "impl_bincode" = [ "bincode" "unty" ]; + "malloc_size_of" = [ "dep:malloc_size_of" ]; "serde" = [ "dep:serde" ]; + "unty" = [ "dep:unty" ]; }; resolvedDefaultFeatures = [ "const_generics" "const_new" ]; }; @@ -7409,7 +7458,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } ]; @@ -7419,9 +7468,9 @@ rec { }; "socket2" = rec { crateName = "socket2"; - version = "0.5.8"; + version = "0.5.9"; edition = "2021"; - sha256 = "1s7vjmb5gzp3iaqi94rh9r63k9cj00kjgbfn7gn60kmnk6fjcw69"; + sha256 = "1vzds1wwwi0a51fn10r98j7cx3ir4shvhykpbk7md2h5h1ydapsg"; authors = [ "Alex Crichton " "Thomas de Zeeuw " @@ -7443,31 +7492,6 @@ rec { }; resolvedDefaultFeatures = [ "all" ]; }; - "spin" = rec { - crateName = "spin"; - version = "0.9.8"; - edition = "2015"; - sha256 = "0rvam5r0p3a6qhc18scqpvpgb3ckzyqxpgdfyjnghh8ja7byi039"; - authors = [ - "Mathijs van de Nes " - "John Ericson " - "Joshua Barretto " - ]; - features = { - "barrier" = [ "mutex" ]; - "default" = [ "lock_api" "mutex" "spin_mutex" "rwlock" "once" "lazy" "barrier" ]; - "fair_mutex" = [ "mutex" ]; - "lazy" = [ "once" ]; - "lock_api" = [ "lock_api_crate" ]; - "lock_api_crate" = [ "dep:lock_api_crate" ]; - "portable-atomic" = [ "dep:portable-atomic" ]; - "portable_atomic" = [ "portable-atomic" ]; - "spin_mutex" = [ "mutex" ]; - "ticket_mutex" = [ "mutex" ]; - "use_ticket_mutex" = [ "mutex" "ticket_mutex" ]; - }; - resolvedDefaultFeatures = [ "once" ]; - }; "stable_deref_trait" = rec { crateName = "stable_deref_trait"; version = "1.2.0"; @@ -7789,7 +7813,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; @@ -7918,7 +7942,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; devDependencies = [ @@ -7997,7 +8021,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "parsing" ]; } ]; @@ -8050,11 +8074,11 @@ rec { }; resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "full" "parsing" "printing" "proc-macro" "quote" ]; }; - "syn 2.0.96" = rec { + "syn 2.0.100" = rec { crateName = "syn"; - version = "2.0.96"; + version = "2.0.100"; edition = "2021"; - sha256 = "102wk3cgawimi3i0q3r3xw3i858zkyingg6y7gsxfy733amsvl6m"; + sha256 = "18623wdkns03blpv65xsjn8fipl9p9hj98vlrnhin7nqran496mh"; authors = [ "David Tolnay " ]; @@ -8117,7 +8141,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; usesDefaultFeatures = false; features = [ "derive" "parsing" "printing" "clone-impls" "visit" "extra-traits" ]; } @@ -8144,18 +8168,18 @@ rec { ]; }; - "thiserror 2.0.11" = rec { + "thiserror 2.0.12" = rec { crateName = "thiserror"; - version = "2.0.11"; + version = "2.0.12"; edition = "2021"; - sha256 = "1z0649rpa8c2smzx129bz4qvxmdihj30r2km6vfpcv9yny2g4lnl"; + sha256 = "024791nsc0np63g2pq30cjf9acj38z3jwx9apvvi8qsqmqnqlysn"; authors = [ "David Tolnay " ]; dependencies = [ { name = "thiserror-impl"; - packageId = "thiserror-impl 2.0.11"; + packageId = "thiserror-impl 2.0.12"; } ]; features = { @@ -8184,16 +8208,16 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; }; - "thiserror-impl 2.0.11" = rec { + "thiserror-impl 2.0.12" = rec { crateName = "thiserror-impl"; - version = "2.0.11"; + version = "2.0.12"; edition = "2021"; - sha256 = "1hkkn7p2y4cxbffcrprybkj0qy1rl1r6waxmxqvr764axaxc3br6"; + sha256 = "07bsn7shydaidvyyrm7jz29vp78vrxr9cr9044rfmn078lmz8z3z"; procMacro = true; libName = "thiserror_impl"; authors = [ @@ -8210,7 +8234,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; @@ -8296,9 +8320,9 @@ rec { }; "time" = rec { crateName = "time"; - version = "0.3.37"; + version = "0.3.41"; edition = "2021"; - sha256 = "08bvydyc14plkwhchzia5bcdbmm0mk5fzilsdpjx06w6hf48drrm"; + sha256 = "0h0cpiyya8cjlrh00d2r72bmgg4lsdcncs76qpwy0rn2kghijxla"; authors = [ "Jacob Pratt " "Time contributors" @@ -8376,9 +8400,9 @@ rec { }; "time-core" = rec { crateName = "time-core"; - version = "0.1.2"; + version = "0.1.4"; edition = "2021"; - sha256 = "1wx3qizcihw6z151hywfzzyd1y5dl804ydyxci6qm07vbakpr4pg"; + sha256 = "0z5h9fknvdvbs2k2s1chpi3ab3jvgkfhdnqwrvixjngm263s7sf9"; libName = "time_core"; authors = [ "Jacob Pratt " @@ -8388,9 +8412,9 @@ rec { }; "time-macros" = rec { crateName = "time-macros"; - version = "0.2.19"; + version = "0.2.22"; edition = "2021"; - sha256 = "1pl558z26pp342l5y91n6dxb60xwhar975wk6jc4npiygq0ycd18"; + sha256 = "0jcaxpw220han2bzbrdlpqhy1s5k9i8ri3lw6n5zv4zcja9p69im"; procMacro = true; libName = "time_macros"; authors = [ @@ -8442,9 +8466,9 @@ rec { }; "tokio" = rec { crateName = "tokio"; - version = "1.43.0"; + version = "1.44.2"; edition = "2021"; - sha256 = "17pdm49ihlhfw3rpxix3kdh2ppl1yv7nwp1kxazi5r1xz97zlq9x"; + sha256 = "0j4w3qvlcqzgbxlnap0czvspqj6x461vyk1sbqcf97g4rci8if76"; authors = [ "Tokio Contributors " ]; @@ -8565,7 +8589,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } ]; @@ -8573,9 +8597,9 @@ rec { }; "tokio-rustls" = rec { crateName = "tokio-rustls"; - version = "0.26.1"; + version = "0.26.2"; edition = "2021"; - sha256 = "0dxz4bhkn4bwnvzjqvqlg70ba5fslnmf9r6yr87wzq5cx9shjvaz"; + sha256 = "16wf007q3584j46wc4s0zc4szj6280g23hka6x6bgs50l4v7nwlf"; libName = "tokio_rustls"; dependencies = [ { @@ -8653,9 +8677,9 @@ rec { }; "tokio-util" = rec { crateName = "tokio-util"; - version = "0.7.13"; + version = "0.7.14"; edition = "2021"; - sha256 = "0y0h10a52c7hrldmr3410bp7j3fadq0jn9nf7awddgd2an6smz6p"; + sha256 = "0d7hm1jrwpzryvni72fy5dg9blqs776wq5w38lwigk3g7swr15bb"; libName = "tokio_util"; authors = [ "Tokio Contributors " @@ -8725,9 +8749,9 @@ rec { }; "toml_edit" = rec { crateName = "toml_edit"; - version = "0.22.22"; + version = "0.22.24"; edition = "2021"; - sha256 = "1xf7sxfzmnc45f75x302qrn5aph52vc8w226v59yhrm211i8vr2a"; + sha256 = "0x0lgp70x5cl9nla03xqs5vwwwlrwmd0djkdrp3h3lpdymgpkd0p"; authors = [ "Andronik Ordian " "Ed Page " @@ -8754,7 +8778,7 @@ rec { "perf" = [ "dep:kstring" ]; "serde" = [ "dep:serde" "toml_datetime/serde" "dep:serde_spanned" ]; }; - resolvedDefaultFeatures = [ "default" "display" "parse" ]; + resolvedDefaultFeatures = [ "parse" ]; }; "tower" = rec { crateName = "tower"; @@ -9100,7 +9124,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; usesDefaultFeatures = false; features = [ "full" "parsing" "printing" "visit-mut" "clone-impls" "extra-traits" "proc-macro" ]; } @@ -9436,10 +9460,9 @@ rec { }; "typenum" = rec { crateName = "typenum"; - version = "1.17.0"; + version = "1.18.0"; edition = "2018"; - sha256 = "09dqxv69m9lj9zvv6xw5vxaqx15ps0vxyy5myg33i0kbqvq0pzs2"; - build = "build/main.rs"; + sha256 = "0gwgz8n91pv40gabrr1lzji0b0hsmg0817njpy397bq7rvizzk0x"; authors = [ "Paho Lurie-Gregg " "Andre Bogus " @@ -9465,9 +9488,9 @@ rec { }; "unicode-ident" = rec { crateName = "unicode-ident"; - version = "1.0.15"; + version = "1.0.18"; edition = "2018"; - sha256 = "0hr2b72jf9zb5avd2k6p7rbwkjjgl21vdhd90114kihp5ghqik8i"; + sha256 = "04k5r6sijkafzljykdq26mhjpmhdx4jwzvn1lh90g9ax9903jpss"; libName = "unicode_ident"; authors = [ "David Tolnay " @@ -9671,11 +9694,11 @@ rec { }; resolvedDefaultFeatures = [ "default" "std" ]; }; - "wasi 0.13.3+wasi-0.2.2" = rec { + "wasi 0.14.2+wasi-0.2.4" = rec { crateName = "wasi"; - version = "0.13.3+wasi-0.2.2"; + version = "0.14.2+wasi-0.2.4"; edition = "2021"; - sha256 = "1lnapbvdcvi3kc749wzqvwrpd483win2kicn1faa4dja38p6v096"; + sha256 = "1cwcqjr3dgdq8j325awgk8a715h0hg0f7jqzsb077n4qm6jzk0wn"; authors = [ "The Cranelift Project Developers" ]; @@ -9770,7 +9793,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } { @@ -9826,7 +9849,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "visit" "visit-mut" "full" ]; } { @@ -9941,7 +9964,7 @@ rec { dependencies = [ { name = "windows-core"; - packageId = "windows-core"; + packageId = "windows-core 0.52.0"; } { name = "windows-targets"; @@ -10611,7 +10634,7 @@ rec { }; resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_System" "Win32_System_SystemInformation" "default" ]; }; - "windows-core" = rec { + "windows-core 0.52.0" = rec { crateName = "windows-core"; version = "0.52.0"; edition = "2021"; @@ -10630,6 +10653,161 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; + "windows-core 0.61.0" = rec { + crateName = "windows-core"; + version = "0.61.0"; + edition = "2021"; + sha256 = "104915nsby2cgp322pqqkmj2r82v5sg4hil0hxddg1hc67gc2qs7"; + libName = "windows_core"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-implement"; + packageId = "windows-implement"; + usesDefaultFeatures = false; + } + { + name = "windows-interface"; + packageId = "windows-interface"; + usesDefaultFeatures = false; + } + { + name = "windows-link"; + packageId = "windows-link"; + usesDefaultFeatures = false; + } + { + name = "windows-result"; + packageId = "windows-result"; + usesDefaultFeatures = false; + } + { + name = "windows-strings"; + packageId = "windows-strings"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + "std" = [ "windows-result/std" "windows-strings/std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "windows-implement" = rec { + crateName = "windows-implement"; + version = "0.60.0"; + edition = "2021"; + sha256 = "0dm88k3hlaax85xkls4gf597ar4z8m5vzjjagzk910ph7b8xszx4"; + procMacro = true; + libName = "windows_implement"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + { + name = "quote"; + packageId = "quote"; + usesDefaultFeatures = false; + } + { + name = "syn"; + packageId = "syn 2.0.100"; + usesDefaultFeatures = false; + features = [ "parsing" "proc-macro" "printing" "full" "clone-impls" ]; + } + ]; + + }; + "windows-interface" = rec { + crateName = "windows-interface"; + version = "0.59.1"; + edition = "2021"; + sha256 = "1a4zr8740gyzzhq02xgl6vx8l669jwfby57xgf0zmkcdkyv134mx"; + procMacro = true; + libName = "windows_interface"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + { + name = "quote"; + packageId = "quote"; + usesDefaultFeatures = false; + } + { + name = "syn"; + packageId = "syn 2.0.100"; + usesDefaultFeatures = false; + features = [ "parsing" "proc-macro" "printing" "full" "clone-impls" ]; + } + ]; + + }; + "windows-link" = rec { + crateName = "windows-link"; + version = "0.1.1"; + edition = "2021"; + sha256 = "0f2cq7imbrppsmmnz8899hfhg07cp5gq6rh0bjhb1qb6nwshk13n"; + libName = "windows_link"; + authors = [ + "Microsoft" + ]; + + }; + "windows-result" = rec { + crateName = "windows-result"; + version = "0.3.2"; + edition = "2021"; + sha256 = "0li2f76anf0rg7i966d9qs5iprsg555g9rgyzj7gcpfr9wdd2ky6"; + libName = "windows_result"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-link"; + packageId = "windows-link"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "windows-strings" = rec { + crateName = "windows-strings"; + version = "0.4.0"; + edition = "2021"; + sha256 = "15rg6a0ha1d231wwps2qlgyqrgkyj1r8v9vsb8nlbvih4ijajavs"; + libName = "windows_strings"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-link"; + packageId = "windows-link"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; "windows-sys 0.52.0" = rec { crateName = "windows-sys"; version = "0.52.0"; @@ -11272,9 +11450,9 @@ rec { }; "winnow" = rec { crateName = "winnow"; - version = "0.6.24"; + version = "0.7.4"; edition = "2021"; - sha256 = "0fm0z1gk9wb47s1jhh889isz657kavd1yb3fhzbjmi657icimmy8"; + sha256 = "0dmbsz6zfddcgsqzzqxw1h8f7zy19x407g7zl3hyp6vf2m2bb5qf"; dependencies = [ { name = "memchr"; @@ -11294,9 +11472,9 @@ rec { }; "wit-bindgen-rt" = rec { crateName = "wit-bindgen-rt"; - version = "0.33.0"; + version = "0.39.0"; edition = "2021"; - sha256 = "0g4lwfp9x6a2i1hgjn8k14nr4fsnpd5izxhc75zpi2s5cvcg6s1j"; + sha256 = "1hd65pa5hp0nl664m94bg554h4zlhrzmkjsf6lsgsb7yc4734hkg"; libName = "wit_bindgen_rt"; dependencies = [ { @@ -11306,6 +11484,7 @@ rec { } ]; features = { + "async" = [ "dep:futures" "dep:once_cell" ]; "bitflags" = [ "dep:bitflags" ]; }; resolvedDefaultFeatures = [ "bitflags" ]; @@ -11415,7 +11594,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "fold" ]; } { @@ -11434,12 +11613,6 @@ rec { "Joshua Liebow-Feeser " ]; dependencies = [ - { - name = "byteorder"; - packageId = "byteorder"; - optional = true; - usesDefaultFeatures = false; - } { name = "zerocopy-derive"; packageId = "zerocopy-derive 0.7.35"; @@ -11465,13 +11638,13 @@ rec { "simd-nightly" = [ "simd" ]; "zerocopy-derive" = [ "dep:zerocopy-derive" ]; }; - resolvedDefaultFeatures = [ "byteorder" "default" "derive" "simd" "zerocopy-derive" ]; + resolvedDefaultFeatures = [ "simd" ]; }; - "zerocopy 0.8.21" = rec { + "zerocopy 0.8.24" = rec { crateName = "zerocopy"; - version = "0.8.21"; + version = "0.8.24"; edition = "2021"; - sha256 = "0y4lz5l7a7h5rsy37jwmjrs3pc9i2jgwyigm257i6pfxn91i3w6w"; + sha256 = "0yb8hyzfnwzr2wg4p7cnqmjps8fsw8xqnprafgpmfs8qisigx1i5"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -11479,19 +11652,19 @@ rec { dependencies = [ { name = "zerocopy-derive"; - packageId = "zerocopy-derive 0.8.21"; + packageId = "zerocopy-derive 0.8.24"; optional = true; } { name = "zerocopy-derive"; - packageId = "zerocopy-derive 0.8.21"; + packageId = "zerocopy-derive 0.8.24"; target = { target, features }: false; } ]; devDependencies = [ { name = "zerocopy-derive"; - packageId = "zerocopy-derive 0.8.21"; + packageId = "zerocopy-derive 0.8.24"; } ]; features = { @@ -11524,16 +11697,16 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; } ]; }; - "zerocopy-derive 0.8.21" = rec { + "zerocopy-derive 0.8.24" = rec { crateName = "zerocopy-derive"; - version = "0.8.21"; + version = "0.8.24"; edition = "2021"; - sha256 = "18kdbw6k5hgw81l8pn1rp67zg13hxsdj3vmbr6196aglyj386b3i"; + sha256 = "1gk9047pbq1yjj2jyiv0s37nqc53maqbmhcsjp6lhi2w7kvai5m9"; procMacro = true; libName = "zerocopy_derive"; authors = [ @@ -11551,7 +11724,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "full" ]; } ]; @@ -11559,9 +11732,9 @@ rec { }; "zerofrom" = rec { crateName = "zerofrom"; - version = "0.1.5"; + version = "0.1.6"; edition = "2021"; - sha256 = "0bnd8vjcllzrvr3wvn8x14k2hkrpyy1fm3crkn2y3plmr44fxwyg"; + sha256 = "19dyky67zkjichsb7ykhv0aqws3q0jfvzww76l66c19y6gh45k2h"; authors = [ "Manish Goregaokar " ]; @@ -11581,9 +11754,9 @@ rec { }; "zerofrom-derive" = rec { crateName = "zerofrom-derive"; - version = "0.1.5"; + version = "0.1.6"; edition = "2021"; - sha256 = "022q55phhb44qbrcfbc48k0b741fl8gnazw3hpmmndbx5ycfspjr"; + sha256 = "00l5niw7c1b0lf1vhvajpjmcnbdp2vn96jg4nmkhq2db0rp5s7np"; procMacro = true; libName = "zerofrom_derive"; authors = [ @@ -11600,7 +11773,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "fold" ]; } { @@ -11684,7 +11857,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "extra-traits" ]; } ]; diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index 648feb1c..f2404354 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -359,11 +359,14 @@ impl ReconcilerError for Error { } } +// This struct is used for NiFi versions not supporting rolling upgrades since in that case +// we have to manage the restart process ourselves and need to track the state of it #[derive(Debug, PartialEq, Eq)] -pub enum VersionChangeState { - BeginChange, - Stopped, - NoChange, +enum VersionChangeState { + ReadyForChange, + InProgress, + ClusterStopped, + NoVersionChange, } pub async fn reconcile_nifi( @@ -394,71 +397,31 @@ pub async fn reconcile_nifi( .await .context(SecuritySnafu)?; - // Handle full restarts for a version change - let version_change = if let Some(deployed_version) = nifi + // if rolling upgrade is supported, kubernetes takes care of the cluster scaling automatically + // otherwise the operator handles it + let mut version_change = None; + let deployed_version = nifi .status .as_ref() - .and_then(|status| status.deployed_version.as_ref()) - { - if deployed_version != &resolved_product_image.product_version { - // Check if statefulsets are already scaled to zero, if not - requeue - let selector = LabelSelector { - match_expressions: None, - match_labels: Some( - Labels::role_selector(nifi, APP_NAME, &NifiRole::Node.to_string()) - .context(LabelBuildSnafu)? - .into(), - ), - }; + .and_then(|status| status.deployed_version.as_ref()); + let rolling_upgrade_supported = resolved_product_image.product_version.starts_with("2.") + && deployed_version.is_some_and(|v| v.starts_with("2.")); - // Retrieve the deployed statefulsets to check on the current status of the restart - let deployed_statefulsets = client - .list_with_label_selector::(namespace, &selector) - .await - .context(FetchStatefulsetsSnafu)?; - - // Sum target replicas for all statefulsets - let target_replicas = deployed_statefulsets - .iter() - .filter_map(|statefulset| statefulset.spec.as_ref()) - .filter_map(|spec| spec.replicas) - .sum::(); - - // Sum current ready replicas for all statefulsets - let current_replicas = deployed_statefulsets - .iter() - .filter_map(|statefulset| statefulset.status.as_ref()) - .map(|status| status.replicas) - .sum::(); - - // If statefulsets have already been scaled to zero, but have remaining replicas - // we requeue to wait until a full stop has been performed. - if target_replicas == 0 && current_replicas > 0 { - tracing::info!("Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", current_replicas); - return Ok(Action::await_change()); - } + if !rolling_upgrade_supported { + version_change = Some( + version_change_state( + nifi, + client, + &resolved_product_image.product_version, + deployed_version, + ) + .await?, + ); - // Otherwise we either still need to scale the statefulsets to 0 or all replicas have - // been stopped and we can restart the cluster. - // Both actions will be taken in the regular reconciliation, so we can simply continue - // here - if target_replicas > 0 { - tracing::info!("Version change detected, we'll need to scale down the cluster for a full restart."); - VersionChangeState::BeginChange - } else { - tracing::info!("Cluster has been stopped for a restart, will scale back up."); - VersionChangeState::Stopped - } - } else { - // No version change detected, propagate this to the reconciliation - VersionChangeState::NoChange + if version_change == Some(VersionChangeState::InProgress) { + return Ok(Action::await_change()); } - } else { - // No deployed version set in status, this is probably the first reconciliation ever - // for this cluster, so just let it progress normally - tracing::debug!("No deployed version found for this cluster, this is probably the first start, continue reconciliation"); - VersionChangeState::NoChange - }; + } let validated_config = validated_product_config( nifi, @@ -662,7 +625,7 @@ pub async fn reconcile_nifi( // Update the deployed product version in the status after everything has been deployed, unless // we are still in the process of updating - let status = if version_change != VersionChangeState::BeginChange { + let status = if version_change != Some(VersionChangeState::ReadyForChange) { NifiStatus { deployed_version: Some(resolved_product_image.product_version), conditions, @@ -685,6 +648,84 @@ pub async fn reconcile_nifi( Ok(Action::await_change()) } +async fn version_change_state( + nifi: &v1alpha1::NifiCluster, + client: &Client, + resolved_version: &String, + deployed_version: Option<&String>, +) -> Result { + let namespace = &nifi + .metadata + .namespace + .clone() + .with_context(|| ObjectHasNoNamespaceSnafu {})?; + + // Handle full restarts for a version change + match deployed_version { + Some(deployed_version) => { + if deployed_version != resolved_version { + // Check if statefulsets are already scaled to zero, if not - requeue + let selector = LabelSelector { + match_expressions: None, + match_labels: Some( + Labels::role_selector(nifi, APP_NAME, &NifiRole::Node.to_string()) + .context(LabelBuildSnafu)? + .into(), + ), + }; + + // Retrieve the deployed statefulsets to check on the current status of the restart + let deployed_statefulsets = client + .list_with_label_selector::(namespace, &selector) + .await + .context(FetchStatefulsetsSnafu)?; + + // Sum target replicas for all statefulsets + let target_replicas = deployed_statefulsets + .iter() + .filter_map(|statefulset| statefulset.spec.as_ref()) + .filter_map(|spec| spec.replicas) + .sum::(); + + // Sum current ready replicas for all statefulsets + let current_replicas = deployed_statefulsets + .iter() + .filter_map(|statefulset| statefulset.status.as_ref()) + .map(|status| status.replicas) + .sum::(); + + // If statefulsets have already been scaled to zero, but have remaining replicas + // we requeue to wait until a full stop has been performed. + if target_replicas == 0 && current_replicas > 0 { + tracing::info!("Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", current_replicas); + return Ok(VersionChangeState::InProgress); + } + + // Otherwise we either still need to scale the statefulsets to 0 or all replicas have + // been stopped and we can restart the cluster. + // Both actions will be taken in the regular reconciliation, so we can simply continue + // here + if target_replicas > 0 { + tracing::info!("Version change detected, we'll need to scale down the cluster for a full restart."); + Ok(VersionChangeState::ReadyForChange) + } else { + tracing::info!("Cluster has been stopped for a restart, will scale back up."); + Ok(VersionChangeState::ClusterStopped) + } + } else { + // No version change detected, propagate this to the reconciliation + Ok(VersionChangeState::NoVersionChange) + } + } + None => { + // No deployed version set in status, this is probably the first reconciliation ever + // for this cluster, so just let it progress normally + tracing::debug!("No deployed version found for this cluster, this is probably the first start, continue reconciliation"); + Ok(VersionChangeState::NoVersionChange) + } + } +} + /// The node-role service is the primary endpoint that should be used by clients that do not /// perform internal load balancing including targets outside of the cluster. pub fn build_node_role_service( @@ -913,7 +954,7 @@ async fn build_node_rolegroup_statefulset( rolegroup_config: &HashMap>, merged_config: &NifiConfig, nifi_auth_config: &NifiAuthenticationConfig, - version_change_state: &VersionChangeState, + version_change_state: &Option, sa_name: &str, ) -> Result { tracing::debug!("Building statefulset"); @@ -1389,7 +1430,10 @@ async fn build_node_rolegroup_statefulset( .build(), spec: Some(StatefulSetSpec { pod_management_policy: Some("Parallel".to_string()), - replicas: if version_change_state == &VersionChangeState::BeginChange { + replicas: if version_change_state + .as_ref() + .is_some_and(|state| state == &VersionChangeState::ReadyForChange) + { Some(0) } else { role_group.and_then(|rg| rg.replicas).map(i32::from) @@ -1410,7 +1454,11 @@ async fn build_node_rolegroup_statefulset( service_name: rolegroup_ref.object_name(), template: pod_template, update_strategy: Some(StatefulSetUpdateStrategy { - type_: Some("OnDelete".to_string()), + type_: if version_change_state.is_none() { + Some("RollingUpdate".to_string()) + } else { + Some("OnDelete".to_string()) + }, ..StatefulSetUpdateStrategy::default() }), volume_claim_templates: Some(vec![ diff --git a/tests/templates/kuttl/upgrade/04-assert.yaml.j2 b/tests/templates/kuttl/upgrade/04-assert.yaml.j2 index 9f90b3f1..15d3c962 100644 --- a/tests/templates/kuttl/upgrade/04-assert.yaml.j2 +++ b/tests/templates/kuttl/upgrade/04-assert.yaml.j2 @@ -7,4 +7,10 @@ commands: {% if test_scenario['values']['nifi_old'].startswith('1.') %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi_metrics.py -n $NAMESPACE {% endif %} - - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 run -t /tmp/generate-and-log-flowfiles.xml > /tmp/old_input" +{% if test_scenario['values']['nifi_old'] == '2.0.0' %} + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 run json /tmp/generate-and-log-flowfiles.json > /tmp/old_input" +{% else %} + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 run template /tmp/generate-and-log-flowfiles.xml > /tmp/old_input" +{% endif %} + # This tests if the output contains an Error or zero flow files are queued, which also indicates that something went wrong + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "cat /tmp/old_input | grep -Eov 'Error|\b0\b'" diff --git a/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml b/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 similarity index 71% rename from tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml rename to tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 index 9fe76b7b..9765caf3 100644 --- a/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml +++ b/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 @@ -5,5 +5,9 @@ commands: - script: kubectl cp -n $NAMESPACE ./test_nifi_metrics.py test-nifi-0:/tmp - script: kubectl cp -n $NAMESPACE ./test_nifi.py test-nifi-0:/tmp - script: kubectl cp -n $NAMESPACE ./flow.py test-nifi-0:/tmp +{% if test_scenario['values']['nifi_old'] == '2.0.0' %} + - script: kubectl cp -n $NAMESPACE ./generate-and-log-flowfiles.json test-nifi-0:/tmp +{% else %} - script: kubectl cp -n $NAMESPACE ./generate-and-log-flowfiles.xml test-nifi-0:/tmp +{% endif %} - script: kubectl cp -n $NAMESPACE ./cacert.pem test-nifi-0:/tmp diff --git a/tests/templates/kuttl/upgrade/07-assert.yaml.j2 b/tests/templates/kuttl/upgrade/07-assert.yaml.j2 index 24abfbc8..e752bbca 100644 --- a/tests/templates/kuttl/upgrade/07-assert.yaml.j2 +++ b/tests/templates/kuttl/upgrade/07-assert.yaml.j2 @@ -10,5 +10,7 @@ commands: - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi_metrics.py -n $NAMESPACE {% endif %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 query > /tmp/new_input" + # This tests if the output contains an Error or zero flow files are queued, which also indicates that something went wrong + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "cat /tmp/new_input | grep -Eov 'Error|\b0\b'" # This tests that the number of input records stays the same after the upgrade. - script: kubectl exec -n $NAMESPACE test-nifi-0 -- diff /tmp/old_input /tmp/new_input diff --git a/tests/templates/kuttl/upgrade/flow.py b/tests/templates/kuttl/upgrade/flow.py index a5fa03ae..61834b43 100755 --- a/tests/templates/kuttl/upgrade/flow.py +++ b/tests/templates/kuttl/upgrade/flow.py @@ -3,7 +3,13 @@ # of seconds, stop it and then query the number of queued flow files. import nipyapi -from nipyapi.canvas import get_root_pg_id, schedule_process_group, list_all_controllers, schedule_controller, recurse_flow +from nipyapi.canvas import ( + get_root_pg_id, + schedule_process_group, + list_all_controllers, + schedule_controller, + recurse_flow, +) from nipyapi.security import service_login from nipyapi.templates import get_template, upload_template, deploy_template from nipyapi.nifi.models import FlowEntity @@ -22,6 +28,8 @@ PASSWORD = "supersecretpassword" TEMPLATE_NAME = "generate-and-log-flowfiles" TEMPLATE_FILE = f"{TEMPLATE_NAME}.xml" +JSON_NAME = "generate-and-log-flowfiles" +JSON_FILE = f"{JSON_NAME}.json" CONNECTION_NAME = "output-connection" @@ -31,9 +39,7 @@ class Error: def parse_args(args: List[str]) -> argparse.Namespace: - parser = argparse.ArgumentParser( - description="Setup a flow and query the status." - ) + parser = argparse.ArgumentParser(description="Setup a flow and query the status.") parser.add_argument( "-e", "--endpoint", @@ -55,11 +61,21 @@ def parse_args(args: List[str]) -> argparse.Namespace: "run", help="Install and run a flow.", ) - run_parser.add_argument( - "-t", - "--template", + format_parser = run_parser.add_subparsers(dest="formatcommand") + template_parser = format_parser.add_parser( + "template", help="Use the template format for the flow." + ) + template_parser.add_argument( + "template", help="Nifi template file.", ) + json_parser = format_parser.add_parser( + "json", help="Use the json format for the flow." + ) + json_parser.add_argument( + "json", + help="Nifi json file.", + ) subparsers.add_parser( "query", help="Query the flow.", @@ -73,53 +89,119 @@ def login(endpoint: str, user: str, passwd: str) -> bool: return service_login(username=user, password=passwd) -def flow_from_template(pg_id: str, template_file: str, template_name: str) -> FlowEntity: - upload_template(pg_id, template_file) - template_id = get_template(template_name).id - return deploy_template(pg_id, template_id, 200, 0) +def flow_from_template( + pg_id: str, template_file: str, template_name: str +) -> FlowEntity: + upload_template(pg_id, template_file) + template_id = get_template(template_name).id + return deploy_template(pg_id, template_id, 200, 0) def schedule(pg_id: str, toggle: bool) -> bool: - for controller in list_all_controllers(): - schedule_controller(controller, scheduled=toggle) - return schedule_process_group(pg_id, scheduled=toggle) + for controller in list_all_controllers(pg_id): + schedule_controller(controller, scheduled=toggle) + return schedule_process_group(pg_id, scheduled=toggle) def flow_files_queued(connection_name: str) -> Union[str, Error]: - """ Returns the current input record number for the given component""" - flow = recurse_flow() - c = [c for c in flow.process_group_flow.flow.connections if c.status.name == connection_name] - if c: - return c[0].status.aggregate_snapshot.flow_files_queued - else: - return Error(f"No connection named '{connection_name}' found.") + """Returns the current input record number for the given component""" + flow = recurse_flow() + c = [ + c + for c in flow.process_group_flow.flow.connections + if c.status.name == connection_name + ] + if c: + return c[0].status.aggregate_snapshot.flow_files_queued + else: + # for nifi 2.x the flow is loaded via api into a new process group + # we need to look for the connection in that process group instead + if flow.process_group_flow.flow.process_groups: + inner_flow = recurse_flow(flow.process_group_flow.flow.process_groups[0].id) + inner_c = [ + inner_c + for inner_c in inner_flow.process_group_flow.flow.connections + if inner_c.status.name == connection_name + ] + if inner_c: + return inner_c[0].status.aggregate_snapshot.flow_files_queued + else: + return Error(f"No connection named '{connection_name}' found.") + else: + return Error(f"No connection named '{connection_name}' found.") def main(): - # turn this on to debug Nifi api calls. Also need to import logging - # logging.getLogger().setLevel(logging.INFO) - - args = parse_args(sys.argv[1:]) - - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - - username = args.user or USERNAME - password = args.password or PASSWORD - - if args.subcommand == "run": - template_file = args.template or TEMPLATE_FILE - template_name = re.sub(r"\..+$", "", os.path.basename(template_file)) - - login(args.endpoint, username, password) - pg_id = get_root_pg_id() - flow_from_template(pg_id, template_file, template_name) - schedule(pg_id, True) # start - time.sleep(5) # give the flow 5 seconds to run - schedule(pg_id, False) # stop - print(flow_files_queued(CONNECTION_NAME)) - elif args.subcommand == "query": - login(args.endpoint, username, password) - print(flow_files_queued(CONNECTION_NAME)) + # turn this on to debug Nifi api calls. Also need to import logging + # logging.getLogger().setLevel(logging.INFO) + + args = parse_args(sys.argv[1:]) + + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + username = args.user or USERNAME + password = args.password or PASSWORD + + if args.subcommand == "run": + login(args.endpoint, username, password) + pg_id = get_root_pg_id() + + if args.formatcommand == "template": + template_file = args.template or TEMPLATE_FILE + template_name = re.sub(r"\..+$", "", os.path.basename(template_file)) + + flow_from_template(pg_id, template_file, template_name) + + elif args.formatcommand == "json": + json_file = args.json or JSON_FILE + json_name = re.sub(r"\..+$", "", os.path.basename(json_file)) + + if not nipyapi.config.nifi_config.api_client: + nipyapi.config.nifi_config.api_client = nipyapi.nifi.ApiClient() + + header_params = {} + header_params["Accept"] = ( + nipyapi.config.nifi_config.api_client.select_header_accept( + ["application/json"] + ) + ) + header_params["Content-Type"] = ( + nipyapi.config.nifi_config.api_client.select_header_content_type( + ["multipart/form-data"] + ) + ) + + nipyapi.config.nifi_config.api_client.call_api( + "/process-groups/{pg_id}/process-groups/upload", + "POST", + path_params={"pg_id": pg_id}, + header_params=header_params, + _return_http_data_only=True, + post_params=[ + ("id", pg_id), + ("groupName", json_name), + ("positionX", 100), + ("positionY", 10), + ("clientId", nipyapi.nifi.FlowApi().generate_client_id()), + ], + files={"file": json_file}, + auth_settings=["tokenAuth"], + ) + + # get the process group id of the newly created process group to pass it to the schedule() function + # for nifi 2.x we need to schedule the inner process group and instead of the root process group + flow = recurse_flow() + inner_flow_id = flow.process_group_flow.flow.process_groups[0].id + pg_id = inner_flow_id + + schedule(pg_id, True) # start + time.sleep(5) # give the flow 5 seconds to run + schedule(pg_id, False) # stop + print(flow_files_queued(CONNECTION_NAME)) + + elif args.subcommand == "query": + login(args.endpoint, username, password) + print(flow_files_queued(CONNECTION_NAME)) if __name__ == "__main__": diff --git a/tests/templates/kuttl/upgrade/generate-and-log-flowfiles.json b/tests/templates/kuttl/upgrade/generate-and-log-flowfiles.json new file mode 100644 index 00000000..27593ebb --- /dev/null +++ b/tests/templates/kuttl/upgrade/generate-and-log-flowfiles.json @@ -0,0 +1,338 @@ +{ + "flowContents": { + "identifier": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d", + "instanceIdentifier": "f1d4875b-0195-1000-dc79-af7f2c011d90", + "name": "NiFi Flow", + "comments": "", + "position": { + "x": 0.0, + "y": 0.0 + }, + "processGroups": [], + "remoteProcessGroups": [], + "processors": [ + { + "identifier": "1a6cf8b8-6ab9-3b3f-a7e6-8b2ec3196af8", + "instanceIdentifier": "bd1a2413-49c5-3d4b-9ac9-8d6aae6cbf33", + "name": "GenerateFlowFile", + "comments": "", + "position": { + "x": 200.0, + "y": 0.0 + }, + "type": "org.apache.nifi.processors.standard.GenerateFlowFile", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.0.0" + }, + "properties": { + "character-set": "UTF-8", + "File Size": "64B", + "mime-type": null, + "generate-ff-custom-text": null, + "Batch Size": "1", + "Unique FlowFiles": "false", + "Data Format": "Text" + }, + "propertyDescriptors": { + "character-set": { + "name": "character-set", + "displayName": "Character Set", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "File Size": { + "name": "File Size", + "displayName": "File Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "mime-type": { + "name": "mime-type", + "displayName": "Mime Type", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "generate-ff-custom-text": { + "name": "generate-ff-custom-text", + "displayName": "Custom Text", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Batch Size": { + "name": "Batch Size", + "displayName": "Batch Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Unique FlowFiles": { + "name": "Unique FlowFiles", + "displayName": "Unique FlowFiles", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Data Format": { + "name": "Data Format", + "displayName": "Data Format", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "1 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 0, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [], + "scheduledState": "ENABLED", + "retryCount": 0, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d" + }, + { + "identifier": "766493bb-db2d-3ec1-aac9-e9e667f6ff5f", + "instanceIdentifier": "83c0bba6-72a1-36d9-a3af-37d480b3a7fe", + "name": "LogAttribute", + "comments": "", + "position": { + "x": 1016.0, + "y": 0.0 + }, + "type": "org.apache.nifi.processors.standard.LogAttribute", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.0.0" + }, + "properties": { + "Log prefix": null, + "character-set": "US-ASCII", + "Log FlowFile Properties": "true", + "Log Level": "info", + "attributes-to-ignore-regex": null, + "Attributes to Ignore": null, + "Attributes to Log": null, + "attributes-to-log-regex": ".*", + "Output Format": "Line per Attribute", + "Log Payload": "false" + }, + "propertyDescriptors": { + "Log prefix": { + "name": "Log prefix", + "displayName": "Log prefix", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "character-set": { + "name": "character-set", + "displayName": "Character Set", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Log FlowFile Properties": { + "name": "Log FlowFile Properties", + "displayName": "Log FlowFile Properties", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Log Level": { + "name": "Log Level", + "displayName": "Log Level", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "attributes-to-ignore-regex": { + "name": "attributes-to-ignore-regex", + "displayName": "Attributes to Ignore by Regular Expression", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Attributes to Ignore": { + "name": "Attributes to Ignore", + "displayName": "Attributes to Ignore", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Attributes to Log": { + "name": "Attributes to Log", + "displayName": "Attributes to Log", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "attributes-to-log-regex": { + "name": "attributes-to-log-regex", + "displayName": "Attributes to Log by Regular Expression", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Output Format": { + "name": "Output Format", + "displayName": "Output Format", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Log Payload": { + "name": "Log Payload", + "displayName": "Log Payload", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "0 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 0, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [ + "success" + ], + "scheduledState": "ENABLED", + "retryCount": 0, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d" + } + ], + "inputPorts": [], + "outputPorts": [ + { + "identifier": "0f402e28-8c6a-30d4-bed8-0a9c3a0e0d0f", + "instanceIdentifier": "91a1e057-83f6-37e8-8bb1-6d59dd861686", + "name": "Output", + "position": { + "x": 672.0, + "y": 224.0 + }, + "type": "OUTPUT_PORT", + "concurrentlySchedulableTaskCount": 1, + "scheduledState": "ENABLED", + "allowRemoteAccess": true, + "portFunction": "STANDARD", + "componentType": "OUTPUT_PORT", + "groupIdentifier": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d" + } + ], + "connections": [ + { + "identifier": "7822c7dc-3306-3d3c-9e28-f3e3efd9897a", + "instanceIdentifier": "3a49a47d-0862-34fc-bde7-e83012d7e4fb", + "name": "", + "source": { + "id": "1a6cf8b8-6ab9-3b3f-a7e6-8b2ec3196af8", + "type": "PROCESSOR", + "groupId": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d", + "name": "GenerateFlowFile", + "comments": "", + "instanceIdentifier": "bd1a2413-49c5-3d4b-9ac9-8d6aae6cbf33" + }, + "destination": { + "id": "766493bb-db2d-3ec1-aac9-e9e667f6ff5f", + "type": "PROCESSOR", + "groupId": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d", + "name": "LogAttribute", + "comments": "", + "instanceIdentifier": "83c0bba6-72a1-36d9-a3af-37d480b3a7fe" + }, + "labelIndex": 1, + "zIndex": 0, + "selectedRelationships": [ + "success" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d" + }, + { + "identifier": "e46e6370-45fe-3387-8c6d-a22fbc846dc4", + "instanceIdentifier": "92c1103a-88bd-39a1-9fb0-498afa1214b3", + "name": "output-connection", + "source": { + "id": "1a6cf8b8-6ab9-3b3f-a7e6-8b2ec3196af8", + "type": "PROCESSOR", + "groupId": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d", + "name": "GenerateFlowFile", + "comments": "", + "instanceIdentifier": "bd1a2413-49c5-3d4b-9ac9-8d6aae6cbf33" + }, + "destination": { + "id": "0f402e28-8c6a-30d4-bed8-0a9c3a0e0d0f", + "type": "OUTPUT_PORT", + "groupId": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d", + "name": "Output", + "instanceIdentifier": "91a1e057-83f6-37e8-8bb1-6d59dd861686" + }, + "labelIndex": 1, + "zIndex": 0, + "selectedRelationships": [ + "success" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2fd98cd2-df08-3faa-8b9a-d5343ffd500d" + } + ], + "labels": [], + "funnels": [], + "controllerServices": [], + "defaultFlowFileExpiration": "0 sec", + "defaultBackPressureObjectThreshold": 10000, + "defaultBackPressureDataSizeThreshold": "1 GB", + "scheduledState": "ENABLED", + "executionEngine": "INHERITED", + "maxConcurrentTasks": 1, + "statelessFlowTimeout": "1 min", + "flowFileConcurrency": "UNBOUNDED", + "flowFileOutboundPolicy": "STREAM_WHEN_AVAILABLE", + "componentType": "PROCESS_GROUP" + }, + "externalControllerServices": {}, + "parameterContexts": {}, + "flowEncodingVersion": "1.0", + "parameterProviders": {}, + "latest": false +} From 752fc441be1b0319783d04ea2cf578adf6c0268a Mon Sep 17 00:00:00 2001 From: xeniape Date: Tue, 8 Apr 2025 10:27:54 +0200 Subject: [PATCH 02/15] cargo fmt --- rust/operator-binary/src/config/mod.rs | 14 +++-- rust/operator-binary/src/controller.rs | 21 +++++--- rust/operator-binary/src/crd/affinity.rs | 65 +++++++++++++----------- rust/operator-binary/src/main.rs | 11 ++-- 4 files changed, 65 insertions(+), 46 deletions(-) diff --git a/rust/operator-binary/src/config/mod.rs b/rust/operator-binary/src/config/mod.rs index b075c495..658ff2e6 100644 --- a/rust/operator-binary/src/config/mod.rs +++ b/rust/operator-binary/src/config/mod.rs @@ -696,7 +696,9 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!(bootstrap_conf, indoc! {" + assert_eq!( + bootstrap_conf, + indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -715,7 +717,8 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "}); + "} + ); } #[test] @@ -761,7 +764,9 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!(bootstrap_conf, indoc! {" + assert_eq!( + bootstrap_conf, + indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -782,7 +787,8 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "}); + "} + ); } fn construct_bootstrap_conf(nifi_cluster: &str) -> String { diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index 1e52bdcb..1f400138 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -696,7 +696,10 @@ async fn version_change_state( // If statefulsets have already been scaled to zero, but have remaining replicas // we requeue to wait until a full stop has been performed. if target_replicas == 0 && current_replicas > 0 { - tracing::info!("Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", current_replicas); + tracing::info!( + "Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", + current_replicas + ); return Ok(VersionChangeState::InProgress); } @@ -705,7 +708,9 @@ async fn version_change_state( // Both actions will be taken in the regular reconciliation, so we can simply continue // here if target_replicas > 0 { - tracing::info!("Version change detected, we'll need to scale down the cluster for a full restart."); + tracing::info!( + "Version change detected, we'll need to scale down the cluster for a full restart." + ); Ok(VersionChangeState::ReadyForChange) } else { tracing::info!("Cluster has been stopped for a restart, will scale back up."); @@ -719,7 +724,9 @@ async fn version_change_state( None => { // No deployed version set in status, this is probably the first reconciliation ever // for this cluster, so just let it progress normally - tracing::debug!("No deployed version found for this cluster, this is probably the first start, continue reconciliation"); + tracing::debug!( + "No deployed version found for this cluster, this is probably the first start, continue reconciliation" + ); Ok(VersionChangeState::NoVersionChange) } } @@ -1296,10 +1303,10 @@ async fn build_node_rolegroup_statefulset( } nifi_auth_config - .add_volumes_and_mounts(&mut pod_builder, vec![ - &mut container_prepare, - container_nifi, - ]) + .add_volumes_and_mounts( + &mut pod_builder, + vec![&mut container_prepare, container_nifi], + ) .context(AddAuthVolumesSnafu)?; let metadata = ObjectMetaBuilder::new() diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index bb1ed6f9..ac1e570e 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -61,36 +61,39 @@ mod tests { serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap(); let merged_config = nifi.merged_config(&NifiRole::Node, "default").unwrap(); - assert_eq!(merged_config.affinity, StackableAffinity { - pod_affinity: None, - pod_anti_affinity: Some(PodAntiAffinity { - preferred_during_scheduling_ignored_during_execution: Some(vec![ - WeightedPodAffinityTerm { - pod_affinity_term: PodAffinityTerm { - label_selector: Some(LabelSelector { - match_expressions: None, - match_labels: Some(BTreeMap::from([ - ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), - ( - "app.kubernetes.io/instance".to_string(), - "simple-nifi".to_string(), - ), - ( - "app.kubernetes.io/component".to_string(), - "node".to_string(), - ) - ])) - }), - topology_key: "kubernetes.io/hostname".to_string(), - ..Default::default() - }, - weight: 70 - } - ]), - required_during_scheduling_ignored_during_execution: None, - }), - node_affinity: None, - node_selector: None, - }); + assert_eq!( + merged_config.affinity, + StackableAffinity { + pod_affinity: None, + pod_anti_affinity: Some(PodAntiAffinity { + preferred_during_scheduling_ignored_during_execution: Some(vec![ + WeightedPodAffinityTerm { + pod_affinity_term: PodAffinityTerm { + label_selector: Some(LabelSelector { + match_expressions: None, + match_labels: Some(BTreeMap::from([ + ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), + ( + "app.kubernetes.io/instance".to_string(), + "simple-nifi".to_string(), + ), + ( + "app.kubernetes.io/component".to_string(), + "node".to_string(), + ) + ])) + }), + topology_key: "kubernetes.io/hostname".to_string(), + ..Default::default() + }, + weight: 70 + } + ]), + required_during_scheduling_ignored_during_execution: None, + }), + node_affinity: None, + node_selector: None, + } + ); } } diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index d292f684..7c309358 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -86,10 +86,13 @@ async fn main() -> anyhow::Result<()> { ) .await?; - let event_recorder = Arc::new(Recorder::new(client.as_kube_client(), Reporter { - controller: NIFI_FULL_CONTROLLER_NAME.to_string(), - instance: None, - })); + let event_recorder = Arc::new(Recorder::new( + client.as_kube_client(), + Reporter { + controller: NIFI_FULL_CONTROLLER_NAME.to_string(), + instance: None, + }, + )); let nifi_controller = Controller::new( watch_namespace.get_api::>(&client), From 50a27af34638d9595716b10256dc0e05c9370a8d Mon Sep 17 00:00:00 2001 From: xeniape Date: Tue, 8 Apr 2025 10:50:19 +0200 Subject: [PATCH 03/15] cargo fmt --- rust/operator-binary/src/config/mod.rs | 14 ++--- rust/operator-binary/src/controller.rs | 8 +-- rust/operator-binary/src/crd/affinity.rs | 65 +++++++++++------------- rust/operator-binary/src/main.rs | 11 ++-- 4 files changed, 43 insertions(+), 55 deletions(-) diff --git a/rust/operator-binary/src/config/mod.rs b/rust/operator-binary/src/config/mod.rs index 658ff2e6..b075c495 100644 --- a/rust/operator-binary/src/config/mod.rs +++ b/rust/operator-binary/src/config/mod.rs @@ -696,9 +696,7 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!( - bootstrap_conf, - indoc! {" + assert_eq!(bootstrap_conf, indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -717,8 +715,7 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "} - ); + "}); } #[test] @@ -764,9 +761,7 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!( - bootstrap_conf, - indoc! {" + assert_eq!(bootstrap_conf, indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -787,8 +782,7 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "} - ); + "}); } fn construct_bootstrap_conf(nifi_cluster: &str) -> String { diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index 1f400138..dcaffd86 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -1303,10 +1303,10 @@ async fn build_node_rolegroup_statefulset( } nifi_auth_config - .add_volumes_and_mounts( - &mut pod_builder, - vec![&mut container_prepare, container_nifi], - ) + .add_volumes_and_mounts(&mut pod_builder, vec![ + &mut container_prepare, + container_nifi, + ]) .context(AddAuthVolumesSnafu)?; let metadata = ObjectMetaBuilder::new() diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index ac1e570e..bb1ed6f9 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -61,39 +61,36 @@ mod tests { serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap(); let merged_config = nifi.merged_config(&NifiRole::Node, "default").unwrap(); - assert_eq!( - merged_config.affinity, - StackableAffinity { - pod_affinity: None, - pod_anti_affinity: Some(PodAntiAffinity { - preferred_during_scheduling_ignored_during_execution: Some(vec![ - WeightedPodAffinityTerm { - pod_affinity_term: PodAffinityTerm { - label_selector: Some(LabelSelector { - match_expressions: None, - match_labels: Some(BTreeMap::from([ - ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), - ( - "app.kubernetes.io/instance".to_string(), - "simple-nifi".to_string(), - ), - ( - "app.kubernetes.io/component".to_string(), - "node".to_string(), - ) - ])) - }), - topology_key: "kubernetes.io/hostname".to_string(), - ..Default::default() - }, - weight: 70 - } - ]), - required_during_scheduling_ignored_during_execution: None, - }), - node_affinity: None, - node_selector: None, - } - ); + assert_eq!(merged_config.affinity, StackableAffinity { + pod_affinity: None, + pod_anti_affinity: Some(PodAntiAffinity { + preferred_during_scheduling_ignored_during_execution: Some(vec![ + WeightedPodAffinityTerm { + pod_affinity_term: PodAffinityTerm { + label_selector: Some(LabelSelector { + match_expressions: None, + match_labels: Some(BTreeMap::from([ + ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), + ( + "app.kubernetes.io/instance".to_string(), + "simple-nifi".to_string(), + ), + ( + "app.kubernetes.io/component".to_string(), + "node".to_string(), + ) + ])) + }), + topology_key: "kubernetes.io/hostname".to_string(), + ..Default::default() + }, + weight: 70 + } + ]), + required_during_scheduling_ignored_during_execution: None, + }), + node_affinity: None, + node_selector: None, + }); } } diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index 7c309358..d292f684 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -86,13 +86,10 @@ async fn main() -> anyhow::Result<()> { ) .await?; - let event_recorder = Arc::new(Recorder::new( - client.as_kube_client(), - Reporter { - controller: NIFI_FULL_CONTROLLER_NAME.to_string(), - instance: None, - }, - )); + let event_recorder = Arc::new(Recorder::new(client.as_kube_client(), Reporter { + controller: NIFI_FULL_CONTROLLER_NAME.to_string(), + instance: None, + })); let nifi_controller = Controller::new( watch_namespace.get_api::>(&client), From 74cdf408243fadbf775df7d2a454d00c0029c100 Mon Sep 17 00:00:00 2001 From: xeniape Date: Tue, 8 Apr 2025 10:59:14 +0200 Subject: [PATCH 04/15] cargo update and make regenerate-nix --- Cargo.lock | 31 +-- Cargo.nix | 721 +---------------------------------------------------- 2 files changed, 14 insertions(+), 738 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 30b3eaa9..64bfe903 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -872,13 +872,13 @@ dependencies = [ [[package]] name = "hostname" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" +checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" dependencies = [ "cfg-if", "libc", - "windows", + "windows-link", ] [[package]] @@ -1030,7 +1030,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.0", + "windows-core", ] [[package]] @@ -3143,25 +3143,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core 0.52.0", - "windows-targets", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-core" version = "0.61.0" @@ -3305,9 +3286,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] diff --git a/Cargo.nix b/Cargo.nix index 3808f0c7..7af7e894 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -2519,13 +2519,9 @@ rec { }; "hostname" = rec { crateName = "hostname"; - version = "0.4.0"; + version = "0.4.1"; edition = "2021"; - sha256 = "1fpjr3vgi64ly1ci8phdqjbha4k22c65c94a9drriiqnmk4cgizr"; - authors = [ - "fengcen " - "svartalf " - ]; + sha256 = "0rbxryl68bwv8hkjdjd8f37kdb10fncgsqrqksv64qy7s4y20vx5"; dependencies = [ { name = "cfg-if"; @@ -2537,10 +2533,9 @@ rec { target = { target, features }: ((target."unix" or false) || ("redox" == target."os" or null)); } { - name = "windows"; - packageId = "windows"; + name = "windows-link"; + packageId = "windows-link"; target = { target, features }: ("windows" == target."os" or null); - features = [ "Win32_Foundation" "Win32_System_SystemInformation" ]; } ]; features = { @@ -3151,7 +3146,7 @@ rec { } { name = "windows-core"; - packageId = "windows-core 0.61.0"; + packageId = "windows-core"; target = { target, features }: ("windows" == target."os" or null); } ]; @@ -9953,707 +9948,7 @@ rec { ]; }; - "windows" = rec { - crateName = "windows"; - version = "0.52.0"; - edition = "2021"; - sha256 = "1gnh210qjlprpd1szaq04rjm1zqgdm9j7l9absg0kawi2rwm72p4"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows-core"; - packageId = "windows-core 0.52.0"; - } - { - name = "windows-targets"; - packageId = "windows-targets"; - } - ]; - features = { - "AI_MachineLearning" = [ "AI" ]; - "ApplicationModel_Activation" = [ "ApplicationModel" ]; - "ApplicationModel_AppExtensions" = [ "ApplicationModel" ]; - "ApplicationModel_AppService" = [ "ApplicationModel" ]; - "ApplicationModel_Appointments" = [ "ApplicationModel" ]; - "ApplicationModel_Appointments_AppointmentsProvider" = [ "ApplicationModel_Appointments" ]; - "ApplicationModel_Appointments_DataProvider" = [ "ApplicationModel_Appointments" ]; - "ApplicationModel_Background" = [ "ApplicationModel" ]; - "ApplicationModel_Calls" = [ "ApplicationModel" ]; - "ApplicationModel_Calls_Background" = [ "ApplicationModel_Calls" ]; - "ApplicationModel_Calls_Provider" = [ "ApplicationModel_Calls" ]; - "ApplicationModel_Chat" = [ "ApplicationModel" ]; - "ApplicationModel_CommunicationBlocking" = [ "ApplicationModel" ]; - "ApplicationModel_Contacts" = [ "ApplicationModel" ]; - "ApplicationModel_Contacts_DataProvider" = [ "ApplicationModel_Contacts" ]; - "ApplicationModel_Contacts_Provider" = [ "ApplicationModel_Contacts" ]; - "ApplicationModel_ConversationalAgent" = [ "ApplicationModel" ]; - "ApplicationModel_Core" = [ "ApplicationModel" ]; - "ApplicationModel_DataTransfer" = [ "ApplicationModel" ]; - "ApplicationModel_DataTransfer_DragDrop" = [ "ApplicationModel_DataTransfer" ]; - "ApplicationModel_DataTransfer_DragDrop_Core" = [ "ApplicationModel_DataTransfer_DragDrop" ]; - "ApplicationModel_DataTransfer_ShareTarget" = [ "ApplicationModel_DataTransfer" ]; - "ApplicationModel_Email" = [ "ApplicationModel" ]; - "ApplicationModel_Email_DataProvider" = [ "ApplicationModel_Email" ]; - "ApplicationModel_ExtendedExecution" = [ "ApplicationModel" ]; - "ApplicationModel_ExtendedExecution_Foreground" = [ "ApplicationModel_ExtendedExecution" ]; - "ApplicationModel_Holographic" = [ "ApplicationModel" ]; - "ApplicationModel_LockScreen" = [ "ApplicationModel" ]; - "ApplicationModel_Payments" = [ "ApplicationModel" ]; - "ApplicationModel_Payments_Provider" = [ "ApplicationModel_Payments" ]; - "ApplicationModel_Preview" = [ "ApplicationModel" ]; - "ApplicationModel_Preview_Holographic" = [ "ApplicationModel_Preview" ]; - "ApplicationModel_Preview_InkWorkspace" = [ "ApplicationModel_Preview" ]; - "ApplicationModel_Preview_Notes" = [ "ApplicationModel_Preview" ]; - "ApplicationModel_Resources" = [ "ApplicationModel" ]; - "ApplicationModel_Resources_Core" = [ "ApplicationModel_Resources" ]; - "ApplicationModel_Resources_Management" = [ "ApplicationModel_Resources" ]; - "ApplicationModel_Search" = [ "ApplicationModel" ]; - "ApplicationModel_Search_Core" = [ "ApplicationModel_Search" ]; - "ApplicationModel_Store" = [ "ApplicationModel" ]; - "ApplicationModel_Store_LicenseManagement" = [ "ApplicationModel_Store" ]; - "ApplicationModel_Store_Preview" = [ "ApplicationModel_Store" ]; - "ApplicationModel_Store_Preview_InstallControl" = [ "ApplicationModel_Store_Preview" ]; - "ApplicationModel_UserActivities" = [ "ApplicationModel" ]; - "ApplicationModel_UserActivities_Core" = [ "ApplicationModel_UserActivities" ]; - "ApplicationModel_UserDataAccounts" = [ "ApplicationModel" ]; - "ApplicationModel_UserDataAccounts_Provider" = [ "ApplicationModel_UserDataAccounts" ]; - "ApplicationModel_UserDataAccounts_SystemAccess" = [ "ApplicationModel_UserDataAccounts" ]; - "ApplicationModel_UserDataTasks" = [ "ApplicationModel" ]; - "ApplicationModel_UserDataTasks_DataProvider" = [ "ApplicationModel_UserDataTasks" ]; - "ApplicationModel_VoiceCommands" = [ "ApplicationModel" ]; - "ApplicationModel_Wallet" = [ "ApplicationModel" ]; - "ApplicationModel_Wallet_System" = [ "ApplicationModel_Wallet" ]; - "Data_Html" = [ "Data" ]; - "Data_Json" = [ "Data" ]; - "Data_Pdf" = [ "Data" ]; - "Data_Text" = [ "Data" ]; - "Data_Xml" = [ "Data" ]; - "Data_Xml_Dom" = [ "Data_Xml" ]; - "Data_Xml_Xsl" = [ "Data_Xml" ]; - "Devices_Adc" = [ "Devices" ]; - "Devices_Adc_Provider" = [ "Devices_Adc" ]; - "Devices_Background" = [ "Devices" ]; - "Devices_Bluetooth" = [ "Devices" ]; - "Devices_Bluetooth_Advertisement" = [ "Devices_Bluetooth" ]; - "Devices_Bluetooth_Background" = [ "Devices_Bluetooth" ]; - "Devices_Bluetooth_GenericAttributeProfile" = [ "Devices_Bluetooth" ]; - "Devices_Bluetooth_Rfcomm" = [ "Devices_Bluetooth" ]; - "Devices_Custom" = [ "Devices" ]; - "Devices_Display" = [ "Devices" ]; - "Devices_Display_Core" = [ "Devices_Display" ]; - "Devices_Enumeration" = [ "Devices" ]; - "Devices_Enumeration_Pnp" = [ "Devices_Enumeration" ]; - "Devices_Geolocation" = [ "Devices" ]; - "Devices_Geolocation_Geofencing" = [ "Devices_Geolocation" ]; - "Devices_Geolocation_Provider" = [ "Devices_Geolocation" ]; - "Devices_Gpio" = [ "Devices" ]; - "Devices_Gpio_Provider" = [ "Devices_Gpio" ]; - "Devices_Haptics" = [ "Devices" ]; - "Devices_HumanInterfaceDevice" = [ "Devices" ]; - "Devices_I2c" = [ "Devices" ]; - "Devices_I2c_Provider" = [ "Devices_I2c" ]; - "Devices_Input" = [ "Devices" ]; - "Devices_Input_Preview" = [ "Devices_Input" ]; - "Devices_Lights" = [ "Devices" ]; - "Devices_Lights_Effects" = [ "Devices_Lights" ]; - "Devices_Midi" = [ "Devices" ]; - "Devices_PointOfService" = [ "Devices" ]; - "Devices_PointOfService_Provider" = [ "Devices_PointOfService" ]; - "Devices_Portable" = [ "Devices" ]; - "Devices_Power" = [ "Devices" ]; - "Devices_Printers" = [ "Devices" ]; - "Devices_Printers_Extensions" = [ "Devices_Printers" ]; - "Devices_Pwm" = [ "Devices" ]; - "Devices_Pwm_Provider" = [ "Devices_Pwm" ]; - "Devices_Radios" = [ "Devices" ]; - "Devices_Scanners" = [ "Devices" ]; - "Devices_Sensors" = [ "Devices" ]; - "Devices_Sensors_Custom" = [ "Devices_Sensors" ]; - "Devices_SerialCommunication" = [ "Devices" ]; - "Devices_SmartCards" = [ "Devices" ]; - "Devices_Sms" = [ "Devices" ]; - "Devices_Spi" = [ "Devices" ]; - "Devices_Spi_Provider" = [ "Devices_Spi" ]; - "Devices_Usb" = [ "Devices" ]; - "Devices_WiFi" = [ "Devices" ]; - "Devices_WiFiDirect" = [ "Devices" ]; - "Devices_WiFiDirect_Services" = [ "Devices_WiFiDirect" ]; - "Embedded_DeviceLockdown" = [ "Embedded" ]; - "Foundation_Collections" = [ "Foundation" ]; - "Foundation_Diagnostics" = [ "Foundation" ]; - "Foundation_Metadata" = [ "Foundation" ]; - "Foundation_Numerics" = [ "Foundation" ]; - "Gaming_Input" = [ "Gaming" ]; - "Gaming_Input_Custom" = [ "Gaming_Input" ]; - "Gaming_Input_ForceFeedback" = [ "Gaming_Input" ]; - "Gaming_Input_Preview" = [ "Gaming_Input" ]; - "Gaming_Preview" = [ "Gaming" ]; - "Gaming_Preview_GamesEnumeration" = [ "Gaming_Preview" ]; - "Gaming_UI" = [ "Gaming" ]; - "Gaming_XboxLive" = [ "Gaming" ]; - "Gaming_XboxLive_Storage" = [ "Gaming_XboxLive" ]; - "Globalization_Collation" = [ "Globalization" ]; - "Globalization_DateTimeFormatting" = [ "Globalization" ]; - "Globalization_Fonts" = [ "Globalization" ]; - "Globalization_NumberFormatting" = [ "Globalization" ]; - "Globalization_PhoneNumberFormatting" = [ "Globalization" ]; - "Graphics_Capture" = [ "Graphics" ]; - "Graphics_DirectX" = [ "Graphics" ]; - "Graphics_DirectX_Direct3D11" = [ "Graphics_DirectX" ]; - "Graphics_Display" = [ "Graphics" ]; - "Graphics_Display_Core" = [ "Graphics_Display" ]; - "Graphics_Effects" = [ "Graphics" ]; - "Graphics_Holographic" = [ "Graphics" ]; - "Graphics_Imaging" = [ "Graphics" ]; - "Graphics_Printing" = [ "Graphics" ]; - "Graphics_Printing3D" = [ "Graphics" ]; - "Graphics_Printing_OptionDetails" = [ "Graphics_Printing" ]; - "Graphics_Printing_PrintSupport" = [ "Graphics_Printing" ]; - "Graphics_Printing_PrintTicket" = [ "Graphics_Printing" ]; - "Graphics_Printing_Workflow" = [ "Graphics_Printing" ]; - "Management_Core" = [ "Management" ]; - "Management_Deployment" = [ "Management" ]; - "Management_Deployment_Preview" = [ "Management_Deployment" ]; - "Management_Policies" = [ "Management" ]; - "Management_Update" = [ "Management" ]; - "Management_Workplace" = [ "Management" ]; - "Media_AppBroadcasting" = [ "Media" ]; - "Media_AppRecording" = [ "Media" ]; - "Media_Audio" = [ "Media" ]; - "Media_Capture" = [ "Media" ]; - "Media_Capture_Core" = [ "Media_Capture" ]; - "Media_Capture_Frames" = [ "Media_Capture" ]; - "Media_Casting" = [ "Media" ]; - "Media_ClosedCaptioning" = [ "Media" ]; - "Media_ContentRestrictions" = [ "Media" ]; - "Media_Control" = [ "Media" ]; - "Media_Core" = [ "Media" ]; - "Media_Core_Preview" = [ "Media_Core" ]; - "Media_Devices" = [ "Media" ]; - "Media_Devices_Core" = [ "Media_Devices" ]; - "Media_DialProtocol" = [ "Media" ]; - "Media_Editing" = [ "Media" ]; - "Media_Effects" = [ "Media" ]; - "Media_FaceAnalysis" = [ "Media" ]; - "Media_Import" = [ "Media" ]; - "Media_MediaProperties" = [ "Media" ]; - "Media_Miracast" = [ "Media" ]; - "Media_Ocr" = [ "Media" ]; - "Media_PlayTo" = [ "Media" ]; - "Media_Playback" = [ "Media" ]; - "Media_Playlists" = [ "Media" ]; - "Media_Protection" = [ "Media" ]; - "Media_Protection_PlayReady" = [ "Media_Protection" ]; - "Media_Render" = [ "Media" ]; - "Media_SpeechRecognition" = [ "Media" ]; - "Media_SpeechSynthesis" = [ "Media" ]; - "Media_Streaming" = [ "Media" ]; - "Media_Streaming_Adaptive" = [ "Media_Streaming" ]; - "Media_Transcoding" = [ "Media" ]; - "Networking_BackgroundTransfer" = [ "Networking" ]; - "Networking_Connectivity" = [ "Networking" ]; - "Networking_NetworkOperators" = [ "Networking" ]; - "Networking_Proximity" = [ "Networking" ]; - "Networking_PushNotifications" = [ "Networking" ]; - "Networking_ServiceDiscovery" = [ "Networking" ]; - "Networking_ServiceDiscovery_Dnssd" = [ "Networking_ServiceDiscovery" ]; - "Networking_Sockets" = [ "Networking" ]; - "Networking_Vpn" = [ "Networking" ]; - "Networking_XboxLive" = [ "Networking" ]; - "Perception_Automation" = [ "Perception" ]; - "Perception_Automation_Core" = [ "Perception_Automation" ]; - "Perception_People" = [ "Perception" ]; - "Perception_Spatial" = [ "Perception" ]; - "Perception_Spatial_Preview" = [ "Perception_Spatial" ]; - "Perception_Spatial_Surfaces" = [ "Perception_Spatial" ]; - "Phone_ApplicationModel" = [ "Phone" ]; - "Phone_Devices" = [ "Phone" ]; - "Phone_Devices_Notification" = [ "Phone_Devices" ]; - "Phone_Devices_Power" = [ "Phone_Devices" ]; - "Phone_Management" = [ "Phone" ]; - "Phone_Management_Deployment" = [ "Phone_Management" ]; - "Phone_Media" = [ "Phone" ]; - "Phone_Media_Devices" = [ "Phone_Media" ]; - "Phone_Notification" = [ "Phone" ]; - "Phone_Notification_Management" = [ "Phone_Notification" ]; - "Phone_PersonalInformation" = [ "Phone" ]; - "Phone_PersonalInformation_Provisioning" = [ "Phone_PersonalInformation" ]; - "Phone_Speech" = [ "Phone" ]; - "Phone_Speech_Recognition" = [ "Phone_Speech" ]; - "Phone_StartScreen" = [ "Phone" ]; - "Phone_System" = [ "Phone" ]; - "Phone_System_Power" = [ "Phone_System" ]; - "Phone_System_Profile" = [ "Phone_System" ]; - "Phone_System_UserProfile" = [ "Phone_System" ]; - "Phone_System_UserProfile_GameServices" = [ "Phone_System_UserProfile" ]; - "Phone_System_UserProfile_GameServices_Core" = [ "Phone_System_UserProfile_GameServices" ]; - "Phone_UI" = [ "Phone" ]; - "Phone_UI_Input" = [ "Phone_UI" ]; - "Security_Authentication" = [ "Security" ]; - "Security_Authentication_Identity" = [ "Security_Authentication" ]; - "Security_Authentication_Identity_Core" = [ "Security_Authentication_Identity" ]; - "Security_Authentication_OnlineId" = [ "Security_Authentication" ]; - "Security_Authentication_Web" = [ "Security_Authentication" ]; - "Security_Authentication_Web_Core" = [ "Security_Authentication_Web" ]; - "Security_Authentication_Web_Provider" = [ "Security_Authentication_Web" ]; - "Security_Authorization" = [ "Security" ]; - "Security_Authorization_AppCapabilityAccess" = [ "Security_Authorization" ]; - "Security_Credentials" = [ "Security" ]; - "Security_Credentials_UI" = [ "Security_Credentials" ]; - "Security_Cryptography" = [ "Security" ]; - "Security_Cryptography_Certificates" = [ "Security_Cryptography" ]; - "Security_Cryptography_Core" = [ "Security_Cryptography" ]; - "Security_Cryptography_DataProtection" = [ "Security_Cryptography" ]; - "Security_DataProtection" = [ "Security" ]; - "Security_EnterpriseData" = [ "Security" ]; - "Security_ExchangeActiveSyncProvisioning" = [ "Security" ]; - "Security_Isolation" = [ "Security" ]; - "Services_Maps" = [ "Services" ]; - "Services_Maps_Guidance" = [ "Services_Maps" ]; - "Services_Maps_LocalSearch" = [ "Services_Maps" ]; - "Services_Maps_OfflineMaps" = [ "Services_Maps" ]; - "Services_Store" = [ "Services" ]; - "Services_TargetedContent" = [ "Services" ]; - "Storage_AccessCache" = [ "Storage" ]; - "Storage_BulkAccess" = [ "Storage" ]; - "Storage_Compression" = [ "Storage" ]; - "Storage_FileProperties" = [ "Storage" ]; - "Storage_Pickers" = [ "Storage" ]; - "Storage_Pickers_Provider" = [ "Storage_Pickers" ]; - "Storage_Provider" = [ "Storage" ]; - "Storage_Search" = [ "Storage" ]; - "Storage_Streams" = [ "Storage" ]; - "System_Diagnostics" = [ "System" ]; - "System_Diagnostics_DevicePortal" = [ "System_Diagnostics" ]; - "System_Diagnostics_Telemetry" = [ "System_Diagnostics" ]; - "System_Diagnostics_TraceReporting" = [ "System_Diagnostics" ]; - "System_Display" = [ "System" ]; - "System_Implementation" = [ "System" ]; - "System_Implementation_FileExplorer" = [ "System_Implementation" ]; - "System_Inventory" = [ "System" ]; - "System_Power" = [ "System" ]; - "System_Profile" = [ "System" ]; - "System_Profile_SystemManufacturers" = [ "System_Profile" ]; - "System_RemoteDesktop" = [ "System" ]; - "System_RemoteDesktop_Input" = [ "System_RemoteDesktop" ]; - "System_RemoteSystems" = [ "System" ]; - "System_Threading" = [ "System" ]; - "System_Threading_Core" = [ "System_Threading" ]; - "System_Update" = [ "System" ]; - "System_UserProfile" = [ "System" ]; - "UI_Accessibility" = [ "UI" ]; - "UI_ApplicationSettings" = [ "UI" ]; - "UI_Composition" = [ "UI" ]; - "UI_Composition_Core" = [ "UI_Composition" ]; - "UI_Composition_Desktop" = [ "UI_Composition" ]; - "UI_Composition_Diagnostics" = [ "UI_Composition" ]; - "UI_Composition_Effects" = [ "UI_Composition" ]; - "UI_Composition_Interactions" = [ "UI_Composition" ]; - "UI_Composition_Scenes" = [ "UI_Composition" ]; - "UI_Core" = [ "UI" ]; - "UI_Core_AnimationMetrics" = [ "UI_Core" ]; - "UI_Core_Preview" = [ "UI_Core" ]; - "UI_Input" = [ "UI" ]; - "UI_Input_Core" = [ "UI_Input" ]; - "UI_Input_Inking" = [ "UI_Input" ]; - "UI_Input_Inking_Analysis" = [ "UI_Input_Inking" ]; - "UI_Input_Inking_Core" = [ "UI_Input_Inking" ]; - "UI_Input_Inking_Preview" = [ "UI_Input_Inking" ]; - "UI_Input_Preview" = [ "UI_Input" ]; - "UI_Input_Preview_Injection" = [ "UI_Input_Preview" ]; - "UI_Input_Spatial" = [ "UI_Input" ]; - "UI_Notifications" = [ "UI" ]; - "UI_Notifications_Management" = [ "UI_Notifications" ]; - "UI_Popups" = [ "UI" ]; - "UI_Shell" = [ "UI" ]; - "UI_StartScreen" = [ "UI" ]; - "UI_Text" = [ "UI" ]; - "UI_Text_Core" = [ "UI_Text" ]; - "UI_UIAutomation" = [ "UI" ]; - "UI_UIAutomation_Core" = [ "UI_UIAutomation" ]; - "UI_ViewManagement" = [ "UI" ]; - "UI_ViewManagement_Core" = [ "UI_ViewManagement" ]; - "UI_WebUI" = [ "UI" ]; - "UI_WebUI_Core" = [ "UI_WebUI" ]; - "UI_WindowManagement" = [ "UI" ]; - "UI_WindowManagement_Preview" = [ "UI_WindowManagement" ]; - "Wdk_Foundation" = [ "Wdk" ]; - "Wdk_Graphics" = [ "Wdk" ]; - "Wdk_Graphics_Direct3D" = [ "Wdk_Graphics" ]; - "Wdk_Storage" = [ "Wdk" ]; - "Wdk_Storage_FileSystem" = [ "Wdk_Storage" ]; - "Wdk_Storage_FileSystem_Minifilters" = [ "Wdk_Storage_FileSystem" ]; - "Wdk_System" = [ "Wdk" ]; - "Wdk_System_IO" = [ "Wdk_System" ]; - "Wdk_System_OfflineRegistry" = [ "Wdk_System" ]; - "Wdk_System_Registry" = [ "Wdk_System" ]; - "Wdk_System_SystemInformation" = [ "Wdk_System" ]; - "Wdk_System_SystemServices" = [ "Wdk_System" ]; - "Wdk_System_Threading" = [ "Wdk_System" ]; - "Web_AtomPub" = [ "Web" ]; - "Web_Http" = [ "Web" ]; - "Web_Http_Diagnostics" = [ "Web_Http" ]; - "Web_Http_Filters" = [ "Web_Http" ]; - "Web_Http_Headers" = [ "Web_Http" ]; - "Web_Syndication" = [ "Web" ]; - "Web_UI" = [ "Web" ]; - "Web_UI_Interop" = [ "Web_UI" ]; - "Win32_AI" = [ "Win32" ]; - "Win32_AI_MachineLearning" = [ "Win32_AI" ]; - "Win32_AI_MachineLearning_DirectML" = [ "Win32_AI_MachineLearning" ]; - "Win32_AI_MachineLearning_WinML" = [ "Win32_AI_MachineLearning" ]; - "Win32_Data" = [ "Win32" ]; - "Win32_Data_HtmlHelp" = [ "Win32_Data" ]; - "Win32_Data_RightsManagement" = [ "Win32_Data" ]; - "Win32_Data_Xml" = [ "Win32_Data" ]; - "Win32_Data_Xml_MsXml" = [ "Win32_Data_Xml" ]; - "Win32_Data_Xml_XmlLite" = [ "Win32_Data_Xml" ]; - "Win32_Devices" = [ "Win32" ]; - "Win32_Devices_AllJoyn" = [ "Win32_Devices" ]; - "Win32_Devices_BiometricFramework" = [ "Win32_Devices" ]; - "Win32_Devices_Bluetooth" = [ "Win32_Devices" ]; - "Win32_Devices_Communication" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceAccess" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceQuery" = [ "Win32_Devices" ]; - "Win32_Devices_Display" = [ "Win32_Devices" ]; - "Win32_Devices_Enumeration" = [ "Win32_Devices" ]; - "Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ]; - "Win32_Devices_Fax" = [ "Win32_Devices" ]; - "Win32_Devices_FunctionDiscovery" = [ "Win32_Devices" ]; - "Win32_Devices_Geolocation" = [ "Win32_Devices" ]; - "Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ]; - "Win32_Devices_ImageAcquisition" = [ "Win32_Devices" ]; - "Win32_Devices_PortableDevices" = [ "Win32_Devices" ]; - "Win32_Devices_Properties" = [ "Win32_Devices" ]; - "Win32_Devices_Pwm" = [ "Win32_Devices" ]; - "Win32_Devices_Sensors" = [ "Win32_Devices" ]; - "Win32_Devices_SerialCommunication" = [ "Win32_Devices" ]; - "Win32_Devices_Tapi" = [ "Win32_Devices" ]; - "Win32_Devices_Usb" = [ "Win32_Devices" ]; - "Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ]; - "Win32_Foundation" = [ "Win32" ]; - "Win32_Gaming" = [ "Win32" ]; - "Win32_Globalization" = [ "Win32" ]; - "Win32_Graphics" = [ "Win32" ]; - "Win32_Graphics_CompositionSwapchain" = [ "Win32_Graphics" ]; - "Win32_Graphics_DXCore" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct2D" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct2D_Common" = [ "Win32_Graphics_Direct2D" ]; - "Win32_Graphics_Direct3D" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D10" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D11" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D11on12" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D12" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D9" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D9on12" = [ "Win32_Graphics" ]; - "Win32_Graphics_Direct3D_Dxc" = [ "Win32_Graphics_Direct3D" ]; - "Win32_Graphics_Direct3D_Fxc" = [ "Win32_Graphics_Direct3D" ]; - "Win32_Graphics_DirectComposition" = [ "Win32_Graphics" ]; - "Win32_Graphics_DirectDraw" = [ "Win32_Graphics" ]; - "Win32_Graphics_DirectManipulation" = [ "Win32_Graphics" ]; - "Win32_Graphics_DirectWrite" = [ "Win32_Graphics" ]; - "Win32_Graphics_Dwm" = [ "Win32_Graphics" ]; - "Win32_Graphics_Dxgi" = [ "Win32_Graphics" ]; - "Win32_Graphics_Dxgi_Common" = [ "Win32_Graphics_Dxgi" ]; - "Win32_Graphics_Gdi" = [ "Win32_Graphics" ]; - "Win32_Graphics_GdiPlus" = [ "Win32_Graphics" ]; - "Win32_Graphics_Hlsl" = [ "Win32_Graphics" ]; - "Win32_Graphics_Imaging" = [ "Win32_Graphics" ]; - "Win32_Graphics_Imaging_D2D" = [ "Win32_Graphics_Imaging" ]; - "Win32_Graphics_OpenGL" = [ "Win32_Graphics" ]; - "Win32_Graphics_Printing" = [ "Win32_Graphics" ]; - "Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ]; - "Win32_Management" = [ "Win32" ]; - "Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ]; - "Win32_Media" = [ "Win32" ]; - "Win32_Media_Audio" = [ "Win32_Media" ]; - "Win32_Media_Audio_Apo" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_DirectMusic" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_DirectSound" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_Endpoints" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_XAudio2" = [ "Win32_Media_Audio" ]; - "Win32_Media_DeviceManager" = [ "Win32_Media" ]; - "Win32_Media_DirectShow" = [ "Win32_Media" ]; - "Win32_Media_DirectShow_Tv" = [ "Win32_Media_DirectShow" ]; - "Win32_Media_DirectShow_Xml" = [ "Win32_Media_DirectShow" ]; - "Win32_Media_DxMediaObjects" = [ "Win32_Media" ]; - "Win32_Media_KernelStreaming" = [ "Win32_Media" ]; - "Win32_Media_LibrarySharingServices" = [ "Win32_Media" ]; - "Win32_Media_MediaFoundation" = [ "Win32_Media" ]; - "Win32_Media_MediaPlayer" = [ "Win32_Media" ]; - "Win32_Media_Multimedia" = [ "Win32_Media" ]; - "Win32_Media_PictureAcquisition" = [ "Win32_Media" ]; - "Win32_Media_Speech" = [ "Win32_Media" ]; - "Win32_Media_Streaming" = [ "Win32_Media" ]; - "Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ]; - "Win32_NetworkManagement" = [ "Win32" ]; - "Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_MobileBroadband" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetworkPolicyServer" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsConnectNow" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ]; - "Win32_Networking" = [ "Win32" ]; - "Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ]; - "Win32_Networking_BackgroundIntelligentTransferService" = [ "Win32_Networking" ]; - "Win32_Networking_Clustering" = [ "Win32_Networking" ]; - "Win32_Networking_HttpServer" = [ "Win32_Networking" ]; - "Win32_Networking_Ldap" = [ "Win32_Networking" ]; - "Win32_Networking_NetworkListManager" = [ "Win32_Networking" ]; - "Win32_Networking_RemoteDifferentialCompression" = [ "Win32_Networking" ]; - "Win32_Networking_WebSocket" = [ "Win32_Networking" ]; - "Win32_Networking_WinHttp" = [ "Win32_Networking" ]; - "Win32_Networking_WinInet" = [ "Win32_Networking" ]; - "Win32_Networking_WinSock" = [ "Win32_Networking" ]; - "Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ]; - "Win32_Security" = [ "Win32" ]; - "Win32_Security_AppLocker" = [ "Win32_Security" ]; - "Win32_Security_Authentication" = [ "Win32_Security" ]; - "Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ]; - "Win32_Security_Authentication_Identity_Provider" = [ "Win32_Security_Authentication_Identity" ]; - "Win32_Security_Authorization" = [ "Win32_Security" ]; - "Win32_Security_Authorization_UI" = [ "Win32_Security_Authorization" ]; - "Win32_Security_ConfigurationSnapin" = [ "Win32_Security" ]; - "Win32_Security_Credentials" = [ "Win32_Security" ]; - "Win32_Security_Cryptography" = [ "Win32_Security" ]; - "Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ]; - "Win32_Security_DirectoryServices" = [ "Win32_Security" ]; - "Win32_Security_EnterpriseData" = [ "Win32_Security" ]; - "Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ]; - "Win32_Security_Isolation" = [ "Win32_Security" ]; - "Win32_Security_LicenseProtection" = [ "Win32_Security" ]; - "Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ]; - "Win32_Security_Tpm" = [ "Win32_Security" ]; - "Win32_Security_WinTrust" = [ "Win32_Security" ]; - "Win32_Security_WinWlx" = [ "Win32_Security" ]; - "Win32_Storage" = [ "Win32" ]; - "Win32_Storage_Cabinets" = [ "Win32_Storage" ]; - "Win32_Storage_CloudFilters" = [ "Win32_Storage" ]; - "Win32_Storage_Compression" = [ "Win32_Storage" ]; - "Win32_Storage_DataDeduplication" = [ "Win32_Storage" ]; - "Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_EnhancedStorage" = [ "Win32_Storage" ]; - "Win32_Storage_FileHistory" = [ "Win32_Storage" ]; - "Win32_Storage_FileServerResourceManager" = [ "Win32_Storage" ]; - "Win32_Storage_FileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_Imapi" = [ "Win32_Storage" ]; - "Win32_Storage_IndexServer" = [ "Win32_Storage" ]; - "Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ]; - "Win32_Storage_IscsiDisc" = [ "Win32_Storage" ]; - "Win32_Storage_Jet" = [ "Win32_Storage" ]; - "Win32_Storage_Nvme" = [ "Win32_Storage" ]; - "Win32_Storage_OfflineFiles" = [ "Win32_Storage" ]; - "Win32_Storage_OperationRecorder" = [ "Win32_Storage" ]; - "Win32_Storage_Packaging" = [ "Win32_Storage" ]; - "Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ]; - "Win32_Storage_Packaging_Opc" = [ "Win32_Storage_Packaging" ]; - "Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_StructuredStorage" = [ "Win32_Storage" ]; - "Win32_Storage_Vhd" = [ "Win32_Storage" ]; - "Win32_Storage_VirtualDiskService" = [ "Win32_Storage" ]; - "Win32_Storage_Vss" = [ "Win32_Storage" ]; - "Win32_Storage_Xps" = [ "Win32_Storage" ]; - "Win32_Storage_Xps_Printing" = [ "Win32_Storage_Xps" ]; - "Win32_System" = [ "Win32" ]; - "Win32_System_AddressBook" = [ "Win32_System" ]; - "Win32_System_Antimalware" = [ "Win32_System" ]; - "Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ]; - "Win32_System_ApplicationVerifier" = [ "Win32_System" ]; - "Win32_System_AssessmentTool" = [ "Win32_System" ]; - "Win32_System_ClrHosting" = [ "Win32_System" ]; - "Win32_System_Com" = [ "Win32_System" ]; - "Win32_System_Com_CallObj" = [ "Win32_System_Com" ]; - "Win32_System_Com_ChannelCredentials" = [ "Win32_System_Com" ]; - "Win32_System_Com_Events" = [ "Win32_System_Com" ]; - "Win32_System_Com_Marshal" = [ "Win32_System_Com" ]; - "Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ]; - "Win32_System_Com_UI" = [ "Win32_System_Com" ]; - "Win32_System_Com_Urlmon" = [ "Win32_System_Com" ]; - "Win32_System_ComponentServices" = [ "Win32_System" ]; - "Win32_System_Console" = [ "Win32_System" ]; - "Win32_System_Contacts" = [ "Win32_System" ]; - "Win32_System_CorrelationVector" = [ "Win32_System" ]; - "Win32_System_DataExchange" = [ "Win32_System" ]; - "Win32_System_DeploymentServices" = [ "Win32_System" ]; - "Win32_System_DesktopSharing" = [ "Win32_System" ]; - "Win32_System_DeveloperLicensing" = [ "Win32_System" ]; - "Win32_System_Diagnostics" = [ "Win32_System" ]; - "Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ClrProfiling" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_Debug_ActiveScript" = [ "Win32_System_Diagnostics_Debug" ]; - "Win32_System_Diagnostics_Debug_Extensions" = [ "Win32_System_Diagnostics_Debug" ]; - "Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ]; - "Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ]; - "Win32_System_Environment" = [ "Win32_System" ]; - "Win32_System_ErrorReporting" = [ "Win32_System" ]; - "Win32_System_EventCollector" = [ "Win32_System" ]; - "Win32_System_EventLog" = [ "Win32_System" ]; - "Win32_System_EventNotificationService" = [ "Win32_System" ]; - "Win32_System_GroupPolicy" = [ "Win32_System" ]; - "Win32_System_HostCompute" = [ "Win32_System" ]; - "Win32_System_HostComputeNetwork" = [ "Win32_System" ]; - "Win32_System_HostComputeSystem" = [ "Win32_System" ]; - "Win32_System_Hypervisor" = [ "Win32_System" ]; - "Win32_System_IO" = [ "Win32_System" ]; - "Win32_System_Iis" = [ "Win32_System" ]; - "Win32_System_Ioctl" = [ "Win32_System" ]; - "Win32_System_JobObjects" = [ "Win32_System" ]; - "Win32_System_Js" = [ "Win32_System" ]; - "Win32_System_Kernel" = [ "Win32_System" ]; - "Win32_System_LibraryLoader" = [ "Win32_System" ]; - "Win32_System_Mailslots" = [ "Win32_System" ]; - "Win32_System_Mapi" = [ "Win32_System" ]; - "Win32_System_Memory" = [ "Win32_System" ]; - "Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ]; - "Win32_System_MessageQueuing" = [ "Win32_System" ]; - "Win32_System_MixedReality" = [ "Win32_System" ]; - "Win32_System_Mmc" = [ "Win32_System" ]; - "Win32_System_Ole" = [ "Win32_System" ]; - "Win32_System_ParentalControls" = [ "Win32_System" ]; - "Win32_System_PasswordManagement" = [ "Win32_System" ]; - "Win32_System_Performance" = [ "Win32_System" ]; - "Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ]; - "Win32_System_Pipes" = [ "Win32_System" ]; - "Win32_System_Power" = [ "Win32_System" ]; - "Win32_System_ProcessStatus" = [ "Win32_System" ]; - "Win32_System_RealTimeCommunications" = [ "Win32_System" ]; - "Win32_System_Recovery" = [ "Win32_System" ]; - "Win32_System_Registry" = [ "Win32_System" ]; - "Win32_System_RemoteAssistance" = [ "Win32_System" ]; - "Win32_System_RemoteDesktop" = [ "Win32_System" ]; - "Win32_System_RemoteManagement" = [ "Win32_System" ]; - "Win32_System_RestartManager" = [ "Win32_System" ]; - "Win32_System_Restore" = [ "Win32_System" ]; - "Win32_System_Rpc" = [ "Win32_System" ]; - "Win32_System_Search" = [ "Win32_System" ]; - "Win32_System_Search_Common" = [ "Win32_System_Search" ]; - "Win32_System_SecurityCenter" = [ "Win32_System" ]; - "Win32_System_ServerBackup" = [ "Win32_System" ]; - "Win32_System_Services" = [ "Win32_System" ]; - "Win32_System_SettingsManagementInfrastructure" = [ "Win32_System" ]; - "Win32_System_SetupAndMigration" = [ "Win32_System" ]; - "Win32_System_Shutdown" = [ "Win32_System" ]; - "Win32_System_SideShow" = [ "Win32_System" ]; - "Win32_System_StationsAndDesktops" = [ "Win32_System" ]; - "Win32_System_SubsystemForLinux" = [ "Win32_System" ]; - "Win32_System_SystemInformation" = [ "Win32_System" ]; - "Win32_System_SystemServices" = [ "Win32_System" ]; - "Win32_System_TaskScheduler" = [ "Win32_System" ]; - "Win32_System_Threading" = [ "Win32_System" ]; - "Win32_System_Time" = [ "Win32_System" ]; - "Win32_System_TpmBaseServices" = [ "Win32_System" ]; - "Win32_System_TransactionServer" = [ "Win32_System" ]; - "Win32_System_UpdateAgent" = [ "Win32_System" ]; - "Win32_System_UpdateAssessment" = [ "Win32_System" ]; - "Win32_System_UserAccessLogging" = [ "Win32_System" ]; - "Win32_System_Variant" = [ "Win32_System" ]; - "Win32_System_VirtualDosMachines" = [ "Win32_System" ]; - "Win32_System_WinRT" = [ "Win32_System" ]; - "Win32_System_WinRT_AllJoyn" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Composition" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_CoreInputView" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Direct3D11" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Display" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Graphics" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Graphics_Capture" = [ "Win32_System_WinRT_Graphics" ]; - "Win32_System_WinRT_Graphics_Direct2D" = [ "Win32_System_WinRT_Graphics" ]; - "Win32_System_WinRT_Graphics_Imaging" = [ "Win32_System_WinRT_Graphics" ]; - "Win32_System_WinRT_Holographic" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Isolation" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_ML" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Media" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Metadata" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Pdf" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Printing" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Shell" = [ "Win32_System_WinRT" ]; - "Win32_System_WinRT_Storage" = [ "Win32_System_WinRT" ]; - "Win32_System_WindowsProgramming" = [ "Win32_System" ]; - "Win32_System_WindowsSync" = [ "Win32_System" ]; - "Win32_System_Wmi" = [ "Win32_System" ]; - "Win32_UI" = [ "Win32" ]; - "Win32_UI_Accessibility" = [ "Win32_UI" ]; - "Win32_UI_Animation" = [ "Win32_UI" ]; - "Win32_UI_ColorSystem" = [ "Win32_UI" ]; - "Win32_UI_Controls" = [ "Win32_UI" ]; - "Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ]; - "Win32_UI_Controls_RichEdit" = [ "Win32_UI_Controls" ]; - "Win32_UI_HiDpi" = [ "Win32_UI" ]; - "Win32_UI_Input" = [ "Win32_UI" ]; - "Win32_UI_Input_Ime" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Ink" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Radial" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Touch" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ]; - "Win32_UI_InteractionContext" = [ "Win32_UI" ]; - "Win32_UI_LegacyWindowsEnvironmentFeatures" = [ "Win32_UI" ]; - "Win32_UI_Magnification" = [ "Win32_UI" ]; - "Win32_UI_Notifications" = [ "Win32_UI" ]; - "Win32_UI_Ribbon" = [ "Win32_UI" ]; - "Win32_UI_Shell" = [ "Win32_UI" ]; - "Win32_UI_Shell_Common" = [ "Win32_UI_Shell" ]; - "Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ]; - "Win32_UI_TabletPC" = [ "Win32_UI" ]; - "Win32_UI_TextServices" = [ "Win32_UI" ]; - "Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ]; - "Win32_UI_Wpf" = [ "Win32_UI" ]; - "Win32_Web" = [ "Win32" ]; - "Win32_Web_InternetExplorer" = [ "Win32_Web" ]; - "implement" = [ "windows-implement" "windows-interface" "windows-core/implement" ]; - "windows-implement" = [ "dep:windows-implement" ]; - "windows-interface" = [ "dep:windows-interface" ]; - }; - resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_System" "Win32_System_SystemInformation" "default" ]; - }; - "windows-core 0.52.0" = rec { - crateName = "windows-core"; - version = "0.52.0"; - edition = "2021"; - sha256 = "1nc3qv7sy24x0nlnb32f7alzpd6f72l4p24vl65vydbyil669ark"; - libName = "windows_core"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows-targets"; - packageId = "windows-targets"; - } - ]; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "windows-core 0.61.0" = rec { + "windows-core" = rec { crateName = "windows-core"; version = "0.61.0"; edition = "2021"; @@ -11450,9 +10745,9 @@ rec { }; "winnow" = rec { crateName = "winnow"; - version = "0.7.4"; + version = "0.7.6"; edition = "2021"; - sha256 = "0dmbsz6zfddcgsqzzqxw1h8f7zy19x407g7zl3hyp6vf2m2bb5qf"; + sha256 = "047abhm7qqgc32pf9a2arini5wsrx7p9wsbx3s106jx4pgczrlv3"; dependencies = [ { name = "memchr"; From 06e02defb5f17dd61406619cb81e69954aeda606 Mon Sep 17 00:00:00 2001 From: xeniape Date: Tue, 8 Apr 2025 11:13:14 +0200 Subject: [PATCH 05/15] add changelog entry --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7acb81d..d8692c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- Add rolling upgrade support for upgrades between NiFi 2 versions ([#771]). + +[#771]: https://github.com/stackabletech/nifi-operator/pull/771 + ## [25.3.0] - 2025-03-21 ### Added From 919cb0edfa4357f2ebd914657af79047fd90881c Mon Sep 17 00:00:00 2001 From: xeniape Date: Tue, 8 Apr 2025 11:34:55 +0200 Subject: [PATCH 06/15] add documentation --- docs/modules/nifi/pages/usage_guide/updating.adoc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/modules/nifi/pages/usage_guide/updating.adoc b/docs/modules/nifi/pages/usage_guide/updating.adoc index 9cb7c478..d1bbde6d 100644 --- a/docs/modules/nifi/pages/usage_guide/updating.adoc +++ b/docs/modules/nifi/pages/usage_guide/updating.adoc @@ -17,10 +17,16 @@ spec: <1> Change the NiFi version here -WARNING: NiFi clusters cannot be upgraded or downgraded in a rolling fashion due to a limitation in NiFi. -Any change to the NiFi version in the CRD triggers a full cluster restart with brief downtime. +[WARNING] +==== +NiFi clusters cannot be upgraded or downgraded in a rolling fashion due to a limitation in NiFi prior to version 2. + +When upgrading between NiFi 1 versions or from NiFi 1 to NiFi 2, any change to the NiFi version in the CRD triggers a full cluster restart with brief downtime. However, the Stackable image version can be updated in a rolling manner, provided the NiFi version remains unchanged. +For upgrades between NiFi 2 versions, e.g. from `2.0.0` to `2.2.0`, rolling upgrades are supported. +==== + == NiFi 2.0.0 Before you can upgrade to `2.0.0` you https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance[need to update] to at least version 1.27.x! From 2be12980697885b81ecd0dd06ac7edffa195e4eb Mon Sep 17 00:00:00 2001 From: xeniape Date: Tue, 8 Apr 2025 15:38:59 +0200 Subject: [PATCH 07/15] cargo update and make regenerate-nix --- Cargo.lock | 73 +++++++++++++++++----------- Cargo.nix | 140 +++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 143 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3fac014b..93f0c5bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -358,12 +358,6 @@ version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.10.1" @@ -397,7 +391,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -757,9 +751,9 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -917,8 +911,8 @@ checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -970,7 +964,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.1", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -1364,9 +1358,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1374,9 +1368,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "ipnet" @@ -1772,7 +1766,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.11", + "thiserror 2.0.12", "tracing", ] @@ -1817,7 +1811,7 @@ dependencies = [ "opentelemetry_sdk", "prost", "reqwest", - "thiserror 2.0.11", + "thiserror 2.0.12", "tokio", "tonic", "tracing", @@ -1850,7 +1844,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror 2.0.11", + "thiserror 2.0.12", "tokio", "tokio-stream", "tracing", @@ -2068,7 +2062,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -2551,7 +2545,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.9.0", "itoa", "ryu", "serde", @@ -2719,7 +2713,7 @@ dependencies = [ "educe", "either", "futures 0.3.31", - "indexmap 2.7.1", + "indexmap 2.9.0", "json-patch", "k8s-openapi", "kube", @@ -3052,7 +3046,7 @@ version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.9.0", "toml_datetime", "winnow", ] @@ -3499,8 +3493,11 @@ version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-core", - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings 0.4.0", ] [[package]] @@ -3509,7 +3506,20 @@ version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -3525,7 +3535,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ "windows-result", - "windows-strings", + "windows-strings 0.3.1", "windows-targets 0.53.0", ] @@ -3547,6 +3557,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/Cargo.nix b/Cargo.nix index 66afc7c3..1fcaad70 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -1200,18 +1200,6 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; - "byteorder" = rec { - crateName = "byteorder"; - version = "1.5.0"; - edition = "2021"; - sha256 = "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"; - authors = [ - "Andrew Gallant " - ]; - features = { - "default" = [ "std" ]; - }; - }; "bytes" = rec { crateName = "bytes"; version = "1.10.1"; @@ -1306,8 +1294,8 @@ rec { usesDefaultFeatures = false; } { - name = "windows-targets"; - packageId = "windows-targets 0.52.6"; + name = "windows-link"; + packageId = "windows-link"; optional = true; target = { target, features }: (target."windows" or false); } @@ -2300,9 +2288,9 @@ rec { }; "flate2" = rec { crateName = "flate2"; - version = "1.0.35"; + version = "1.1.1"; edition = "2018"; - sha256 = "0z6h0wa095wncpfngx75wyhyjnqwld7wax401gsvnzjhzgdbydn9"; + sha256 = "1kpycx57dqpkr3vp53b4nq75p9mflh0smxy8hkys4v4ndvkr5vbw"; authors = [ "Alex Crichton " "Josh Triplett " @@ -2843,11 +2831,6 @@ rec { usesDefaultFeatures = false; target = { target, features }: (("wasm32" == target."arch" or null) && ("wasi" == target."os" or null) && ("p2" == target."env" or null)); } - { - name = "windows-targets"; - packageId = "windows-targets 0.52.6"; - target = { target, features }: ((target."windows" or false) && (!("win7" == target."vendor" or null))); - } ]; features = { "rustc-dep-of-std" = [ "dep:compiler_builtins" "dep:core" ]; @@ -2998,7 +2981,7 @@ rec { } { name = "indexmap"; - packageId = "indexmap 2.7.1"; + packageId = "indexmap 2.9.0"; features = [ "std" ]; } { @@ -4342,11 +4325,11 @@ rec { "serde-1" = [ "serde" ]; }; }; - "indexmap 2.7.1" = rec { + "indexmap 2.9.0" = rec { crateName = "indexmap"; - version = "2.7.1"; + version = "2.9.0"; edition = "2021"; - sha256 = "0lmnm1zbr5gq3wic3d8a76gpvampridzwckfl97ckd5m08mrk74c"; + sha256 = "07m15a571yywmvqyb7ms717q9n42b46badbpsmx215jrg7dhv9yf"; dependencies = [ { name = "equivalent"; @@ -5755,7 +5738,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; optional = true; usesDefaultFeatures = false; } @@ -5933,7 +5916,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; usesDefaultFeatures = false; } { @@ -6103,7 +6086,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.11"; + packageId = "thiserror 2.0.12"; usesDefaultFeatures = false; } { @@ -6715,7 +6698,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.96"; + packageId = "syn 2.0.100"; features = [ "extra-traits" ]; } ]; @@ -8334,7 +8317,7 @@ rec { dependencies = [ { name = "indexmap"; - packageId = "indexmap 2.7.1"; + packageId = "indexmap 2.9.0"; } { name = "itoa"; @@ -8869,7 +8852,7 @@ rec { } { name = "indexmap"; - packageId = "indexmap 2.7.1"; + packageId = "indexmap 2.9.0"; } { name = "json-patch"; @@ -9980,7 +9963,7 @@ rec { dependencies = [ { name = "indexmap"; - packageId = "indexmap 2.7.1"; + packageId = "indexmap 2.9.0"; features = [ "std" ]; } { @@ -9999,7 +9982,7 @@ rec { "perf" = [ "dep:kstring" ]; "serde" = [ "dep:serde" "toml_datetime/serde" "dep:serde_spanned" ]; }; - resolvedDefaultFeatures = [ "default" "display" "parse" ]; + resolvedDefaultFeatures = [ "parse" ]; }; "tonic" = rec { crateName = "tonic"; @@ -11996,8 +11979,19 @@ rec { usesDefaultFeatures = false; } { - name = "windows-targets"; - packageId = "windows-targets 0.52.6"; + name = "windows-link"; + packageId = "windows-link"; + usesDefaultFeatures = false; + } + { + name = "windows-result"; + packageId = "windows-result"; + usesDefaultFeatures = false; + } + { + name = "windows-strings"; + packageId = "windows-strings 0.4.0"; + usesDefaultFeatures = false; } ]; features = { @@ -12018,14 +12012,53 @@ rec { ]; dependencies = [ { - name = "windows-targets"; - packageId = "windows-targets 0.52.6"; + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + { + name = "quote"; + packageId = "quote"; + usesDefaultFeatures = false; + } + { + name = "syn"; + packageId = "syn 2.0.100"; + usesDefaultFeatures = false; + features = [ "parsing" "proc-macro" "printing" "full" "clone-impls" ]; } ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" ]; + + }; + "windows-interface" = rec { + crateName = "windows-interface"; + version = "0.59.1"; + edition = "2021"; + sha256 = "1a4zr8740gyzzhq02xgl6vx8l669jwfby57xgf0zmkcdkyv134mx"; + procMacro = true; + libName = "windows_interface"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + { + name = "quote"; + packageId = "quote"; + usesDefaultFeatures = false; + } + { + name = "syn"; + packageId = "syn 2.0.100"; + usesDefaultFeatures = false; + features = [ "parsing" "proc-macro" "printing" "full" "clone-impls" ]; + } + ]; + }; "windows-link" = rec { crateName = "windows-link"; @@ -12055,7 +12088,7 @@ rec { } { name = "windows-strings"; - packageId = "windows-strings"; + packageId = "windows-strings 0.3.1"; usesDefaultFeatures = false; } { @@ -12090,7 +12123,7 @@ rec { }; resolvedDefaultFeatures = [ "std" ]; }; - "windows-strings" = rec { + "windows-strings 0.3.1" = rec { crateName = "windows-strings"; version = "0.3.1"; edition = "2021"; @@ -12110,6 +12143,27 @@ rec { }; resolvedDefaultFeatures = [ "std" ]; }; + "windows-strings 0.4.0" = rec { + crateName = "windows-strings"; + version = "0.4.0"; + edition = "2021"; + sha256 = "15rg6a0ha1d231wwps2qlgyqrgkyj1r8v9vsb8nlbvih4ijajavs"; + libName = "windows_strings"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-link"; + packageId = "windows-link"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; "windows-sys 0.52.0" = rec { crateName = "windows-sys"; version = "0.52.0"; From cea1267816844b01f7ad2cb1dcec784d687430c4 Mon Sep 17 00:00:00 2001 From: xeniape Date: Wed, 9 Apr 2025 13:45:12 +0200 Subject: [PATCH 08/15] fix upgrade intergration tests with custom images --- tests/templates/kuttl/upgrade/02-assert.yaml.j2 | 2 +- tests/templates/kuttl/upgrade/04-assert.yaml.j2 | 4 ++-- tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 | 2 +- tests/templates/kuttl/upgrade/07-assert.yaml.j2 | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/templates/kuttl/upgrade/02-assert.yaml.j2 b/tests/templates/kuttl/upgrade/02-assert.yaml.j2 index 4b1ce7d7..634f281b 100644 --- a/tests/templates/kuttl/upgrade/02-assert.yaml.j2 +++ b/tests/templates/kuttl/upgrade/02-assert.yaml.j2 @@ -16,4 +16,4 @@ kind: NifiCluster metadata: name: test-nifi status: - deployed_version: {{ test_scenario['values']['nifi_old'].split("-")[0] }} + deployed_version: {{ test_scenario['values']['nifi_old'].split(',')[0] }} diff --git a/tests/templates/kuttl/upgrade/04-assert.yaml.j2 b/tests/templates/kuttl/upgrade/04-assert.yaml.j2 index 15d3c962..8bcf1c8e 100644 --- a/tests/templates/kuttl/upgrade/04-assert.yaml.j2 +++ b/tests/templates/kuttl/upgrade/04-assert.yaml.j2 @@ -4,10 +4,10 @@ kind: TestAssert timeout: 300 commands: - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi.py -u admin -p supersecretpassword -n $NAMESPACE -c 3 -{% if test_scenario['values']['nifi_old'].startswith('1.') %} +{% if test_scenario['values']['nifi_old'].split(',')[0].startswith('1.') %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi_metrics.py -n $NAMESPACE {% endif %} -{% if test_scenario['values']['nifi_old'] == '2.0.0' %} +{% if test_scenario['values']['nifi_old'].split(',')[0] == '2.0.0' %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 run json /tmp/generate-and-log-flowfiles.json > /tmp/old_input" {% else %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 run template /tmp/generate-and-log-flowfiles.xml > /tmp/old_input" diff --git a/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 b/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 index 9765caf3..fc488c1e 100644 --- a/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 +++ b/tests/templates/kuttl/upgrade/04-prepare-test-nifi.yaml.j2 @@ -5,7 +5,7 @@ commands: - script: kubectl cp -n $NAMESPACE ./test_nifi_metrics.py test-nifi-0:/tmp - script: kubectl cp -n $NAMESPACE ./test_nifi.py test-nifi-0:/tmp - script: kubectl cp -n $NAMESPACE ./flow.py test-nifi-0:/tmp -{% if test_scenario['values']['nifi_old'] == '2.0.0' %} +{% if test_scenario['values']['nifi_old'].split(',')[0] == '2.0.0' %} - script: kubectl cp -n $NAMESPACE ./generate-and-log-flowfiles.json test-nifi-0:/tmp {% else %} - script: kubectl cp -n $NAMESPACE ./generate-and-log-flowfiles.xml test-nifi-0:/tmp diff --git a/tests/templates/kuttl/upgrade/07-assert.yaml.j2 b/tests/templates/kuttl/upgrade/07-assert.yaml.j2 index e752bbca..a71c5a37 100644 --- a/tests/templates/kuttl/upgrade/07-assert.yaml.j2 +++ b/tests/templates/kuttl/upgrade/07-assert.yaml.j2 @@ -6,7 +6,7 @@ metadata: timeout: 300 commands: - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi.py -u admin -p supersecretpassword -n $NAMESPACE -c 3 -{% if test_scenario['values']['nifi_new'].startswith('1.') %} +{% if test_scenario['values']['nifi_new'].split(',')[0].startswith('1.') %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi_metrics.py -n $NAMESPACE {% endif %} - script: kubectl exec -n $NAMESPACE test-nifi-0 -- sh -c "python /tmp/flow.py -e https://test-nifi-node-default-0.test-nifi-node-default.$NAMESPACE.svc.cluster.local:8443 query > /tmp/new_input" From f2c8ecf4f7c817b430a13d09cb9aac3b62c34621 Mon Sep 17 00:00:00 2001 From: xeniape Date: Wed, 9 Apr 2025 13:48:51 +0200 Subject: [PATCH 09/15] cargo update and make regenerate-nix --- Cargo.lock | 12 ++++++------ Cargo.nix | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 93f0c5bd..1220e6d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,9 +276,9 @@ dependencies = [ [[package]] name = "backon" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "970d91570c01a8a5959b36ad7dd1c30642df24b6b3068710066f6809f7033bb7" +checksum = "fd0b50b1b78dbadd44ab18b3c794e496f3a139abb9fbc27d9c94c4eebbb96496" dependencies = [ "fastrand", "gloo-timers", @@ -524,9 +524,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] @@ -1692,9 +1692,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", ] diff --git a/Cargo.nix b/Cargo.nix index 4fe60f12..971504d6 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -948,9 +948,9 @@ rec { }; "backon" = rec { crateName = "backon"; - version = "1.4.1"; + version = "1.5.0"; edition = "2021"; - sha256 = "1drv0gvhjs3g0q88f1mknqjdyhh6qg8pvb9nkfasba011ibr23cp"; + sha256 = "15k4p6xyxi4lkiyw5yxrmcws3wwnwjacgcqqmd2dvfldnyqm02zx"; dependencies = [ { name = "fastrand"; @@ -1651,6 +1651,7 @@ rec { { name = "libc"; packageId = "libc"; + usesDefaultFeatures = false; target = { target, features }: (target.name == "aarch64-linux-android"); } { @@ -1696,9 +1697,9 @@ rec { }; "crossbeam-channel" = rec { crateName = "crossbeam-channel"; - version = "0.5.14"; + version = "0.5.15"; edition = "2021"; - sha256 = "0wa41qybq5w8s70anb472myh4fid4aw6v65vws6wn528w9l6vfh6"; + sha256 = "1cicd9ins0fkpfgvz9vhz3m9rpkh6n8d3437c3wnfsdkd3wgif42"; libName = "crossbeam_channel"; dependencies = [ { @@ -5515,9 +5516,9 @@ rec { }; "miniz_oxide" = rec { crateName = "miniz_oxide"; - version = "0.8.7"; + version = "0.8.8"; edition = "2021"; - sha256 = "0c4lj692adnzw0h9j8l24d7imds3icpgdkk3b03zlhxf90zcww7z"; + sha256 = "0al9iy33flfgxawj789w2c8xxwg1n2r5vv6m6p5hl2fvd2vlgriv"; authors = [ "Frommi " "oyvindln " From 8b20f2af56bcb82493b493a243b5d2abb898b396 Mon Sep 17 00:00:00 2001 From: xeniape Date: Thu, 10 Apr 2025 10:59:38 +0200 Subject: [PATCH 10/15] fix integration tests when using custom images --- tests/templates/kuttl/cluster_operation/20-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/cluster_operation/30-stop-nifi.yaml.j2 | 1 + tests/templates/kuttl/cluster_operation/40-pause-nifi.yaml.j2 | 1 + tests/templates/kuttl/cluster_operation/50-restart-nifi.yaml.j2 | 1 + tests/templates/kuttl/ldap/12-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/logging/04-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/oidc/12_nifi.yaml.j2 | 1 + tests/templates/kuttl/orphaned_resources/02-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/resources/02-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/smoke/30-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/upgrade/02-install-nifi.yaml.j2 | 1 + tests/templates/kuttl/upgrade/05-upgrade-nifi.yaml.j2 | 1 + 12 files changed, 12 insertions(+) diff --git a/tests/templates/kuttl/cluster_operation/20-install-nifi.yaml.j2 b/tests/templates/kuttl/cluster_operation/20-install-nifi.yaml.j2 index 7351d64b..deb17ac4 100644 --- a/tests/templates/kuttl/cluster_operation/20-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/cluster_operation/20-install-nifi.yaml.j2 @@ -33,6 +33,7 @@ spec: custom: "{{ test_scenario['values']['nifi-latest'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi-latest'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi-latest'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/cluster_operation/30-stop-nifi.yaml.j2 b/tests/templates/kuttl/cluster_operation/30-stop-nifi.yaml.j2 index dd41e667..e78083bf 100644 --- a/tests/templates/kuttl/cluster_operation/30-stop-nifi.yaml.j2 +++ b/tests/templates/kuttl/cluster_operation/30-stop-nifi.yaml.j2 @@ -9,6 +9,7 @@ spec: custom: "{{ test_scenario['values']['nifi-latest'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi-latest'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi-latest'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/cluster_operation/40-pause-nifi.yaml.j2 b/tests/templates/kuttl/cluster_operation/40-pause-nifi.yaml.j2 index cb43d975..85f71533 100644 --- a/tests/templates/kuttl/cluster_operation/40-pause-nifi.yaml.j2 +++ b/tests/templates/kuttl/cluster_operation/40-pause-nifi.yaml.j2 @@ -9,6 +9,7 @@ spec: custom: "{{ test_scenario['values']['nifi-latest'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi-latest'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi-latest'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/cluster_operation/50-restart-nifi.yaml.j2 b/tests/templates/kuttl/cluster_operation/50-restart-nifi.yaml.j2 index 6232efdb..4c50747e 100644 --- a/tests/templates/kuttl/cluster_operation/50-restart-nifi.yaml.j2 +++ b/tests/templates/kuttl/cluster_operation/50-restart-nifi.yaml.j2 @@ -9,6 +9,7 @@ spec: custom: "{{ test_scenario['values']['nifi-latest'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi-latest'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi-latest'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/ldap/12-install-nifi.yaml.j2 b/tests/templates/kuttl/ldap/12-install-nifi.yaml.j2 index 8852e066..8df853c6 100644 --- a/tests/templates/kuttl/ldap/12-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/ldap/12-install-nifi.yaml.j2 @@ -27,6 +27,7 @@ spec: custom: "{{ test_scenario['values']['nifi'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/logging/04-install-nifi.yaml.j2 b/tests/templates/kuttl/logging/04-install-nifi.yaml.j2 index 65a22b80..c3926671 100644 --- a/tests/templates/kuttl/logging/04-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/logging/04-install-nifi.yaml.j2 @@ -87,6 +87,7 @@ spec: custom: "{{ test_scenario['values']['nifi'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/oidc/12_nifi.yaml.j2 b/tests/templates/kuttl/oidc/12_nifi.yaml.j2 index 764ab8bf..6edd2e42 100644 --- a/tests/templates/kuttl/oidc/12_nifi.yaml.j2 +++ b/tests/templates/kuttl/oidc/12_nifi.yaml.j2 @@ -24,6 +24,7 @@ spec: custom: "{{ test_scenario['values']['nifi'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/orphaned_resources/02-install-nifi.yaml.j2 b/tests/templates/kuttl/orphaned_resources/02-install-nifi.yaml.j2 index c2cfe9e7..43ed9fb4 100644 --- a/tests/templates/kuttl/orphaned_resources/02-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/orphaned_resources/02-install-nifi.yaml.j2 @@ -33,6 +33,7 @@ spec: custom: "{{ test_scenario['values']['nifi'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/resources/02-install-nifi.yaml.j2 b/tests/templates/kuttl/resources/02-install-nifi.yaml.j2 index 3e55f070..d6aeee86 100644 --- a/tests/templates/kuttl/resources/02-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/resources/02-install-nifi.yaml.j2 @@ -33,6 +33,7 @@ spec: custom: "{{ test_scenario['values']['nifi'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/smoke/30-install-nifi.yaml.j2 b/tests/templates/kuttl/smoke/30-install-nifi.yaml.j2 index b6b3191f..aceebaf6 100644 --- a/tests/templates/kuttl/smoke/30-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/smoke/30-install-nifi.yaml.j2 @@ -34,6 +34,7 @@ spec: custom: "{{ test_scenario['values']['nifi'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/upgrade/02-install-nifi.yaml.j2 b/tests/templates/kuttl/upgrade/02-install-nifi.yaml.j2 index 10c879d4..47337032 100644 --- a/tests/templates/kuttl/upgrade/02-install-nifi.yaml.j2 +++ b/tests/templates/kuttl/upgrade/02-install-nifi.yaml.j2 @@ -33,6 +33,7 @@ spec: custom: "{{ test_scenario['values']['nifi_old'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi_old'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi_old'] }}" {% endif %} pullPolicy: IfNotPresent diff --git a/tests/templates/kuttl/upgrade/05-upgrade-nifi.yaml.j2 b/tests/templates/kuttl/upgrade/05-upgrade-nifi.yaml.j2 index ad33cfae..ec6e3b36 100644 --- a/tests/templates/kuttl/upgrade/05-upgrade-nifi.yaml.j2 +++ b/tests/templates/kuttl/upgrade/05-upgrade-nifi.yaml.j2 @@ -9,5 +9,6 @@ spec: custom: "{{ test_scenario['values']['nifi_new'].split(',')[1] }}" productVersion: "{{ test_scenario['values']['nifi_new'].split(',')[0] }}" {% else %} + custom: null productVersion: "{{ test_scenario['values']['nifi_new'] }}" {% endif %} From 827ac39e2ebbf83d07ac5b464fcaa777eab8d406 Mon Sep 17 00:00:00 2001 From: xeniape Date: Thu, 10 Apr 2025 11:29:49 +0200 Subject: [PATCH 11/15] rename VersionChangeState enum and some variants --- rust/operator-binary/src/controller.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index dcaffd86..7471764f 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -361,9 +361,9 @@ impl ReconcilerError for Error { // This struct is used for NiFi versions not supporting rolling upgrades since in that case // we have to manage the restart process ourselves and need to track the state of it #[derive(Debug, PartialEq, Eq)] -enum VersionChangeState { - ReadyForChange, - InProgress, +enum ClusterVersionUpdateState { + ReadyForUpdate, + UpdateInProgress, ClusterStopped, NoVersionChange, } @@ -417,7 +417,7 @@ pub async fn reconcile_nifi( .await?, ); - if version_change == Some(VersionChangeState::InProgress) { + if version_change == Some(ClusterVersionUpdateState::UpdateInProgress) { return Ok(Action::await_change()); } } @@ -624,7 +624,7 @@ pub async fn reconcile_nifi( // Update the deployed product version in the status after everything has been deployed, unless // we are still in the process of updating - let status = if version_change != Some(VersionChangeState::ReadyForChange) { + let status = if version_change != Some(ClusterVersionUpdateState::ReadyForUpdate) { NifiStatus { deployed_version: Some(resolved_product_image.product_version), conditions, @@ -652,7 +652,7 @@ async fn version_change_state( client: &Client, resolved_version: &String, deployed_version: Option<&String>, -) -> Result { +) -> Result { let namespace = &nifi .metadata .namespace @@ -700,7 +700,7 @@ async fn version_change_state( "Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", current_replicas ); - return Ok(VersionChangeState::InProgress); + return Ok(ClusterVersionUpdateState::UpdateInProgress); } // Otherwise we either still need to scale the statefulsets to 0 or all replicas have @@ -711,14 +711,14 @@ async fn version_change_state( tracing::info!( "Version change detected, we'll need to scale down the cluster for a full restart." ); - Ok(VersionChangeState::ReadyForChange) + Ok(ClusterVersionUpdateState::ReadyForUpdate) } else { tracing::info!("Cluster has been stopped for a restart, will scale back up."); - Ok(VersionChangeState::ClusterStopped) + Ok(ClusterVersionUpdateState::ClusterStopped) } } else { // No version change detected, propagate this to the reconciliation - Ok(VersionChangeState::NoVersionChange) + Ok(ClusterVersionUpdateState::NoVersionChange) } } None => { @@ -727,7 +727,7 @@ async fn version_change_state( tracing::debug!( "No deployed version found for this cluster, this is probably the first start, continue reconciliation" ); - Ok(VersionChangeState::NoVersionChange) + Ok(ClusterVersionUpdateState::NoVersionChange) } } } @@ -960,7 +960,7 @@ async fn build_node_rolegroup_statefulset( rolegroup_config: &HashMap>, merged_config: &NifiConfig, nifi_auth_config: &NifiAuthenticationConfig, - version_change_state: &Option, + version_change_state: &Option, sa_name: &str, ) -> Result { tracing::debug!("Building statefulset"); @@ -1438,7 +1438,7 @@ async fn build_node_rolegroup_statefulset( pod_management_policy: Some("Parallel".to_string()), replicas: if version_change_state .as_ref() - .is_some_and(|state| state == &VersionChangeState::ReadyForChange) + .is_some_and(|state| state == &ClusterVersionUpdateState::ReadyForUpdate) { Some(0) } else { From 450367cbedba093fda62f7733efd5864d6b1ccf2 Mon Sep 17 00:00:00 2001 From: xeniape Date: Thu, 10 Apr 2025 11:43:07 +0200 Subject: [PATCH 12/15] rename enum variant --- rust/operator-binary/src/controller.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index 7471764f..cbe249bb 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -362,7 +362,7 @@ impl ReconcilerError for Error { // we have to manage the restart process ourselves and need to track the state of it #[derive(Debug, PartialEq, Eq)] enum ClusterVersionUpdateState { - ReadyForUpdate, + UpdateRequested, UpdateInProgress, ClusterStopped, NoVersionChange, @@ -624,7 +624,7 @@ pub async fn reconcile_nifi( // Update the deployed product version in the status after everything has been deployed, unless // we are still in the process of updating - let status = if version_change != Some(ClusterVersionUpdateState::ReadyForUpdate) { + let status = if version_change != Some(ClusterVersionUpdateState::UpdateRequested) { NifiStatus { deployed_version: Some(resolved_product_image.product_version), conditions, @@ -711,7 +711,7 @@ async fn version_change_state( tracing::info!( "Version change detected, we'll need to scale down the cluster for a full restart." ); - Ok(ClusterVersionUpdateState::ReadyForUpdate) + Ok(ClusterVersionUpdateState::UpdateRequested) } else { tracing::info!("Cluster has been stopped for a restart, will scale back up."); Ok(ClusterVersionUpdateState::ClusterStopped) @@ -1438,7 +1438,7 @@ async fn build_node_rolegroup_statefulset( pod_management_policy: Some("Parallel".to_string()), replicas: if version_change_state .as_ref() - .is_some_and(|state| state == &ClusterVersionUpdateState::ReadyForUpdate) + .is_some_and(|state| state == &ClusterVersionUpdateState::UpdateRequested) { Some(0) } else { From 1d15a8376822686092d5c5007cae101c99cc64c7 Mon Sep 17 00:00:00 2001 From: xeniape Date: Thu, 10 Apr 2025 14:14:15 +0200 Subject: [PATCH 13/15] move upgrade code in separate module --- rust/operator-binary/src/config/mod.rs | 14 +- rust/operator-binary/src/controller.rs | 117 +++-------------- rust/operator-binary/src/crd/affinity.rs | 65 ++++----- rust/operator-binary/src/main.rs | 11 +- rust/operator-binary/src/operations/mod.rs | 1 + .../operator-binary/src/operations/upgrade.rs | 124 ++++++++++++++++++ 6 files changed, 191 insertions(+), 141 deletions(-) create mode 100644 rust/operator-binary/src/operations/upgrade.rs diff --git a/rust/operator-binary/src/config/mod.rs b/rust/operator-binary/src/config/mod.rs index b075c495..658ff2e6 100644 --- a/rust/operator-binary/src/config/mod.rs +++ b/rust/operator-binary/src/config/mod.rs @@ -696,7 +696,9 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!(bootstrap_conf, indoc! {" + assert_eq!( + bootstrap_conf, + indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -715,7 +717,8 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "}); + "} + ); } #[test] @@ -761,7 +764,9 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!(bootstrap_conf, indoc! {" + assert_eq!( + bootstrap_conf, + indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -782,7 +787,8 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "}); + "} + ); } fn construct_bootstrap_conf(nifi_cluster: &str) -> String { diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index cbe249bb..8448bfca 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -87,7 +87,11 @@ use crate::{ STACKABLE_LOG_CONFIG_DIR, STACKABLE_LOG_DIR, authentication::AuthenticationClassResolved, v1alpha1, }, - operations::{graceful_shutdown::add_graceful_shutdown_config, pdb::add_pdbs}, + operations::{ + graceful_shutdown::add_graceful_shutdown_config, + pdb::add_pdbs, + upgrade::{self, ClusterVersionUpdateState}, + }, product_logging::{extend_role_group_config_map, resolve_vector_aggregator_address}, reporting_task::{self, build_maybe_reporting_task, build_reporting_task_service_name}, security::{ @@ -348,6 +352,9 @@ pub enum Error { AddVolumeMount { source: builder::pod::container::Error, }, + + #[snafu(display("Failed to determine the state of the version upgrade procedure"))] + ClusterVersionUpdateState { source: upgrade::Error }, } type Result = std::result::Result; @@ -358,16 +365,6 @@ impl ReconcilerError for Error { } } -// This struct is used for NiFi versions not supporting rolling upgrades since in that case -// we have to manage the restart process ourselves and need to track the state of it -#[derive(Debug, PartialEq, Eq)] -enum ClusterVersionUpdateState { - UpdateRequested, - UpdateInProgress, - ClusterStopped, - NoVersionChange, -} - pub async fn reconcile_nifi( nifi: Arc>, ctx: Arc, @@ -408,13 +405,14 @@ pub async fn reconcile_nifi( if !rolling_upgrade_supported { version_change = Some( - version_change_state( + upgrade::version_change_state( nifi, client, &resolved_product_image.product_version, deployed_version, ) - .await?, + .await + .context(ClusterVersionUpdateStateSnafu)?, ); if version_change == Some(ClusterVersionUpdateState::UpdateInProgress) { @@ -647,91 +645,6 @@ pub async fn reconcile_nifi( Ok(Action::await_change()) } -async fn version_change_state( - nifi: &v1alpha1::NifiCluster, - client: &Client, - resolved_version: &String, - deployed_version: Option<&String>, -) -> Result { - let namespace = &nifi - .metadata - .namespace - .clone() - .with_context(|| ObjectHasNoNamespaceSnafu {})?; - - // Handle full restarts for a version change - match deployed_version { - Some(deployed_version) => { - if deployed_version != resolved_version { - // Check if statefulsets are already scaled to zero, if not - requeue - let selector = LabelSelector { - match_expressions: None, - match_labels: Some( - Labels::role_selector(nifi, APP_NAME, &NifiRole::Node.to_string()) - .context(LabelBuildSnafu)? - .into(), - ), - }; - - // Retrieve the deployed statefulsets to check on the current status of the restart - let deployed_statefulsets = client - .list_with_label_selector::(namespace, &selector) - .await - .context(FetchStatefulsetsSnafu)?; - - // Sum target replicas for all statefulsets - let target_replicas = deployed_statefulsets - .iter() - .filter_map(|statefulset| statefulset.spec.as_ref()) - .filter_map(|spec| spec.replicas) - .sum::(); - - // Sum current ready replicas for all statefulsets - let current_replicas = deployed_statefulsets - .iter() - .filter_map(|statefulset| statefulset.status.as_ref()) - .map(|status| status.replicas) - .sum::(); - - // If statefulsets have already been scaled to zero, but have remaining replicas - // we requeue to wait until a full stop has been performed. - if target_replicas == 0 && current_replicas > 0 { - tracing::info!( - "Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", - current_replicas - ); - return Ok(ClusterVersionUpdateState::UpdateInProgress); - } - - // Otherwise we either still need to scale the statefulsets to 0 or all replicas have - // been stopped and we can restart the cluster. - // Both actions will be taken in the regular reconciliation, so we can simply continue - // here - if target_replicas > 0 { - tracing::info!( - "Version change detected, we'll need to scale down the cluster for a full restart." - ); - Ok(ClusterVersionUpdateState::UpdateRequested) - } else { - tracing::info!("Cluster has been stopped for a restart, will scale back up."); - Ok(ClusterVersionUpdateState::ClusterStopped) - } - } else { - // No version change detected, propagate this to the reconciliation - Ok(ClusterVersionUpdateState::NoVersionChange) - } - } - None => { - // No deployed version set in status, this is probably the first reconciliation ever - // for this cluster, so just let it progress normally - tracing::debug!( - "No deployed version found for this cluster, this is probably the first start, continue reconciliation" - ); - Ok(ClusterVersionUpdateState::NoVersionChange) - } - } -} - /// The node-role service is the primary endpoint that should be used by clients that do not /// perform internal load balancing including targets outside of the cluster. pub fn build_node_role_service( @@ -1303,10 +1216,10 @@ async fn build_node_rolegroup_statefulset( } nifi_auth_config - .add_volumes_and_mounts(&mut pod_builder, vec![ - &mut container_prepare, - container_nifi, - ]) + .add_volumes_and_mounts( + &mut pod_builder, + vec![&mut container_prepare, container_nifi], + ) .context(AddAuthVolumesSnafu)?; let metadata = ObjectMetaBuilder::new() diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index bb1ed6f9..ac1e570e 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -61,36 +61,39 @@ mod tests { serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap(); let merged_config = nifi.merged_config(&NifiRole::Node, "default").unwrap(); - assert_eq!(merged_config.affinity, StackableAffinity { - pod_affinity: None, - pod_anti_affinity: Some(PodAntiAffinity { - preferred_during_scheduling_ignored_during_execution: Some(vec![ - WeightedPodAffinityTerm { - pod_affinity_term: PodAffinityTerm { - label_selector: Some(LabelSelector { - match_expressions: None, - match_labels: Some(BTreeMap::from([ - ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), - ( - "app.kubernetes.io/instance".to_string(), - "simple-nifi".to_string(), - ), - ( - "app.kubernetes.io/component".to_string(), - "node".to_string(), - ) - ])) - }), - topology_key: "kubernetes.io/hostname".to_string(), - ..Default::default() - }, - weight: 70 - } - ]), - required_during_scheduling_ignored_during_execution: None, - }), - node_affinity: None, - node_selector: None, - }); + assert_eq!( + merged_config.affinity, + StackableAffinity { + pod_affinity: None, + pod_anti_affinity: Some(PodAntiAffinity { + preferred_during_scheduling_ignored_during_execution: Some(vec![ + WeightedPodAffinityTerm { + pod_affinity_term: PodAffinityTerm { + label_selector: Some(LabelSelector { + match_expressions: None, + match_labels: Some(BTreeMap::from([ + ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), + ( + "app.kubernetes.io/instance".to_string(), + "simple-nifi".to_string(), + ), + ( + "app.kubernetes.io/component".to_string(), + "node".to_string(), + ) + ])) + }), + topology_key: "kubernetes.io/hostname".to_string(), + ..Default::default() + }, + weight: 70 + } + ]), + required_during_scheduling_ignored_during_execution: None, + }), + node_affinity: None, + node_selector: None, + } + ); } } diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index 295f24ab..66f6f08e 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -129,10 +129,13 @@ async fn main() -> anyhow::Result<()> { ) .await?; - let event_recorder = Arc::new(Recorder::new(client.as_kube_client(), Reporter { - controller: NIFI_FULL_CONTROLLER_NAME.to_string(), - instance: None, - })); + let event_recorder = Arc::new(Recorder::new( + client.as_kube_client(), + Reporter { + controller: NIFI_FULL_CONTROLLER_NAME.to_string(), + instance: None, + }, + )); let nifi_controller = Controller::new( watch_namespace.get_api::>(&client), diff --git a/rust/operator-binary/src/operations/mod.rs b/rust/operator-binary/src/operations/mod.rs index 92ca2ec7..c62006d9 100644 --- a/rust/operator-binary/src/operations/mod.rs +++ b/rust/operator-binary/src/operations/mod.rs @@ -1,2 +1,3 @@ pub mod graceful_shutdown; pub mod pdb; +pub mod upgrade; diff --git a/rust/operator-binary/src/operations/upgrade.rs b/rust/operator-binary/src/operations/upgrade.rs new file mode 100644 index 00000000..f28e685d --- /dev/null +++ b/rust/operator-binary/src/operations/upgrade.rs @@ -0,0 +1,124 @@ +// TODO: This module can be removed once we don't support NiFi 1.x versions anymore +// It manages the version upgrade procedure for NiFi versions prior to NiFi 2, since rolling upgrade is not supported there yet + +use snafu::{OptionExt, ResultExt, Snafu}; +use stackable_operator::{ + client::Client, + k8s_openapi::{api::apps::v1::StatefulSet, apimachinery::pkg::apis::meta::v1::LabelSelector}, + kvp::Labels, +}; + +use crate::crd::{APP_NAME, NifiRole, v1alpha1}; + +#[derive(Snafu, Debug)] +pub enum Error { + #[snafu(display("object defines no namespace"))] + ObjectHasNoNamespace, + + #[snafu(display("failed to fetch deployed StatefulSets"))] + FetchStatefulsets { + source: stackable_operator::client::Error, + }, + + #[snafu(display("failed to build labels"))] + LabelBuild { + source: stackable_operator::kvp::LabelError, + }, +} + +type Result = std::result::Result; + +// This struct is used for NiFi versions not supporting rolling upgrades since in that case +// we have to manage the restart process ourselves and need to track the state of it +#[derive(Debug, PartialEq, Eq)] +pub enum ClusterVersionUpdateState { + UpdateRequested, + UpdateInProgress, + ClusterStopped, + NoVersionChange, +} + +pub async fn version_change_state( + nifi: &v1alpha1::NifiCluster, + client: &Client, + resolved_version: &String, + deployed_version: Option<&String>, +) -> Result { + let namespace = &nifi + .metadata + .namespace + .clone() + .with_context(|| ObjectHasNoNamespaceSnafu {})?; + + // Handle full restarts for a version change + match deployed_version { + Some(deployed_version) => { + if deployed_version != resolved_version { + // Check if statefulsets are already scaled to zero, if not - requeue + let selector = LabelSelector { + match_expressions: None, + match_labels: Some( + Labels::role_selector(nifi, APP_NAME, &NifiRole::Node.to_string()) + .context(LabelBuildSnafu)? + .into(), + ), + }; + + // Retrieve the deployed statefulsets to check on the current status of the restart + let deployed_statefulsets = client + .list_with_label_selector::(namespace, &selector) + .await + .context(FetchStatefulsetsSnafu)?; + + // Sum target replicas for all statefulsets + let target_replicas = deployed_statefulsets + .iter() + .filter_map(|statefulset| statefulset.spec.as_ref()) + .filter_map(|spec| spec.replicas) + .sum::(); + + // Sum current ready replicas for all statefulsets + let current_replicas = deployed_statefulsets + .iter() + .filter_map(|statefulset| statefulset.status.as_ref()) + .map(|status| status.replicas) + .sum::(); + + // If statefulsets have already been scaled to zero, but have remaining replicas + // we requeue to wait until a full stop has been performed. + if target_replicas == 0 && current_replicas > 0 { + tracing::info!( + "Cluster is performing a full restart at the moment and still shutting down, remaining replicas: [{}] - requeueing to wait for shutdown to finish", + current_replicas + ); + return Ok(ClusterVersionUpdateState::UpdateInProgress); + } + + // Otherwise we either still need to scale the statefulsets to 0 or all replicas have + // been stopped and we can restart the cluster. + // Both actions will be taken in the regular reconciliation, so we can simply continue + // here + if target_replicas > 0 { + tracing::info!( + "Version change detected, we'll need to scale down the cluster for a full restart." + ); + Ok(ClusterVersionUpdateState::UpdateRequested) + } else { + tracing::info!("Cluster has been stopped for a restart, will scale back up."); + Ok(ClusterVersionUpdateState::ClusterStopped) + } + } else { + // No version change detected, propagate this to the reconciliation + Ok(ClusterVersionUpdateState::NoVersionChange) + } + } + None => { + // No deployed version set in status, this is probably the first reconciliation ever + // for this cluster, so just let it progress normally + tracing::debug!( + "No deployed version found for this cluster, this is probably the first start, continue reconciliation" + ); + Ok(ClusterVersionUpdateState::NoVersionChange) + } + } +} From fc38d3a137d657a1682c570251b7f6ba3f645d5f Mon Sep 17 00:00:00 2001 From: xeniape Date: Thu, 10 Apr 2025 14:32:57 +0200 Subject: [PATCH 14/15] cargo fmt --- rust/operator-binary/src/config/mod.rs | 14 ++--- rust/operator-binary/src/controller.rs | 8 +-- rust/operator-binary/src/crd/affinity.rs | 65 +++++++++++------------- rust/operator-binary/src/main.rs | 11 ++-- 4 files changed, 43 insertions(+), 55 deletions(-) diff --git a/rust/operator-binary/src/config/mod.rs b/rust/operator-binary/src/config/mod.rs index 658ff2e6..b075c495 100644 --- a/rust/operator-binary/src/config/mod.rs +++ b/rust/operator-binary/src/config/mod.rs @@ -696,9 +696,7 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!( - bootstrap_conf, - indoc! {" + assert_eq!(bootstrap_conf, indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -717,8 +715,7 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "} - ); + "}); } #[test] @@ -764,9 +761,7 @@ mod tests { "#; let bootstrap_conf = construct_bootstrap_conf(input); - assert_eq!( - bootstrap_conf, - indoc! {" + assert_eq!(bootstrap_conf, indoc! {" conf.dir=./conf graceful.shutdown.seconds=300 java=java @@ -787,8 +782,7 @@ mod tests { lib.dir=./lib preserve.environment=false run.as= - "} - ); + "}); } fn construct_bootstrap_conf(nifi_cluster: &str) -> String { diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index b1830ced..4eb32764 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -1212,10 +1212,10 @@ async fn build_node_rolegroup_statefulset( } nifi_auth_config - .add_volumes_and_mounts( - &mut pod_builder, - vec![&mut container_prepare, container_nifi], - ) + .add_volumes_and_mounts(&mut pod_builder, vec![ + &mut container_prepare, + container_nifi, + ]) .context(AddAuthVolumesSnafu)?; let metadata = ObjectMetaBuilder::new() diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index ac1e570e..bb1ed6f9 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -61,39 +61,36 @@ mod tests { serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap(); let merged_config = nifi.merged_config(&NifiRole::Node, "default").unwrap(); - assert_eq!( - merged_config.affinity, - StackableAffinity { - pod_affinity: None, - pod_anti_affinity: Some(PodAntiAffinity { - preferred_during_scheduling_ignored_during_execution: Some(vec![ - WeightedPodAffinityTerm { - pod_affinity_term: PodAffinityTerm { - label_selector: Some(LabelSelector { - match_expressions: None, - match_labels: Some(BTreeMap::from([ - ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), - ( - "app.kubernetes.io/instance".to_string(), - "simple-nifi".to_string(), - ), - ( - "app.kubernetes.io/component".to_string(), - "node".to_string(), - ) - ])) - }), - topology_key: "kubernetes.io/hostname".to_string(), - ..Default::default() - }, - weight: 70 - } - ]), - required_during_scheduling_ignored_during_execution: None, - }), - node_affinity: None, - node_selector: None, - } - ); + assert_eq!(merged_config.affinity, StackableAffinity { + pod_affinity: None, + pod_anti_affinity: Some(PodAntiAffinity { + preferred_during_scheduling_ignored_during_execution: Some(vec![ + WeightedPodAffinityTerm { + pod_affinity_term: PodAffinityTerm { + label_selector: Some(LabelSelector { + match_expressions: None, + match_labels: Some(BTreeMap::from([ + ("app.kubernetes.io/name".to_string(), "nifi".to_string(),), + ( + "app.kubernetes.io/instance".to_string(), + "simple-nifi".to_string(), + ), + ( + "app.kubernetes.io/component".to_string(), + "node".to_string(), + ) + ])) + }), + topology_key: "kubernetes.io/hostname".to_string(), + ..Default::default() + }, + weight: 70 + } + ]), + required_during_scheduling_ignored_during_execution: None, + }), + node_affinity: None, + node_selector: None, + }); } } diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index 6556e381..e6810d8b 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -91,13 +91,10 @@ async fn main() -> anyhow::Result<()> { ) .await?; - let event_recorder = Arc::new(Recorder::new( - client.as_kube_client(), - Reporter { - controller: NIFI_FULL_CONTROLLER_NAME.to_string(), - instance: None, - }, - )); + let event_recorder = Arc::new(Recorder::new(client.as_kube_client(), Reporter { + controller: NIFI_FULL_CONTROLLER_NAME.to_string(), + instance: None, + })); let nifi_controller = Controller::new( watch_namespace.get_api::>(&client), From e191d849525925f6cec13ac85259f01acefb17aa Mon Sep 17 00:00:00 2001 From: Malte Sander Date: Thu, 10 Apr 2025 15:30:50 +0200 Subject: [PATCH 15/15] adapt variable names --- rust/operator-binary/src/controller.rs | 54 ++++++++++--------- .../operator-binary/src/operations/upgrade.rs | 2 +- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index 4eb32764..cca71af6 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -391,9 +391,11 @@ pub async fn reconcile_nifi( .await .context(SecuritySnafu)?; - // if rolling upgrade is supported, kubernetes takes care of the cluster scaling automatically + // If rolling upgrade is supported, kubernetes takes care of the cluster scaling automatically // otherwise the operator handles it - let mut version_change = None; + // manage our own flow for upgrade from 1.x.x to 1.x.x/2.x.x + // TODO: this can be removed once 1.x.x is longer supported + let mut cluster_version_update_state = ClusterVersionUpdateState::NoVersionChange; let deployed_version = nifi .status .as_ref() @@ -402,21 +404,20 @@ pub async fn reconcile_nifi( && deployed_version.is_some_and(|v| v.starts_with("2.")); if !rolling_upgrade_supported { - version_change = Some( - upgrade::version_change_state( - nifi, - client, - &resolved_product_image.product_version, - deployed_version, - ) - .await - .context(ClusterVersionUpdateStateSnafu)?, - ); + cluster_version_update_state = upgrade::cluster_version_update_state( + nifi, + client, + &resolved_product_image.product_version, + deployed_version, + ) + .await + .context(ClusterVersionUpdateStateSnafu)?; - if version_change == Some(ClusterVersionUpdateState::UpdateInProgress) { + if cluster_version_update_state == ClusterVersionUpdateState::UpdateInProgress { return Ok(Action::await_change()); } } + // end todo let validated_config = validated_product_config( nifi, @@ -524,6 +525,14 @@ pub async fn reconcile_nifi( ) .await?; + let role_group = role.role_groups.get(&rolegroup.role_group); + let replicas = + if cluster_version_update_state == ClusterVersionUpdateState::UpdateRequested { + Some(0) + } else { + role_group.and_then(|rg| rg.replicas).map(i32::from) + }; + let rg_statefulset = build_node_rolegroup_statefulset( nifi, &resolved_product_image, @@ -533,7 +542,8 @@ pub async fn reconcile_nifi( rolegroup_config, &merged_config, &nifi_authentication_config, - &version_change, + rolling_upgrade_supported, + replicas, &rbac_sa.name_any(), ) .await?; @@ -615,7 +625,7 @@ pub async fn reconcile_nifi( // Update the deployed product version in the status after everything has been deployed, unless // we are still in the process of updating - let status = if version_change != Some(ClusterVersionUpdateState::UpdateRequested) { + let status = if cluster_version_update_state != ClusterVersionUpdateState::UpdateRequested { NifiStatus { deployed_version: Some(resolved_product_image.product_version), conditions, @@ -861,7 +871,8 @@ async fn build_node_rolegroup_statefulset( rolegroup_config: &HashMap>, merged_config: &NifiConfig, nifi_auth_config: &NifiAuthenticationConfig, - version_change_state: &Option, + rolling_update_supported: bool, + replicas: Option, sa_name: &str, ) -> Result { tracing::debug!("Building statefulset"); @@ -1345,14 +1356,7 @@ async fn build_node_rolegroup_statefulset( .build(), spec: Some(StatefulSetSpec { pod_management_policy: Some("Parallel".to_string()), - replicas: if version_change_state - .as_ref() - .is_some_and(|state| state == &ClusterVersionUpdateState::UpdateRequested) - { - Some(0) - } else { - role_group.and_then(|rg| rg.replicas).map(i32::from) - }, + replicas, selector: LabelSelector { match_labels: Some( Labels::role_group_selector( @@ -1369,7 +1373,7 @@ async fn build_node_rolegroup_statefulset( service_name: rolegroup_ref.object_name(), template: pod_template, update_strategy: Some(StatefulSetUpdateStrategy { - type_: if version_change_state.is_none() { + type_: if rolling_update_supported { Some("RollingUpdate".to_string()) } else { Some("OnDelete".to_string()) diff --git a/rust/operator-binary/src/operations/upgrade.rs b/rust/operator-binary/src/operations/upgrade.rs index f28e685d..69a01820 100644 --- a/rust/operator-binary/src/operations/upgrade.rs +++ b/rust/operator-binary/src/operations/upgrade.rs @@ -38,7 +38,7 @@ pub enum ClusterVersionUpdateState { NoVersionChange, } -pub async fn version_change_state( +pub async fn cluster_version_update_state( nifi: &v1alpha1::NifiCluster, client: &Client, resolved_version: &String,