diff --git a/Cargo.lock b/Cargo.lock index 5eba218b3cc2..d9a0c289f789 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -581,7 +581,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -598,7 +598,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -886,7 +886,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1182,9 +1182,9 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.1.31" +version = "1.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "67b9470d453346108f93a59222a9a1a5724db32d0a4727b7ab7ace4b4d822dc9" dependencies = [ "jobserver", "libc", @@ -1370,7 +1370,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1959,7 +1959,7 @@ dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1981,7 +1981,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2095,7 +2095,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2108,7 +2108,7 @@ dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", "rustc_version", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -3287,7 +3287,8 @@ dependencies = [ "hyper 0.14.31", "hyper-tls", "itertools 0.10.5", - "json-patch 0.2.7", + "json-patch", + "jsonptr", "k8s-openapi", "kube", "num_cpus", @@ -5533,7 +5534,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -5553,7 +5554,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -5691,7 +5692,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -5813,7 +5814,7 @@ dependencies = [ "once_cell", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -6337,7 +6338,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -7638,17 +7639,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json-patch" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce" -dependencies = [ - "serde 1.0.214", - "serde_json", - "treediff", -] - [[package]] name = "json-patch" version = "2.0.0" @@ -7781,7 +7771,7 @@ dependencies = [ "chrono", "form_urlencoded", "http 1.1.0", - "json-patch 2.0.0", + "json-patch", "k8s-openapi", "serde 1.0.214", "serde-value", @@ -9670,7 +9660,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9978,7 +9968,7 @@ dependencies = [ "pest_meta", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10082,7 +10072,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10204,7 +10194,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10396,7 +10386,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2 1.0.89", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10962,7 +10952,7 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11704,7 +11694,7 @@ checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11749,7 +11739,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -12308,9 +12298,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.86" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89275301d38033efb81a6e60e3497e734dfcc62571f2854bf4b16690398824c" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", @@ -12519,7 +12509,7 @@ checksum = "b08be0f17bd307950653ce45db00cd31200d82b624b36e181337d9c7d92765b5" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -12671,7 +12661,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -13061,7 +13051,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -13126,15 +13116,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "treediff" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" -dependencies = [ - "serde_json", -] - [[package]] name = "triehash" version = "0.8.4" @@ -13640,7 +13621,7 @@ dependencies = [ "once_cell", "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -13674,7 +13655,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -14132,7 +14113,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -14152,7 +14133,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2 1.0.89", "quote 1.0.37", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 98055e30c518..759b1cf4bfc5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -491,7 +491,9 @@ jemallocator = { version = "0.3.2", features = [ "profiling", "unprefixed_malloc_on_supported_platforms", ] } -json-patch = "0.2.6" +# NOTE: jsonptr is a dependency of json-patch and the versions should be kept consistent +json-patch = "2.0.0" +jsonptr = "0.4.7" jsonwebtoken = "8.1" libfuzzer-sys = "0.4.6" libsecp256k1 = "0.7.0" diff --git a/testsuite/forge/Cargo.toml b/testsuite/forge/Cargo.toml index 190d017f19af..605e5301f8b2 100644 --- a/testsuite/forge/Cargo.toml +++ b/testsuite/forge/Cargo.toml @@ -44,6 +44,7 @@ hyper = { workspace = true } hyper-tls = { workspace = true } itertools = { workspace = true } json-patch = { workspace = true } +jsonptr = { workspace = true } # WARNING: these kube libraries publish only minor version updates with zero as major version # and therefore needs to be manually updated periodically here otherwise it ends up # transitively referencing a bunch of old libraries that then conflict with who knows what elsewhere. diff --git a/testsuite/forge/src/backend/k8s/cluster_helper.rs b/testsuite/forge/src/backend/k8s/cluster_helper.rs index a5152a1682fb..5958d93f3e5b 100644 --- a/testsuite/forge/src/backend/k8s/cluster_helper.rs +++ b/testsuite/forge/src/backend/k8s/cluster_helper.rs @@ -109,7 +109,7 @@ async fn wait_node_haproxy( format!("{}-{}-haproxy", DIEM_NODE_HELM_RELEASE_NAME, i); match deployments_api.get_status(&haproxy_deployment_name).await { Ok(s) => { - let deployment_name = s.name(); + let deployment_name = s.name_unchecked(); if let Some(deployment_status) = s.status { let ready_replicas = deployment_status.ready_replicas.unwrap_or(0); info!( @@ -177,7 +177,7 @@ where .await? { either::Left(list) => { - let names: Vec<_> = list.iter().map(ResourceExt::name).collect(); + let names: Vec<_> = list.iter().map(ResourceExt::name_unchecked).collect(); info!("Deleting collection of {}: {:?}", name, names); }, either::Right(status) => { @@ -861,7 +861,7 @@ pub async fn create_management_configmap( cleanup_duration: Duration, ) -> Result<()> { let kube_client = create_k8s_client().await?; - let namespaces_api = Arc::new(K8sApi::::from_client(kube_client.clone(), None)); + let namespaces_api = Arc::new(K8sApi::::from_client_not_namespaced(kube_client.clone())); let other_kube_namespace = kube_namespace.clone(); // try to create a new namespace @@ -943,7 +943,7 @@ pub async fn cleanup_cluster_with_management() -> Result<()> { .items .into_iter() .filter(|pod| { - let pod_name = pod.name(); + let pod_name = pod.name_unchecked(); info!("Got pod {}", pod_name); if let Some(time) = &pod.metadata.creation_timestamp { let pod_creation_time = time.0.timestamp() as u64; @@ -960,7 +960,7 @@ pub async fn cleanup_cluster_with_management() -> Result<()> { }) .collect::>(); for pod in pods { - let pod_name = pod.name(); + let pod_name = pod.name_unchecked(); info!("Deleting pod {}", pod_name); pods_api.delete(&pod_name, &DeleteParams::default()).await?; } @@ -975,7 +975,7 @@ pub async fn cleanup_cluster_with_management() -> Result<()> { .items .into_iter() .filter(|configmap| { - let configmap_name = configmap.name(); + let configmap_name = configmap.name_unchecked(); let configmap_namespace = configmap.namespace().unwrap(); if !configmap_name.contains(MANAGEMENT_CONFIGMAP_PREFIX) { return false; diff --git a/testsuite/forge/src/backend/k8s/fullnode.rs b/testsuite/forge/src/backend/k8s/fullnode.rs index c82c8bec11cc..8edf783337e8 100644 --- a/testsuite/forge/src/backend/k8s/fullnode.rs +++ b/testsuite/forge/src/backend/k8s/fullnode.rs @@ -23,6 +23,7 @@ use k8s_openapi::{ core::v1::{ ConfigMap, ConfigMapVolumeSource, Container, PersistentVolumeClaim, PersistentVolumeClaimSpec, PodSpec, PodTemplateSpec, ResourceRequirements, + VolumeResourceRequirements, SecretVolumeSource, Service, ServicePort, ServiceSpec, Volume, VolumeMount, }, }, @@ -111,9 +112,9 @@ fn create_fullnode_persistent_volume_claim( }, spec: Some(PersistentVolumeClaimSpec { access_modes: Some(vec!["ReadWriteOnce".to_string()]), - resources: Some(ResourceRequirements { + resources: Some(VolumeResourceRequirements { requests: volume_requests, - ..ResourceRequirements::default() + ..VolumeResourceRequirements::default() }), ..PersistentVolumeClaimSpec::default() }), @@ -203,7 +204,7 @@ fn create_fullnode_volumes( Volume { name: DIEM_CONFIG_VOLUME_NAME.to_string(), config_map: Some(ConfigMapVolumeSource { - name: Some(fullnode_node_config_config_map_name), + name: fullnode_node_config_config_map_name, ..ConfigMapVolumeSource::default() }), ..Volume::default() @@ -517,7 +518,7 @@ mod tests { }, spec: Some(PersistentVolumeClaimSpec { access_modes: Some(vec!["ReadWriteOnce".to_string()]), - resources: Some(ResourceRequirements { + resources: Some(VolumeResourceRequirements { requests: Some( [ ("storage".to_string(), Quantity("1Gi".to_string())), @@ -527,7 +528,7 @@ mod tests { .cloned() .collect(), ), - ..ResourceRequirements::default() + ..VolumeResourceRequirements::default() }), ..PersistentVolumeClaimSpec::default() }), @@ -648,9 +649,9 @@ mod tests { }, spec: Some(PersistentVolumeClaimSpec { access_modes: Some(vec!["ReadWriteOnce".to_string()]), - resources: Some(ResourceRequirements { + resources: Some(VolumeResourceRequirements { requests, - ..ResourceRequirements::default() + ..VolumeResourceRequirements::default() }), ..PersistentVolumeClaimSpec::default() }), diff --git a/testsuite/forge/src/backend/k8s/kube_api.rs b/testsuite/forge/src/backend/k8s/kube_api.rs index 71f83f3a2c0c..8913864ab725 100644 --- a/testsuite/forge/src/backend/k8s/kube_api.rs +++ b/testsuite/forge/src/backend/k8s/kube_api.rs @@ -6,6 +6,7 @@ use kube::{ api::{Api, PostParams}, client::Client as K8sClient, Error as KubeError, Resource as ApiResource, + core::NamespaceResourceScope as NamespaceResourceScope, }; use serde::{de::DeserializeOwned, Serialize}; use std::fmt::Debug; @@ -19,7 +20,7 @@ pub struct K8sApi { impl K8sApi where - K: ApiResource, + K: ApiResource, { pub fn from_client(kube_client: K8sClient, kube_namespace: Option) -> Self where @@ -37,6 +38,26 @@ where } } +impl K8sApi +where + K: ApiResource, + { + // NOTE: I created this alias function because recent versions of the + // k8s libraries had introduced a type constraint requiring a namespace-able + // return type if a namespace is passed. The function signature for from_client() + // really isn't compatible with this constraint (or at least I couldn't see how to make it so) + // therefore created this alias function as a workaround for the one place we call with no namespace. + pub fn from_client_not_namespaced(kube_client: K8sClient) -> Self + where + ::DynamicType: Default, + { + K8sApi { + api: Api::all(kube_client), + } + + } +} + #[async_trait] pub trait ReadWrite: Send + Sync { async fn get(&self, name: &str) -> Result; diff --git a/testsuite/forge/src/backend/k8s/stateful_set.rs b/testsuite/forge/src/backend/k8s/stateful_set.rs index 2abd55a2002f..3826c7c0f969 100644 --- a/testsuite/forge/src/backend/k8s/stateful_set.rs +++ b/testsuite/forge/src/backend/k8s/stateful_set.rs @@ -6,6 +6,7 @@ use again::RetryPolicy; use anyhow::bail; use diem_logger::info; use json_patch::{Patch as JsonPatch, PatchOperation, ReplaceOperation}; +use jsonptr::Pointer; use k8s_openapi::api::{apps::v1::StatefulSet, core::v1::Pod}; use kube::{ api::{Api, Patch, PatchParams}, @@ -92,7 +93,7 @@ async fn check_stateful_set_status( ) -> Result<(), WorkloadScalingError> { match stateful_set_api.get(sts_name).await { Ok(s) => { - let sts_name = &s.name(); + let sts_name = &s.name_unchecked(); // get the StatefulSet status if let Some(sts_status) = s.status { let ready_replicas = sts_status.ready_replicas.unwrap_or(0) as u64; @@ -254,7 +255,7 @@ pub async fn set_identity( let stateful_set_api: Api = Api::namespaced(kube_client.clone(), kube_namespace); let patch_op = PatchOperation::Replace(ReplaceOperation { // The json path below should match `terraform/helm/diem-node/templates/validator.yaml`. - path: "/spec/template/spec/volumes/1/secret/secretName".to_string(), + path: Pointer::parse("/spec/template/spec/volumes/1/secret/secretName")?, value: json!(k8s_secret_name), }); let patch: Patch = Patch::Json(JsonPatch(vec![patch_op]));