From 376884b8a428a81ce6ef5da59d472239872a990d Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Wed, 5 Apr 2023 15:54:55 -0700 Subject: [PATCH 01/15] cargo: Update version of clap to 4.1.13 This version includes macros related to using command options. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/Cargo.lock | 428 +++++++++++++++++++++++----------- src/tools/kata-ctl/Cargo.toml | 2 +- 2 files changed, 293 insertions(+), 137 deletions(-) diff --git a/src/tools/kata-ctl/Cargo.lock b/src/tools/kata-ctl/Cargo.lock index 6acf131f0d..e31c8622d4 100644 --- a/src/tools/kata-ctl/Cargo.lock +++ b/src/tools/kata-ctl/Cargo.lock @@ -33,6 +33,46 @@ dependencies = [ "memchr", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + [[package]] name = "anyhow" version = "1.0.69" @@ -53,18 +93,7 @@ checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", + "syn 1.0.107", ] [[package]] @@ -98,7 +127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd9e32d7420c85055e8107e5b2463c4eeefeaac18b52359fe9f9c08a18f342b2" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -149,41 +178,60 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "3.2.23" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" dependencies = [ - "atty", - "bitflags", + "clap_builder", "clap_derive", + "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +dependencies = [ + "anstream", + "anstyle", + "bitflags", "clap_lex", - "indexmap", "once_cell", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.2.18" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck 0.4.1", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" + +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" dependencies = [ - "os_str_bytes", + "windows-sys 0.45.0", ] [[package]] @@ -229,7 +277,7 @@ checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -257,6 +305,27 @@ dependencies = [ "libc", ] +[[package]] +name = "errno" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "fastrand" version = "1.8.0" @@ -358,7 +427,7 @@ checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -437,15 +506,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hermit-abi" version = "0.2.6" @@ -455,6 +515,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -587,6 +653,17 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "iovec" version = "0.1.4" @@ -602,6 +679,18 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +[[package]] +name = "is-terminal" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -694,6 +783,12 @@ version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +[[package]] +name = "linux-raw-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" + [[package]] name = "lock_api" version = "0.4.9" @@ -772,7 +867,7 @@ dependencies = [ "libc", "log", "wasi", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -901,7 +996,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -923,12 +1018,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "os_str_bytes" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" - [[package]] name = "parking_lot" version = "0.11.2" @@ -987,7 +1076,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1018,35 +1107,11 @@ dependencies = [ "nix 0.26.2", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -1089,7 +1154,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1181,9 +1246,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -1280,6 +1345,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustix" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.45.0", +] + [[package]] name = "rustls" version = "0.20.8" @@ -1326,7 +1405,7 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -1391,7 +1470,7 @@ checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1436,7 +1515,7 @@ checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1549,7 +1628,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.107", ] [[package]] @@ -1563,6 +1642,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "take_mut" version = "0.2.2" @@ -1583,15 +1673,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - [[package]] name = "test-utils" version = "0.1.0" @@ -1599,12 +1680,6 @@ dependencies = [ "nix 0.24.3", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.38" @@ -1622,7 +1697,7 @@ checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1692,7 +1767,7 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -1703,7 +1778,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1885,18 +1960,18 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - [[package]] name = "vmm-sys-util" version = "0.11.1" @@ -1954,7 +2029,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "wasm-bindgen-shared", ] @@ -1988,7 +2063,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2055,15 +2130,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -2076,56 +2142,146 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winreg" diff --git a/src/tools/kata-ctl/Cargo.toml b/src/tools/kata-ctl/Cargo.toml index 3de3a532a7..d2fc5fb1ea 100644 --- a/src/tools/kata-ctl/Cargo.toml +++ b/src/tools/kata-ctl/Cargo.toml @@ -14,7 +14,7 @@ edition = "2018" [dependencies] anyhow = "1.0.31" -clap = { version = "3.2.20", features = ["derive", "cargo"] } +clap = { version = "4.1.13", features = ["derive", "cargo"] } serde_json = "1.0.85" thiserror = "1.0.35" privdrop = "0.5.2" From 572b338b3bfd21dda94dea85f3c1b3417305c609 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Wed, 5 Apr 2023 16:12:35 -0700 Subject: [PATCH 02/15] gitignore: Ignore .swp and .swo editor backup files Ignore temporary files created by vim editor. Signed-off-by: Archana Shinde --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index fca1509408..29d21ac6de 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ **/.vscode **/.idea **/.fleet +**/*.swp +**/*.swo pkg/logging/Cargo.lock src/agent/src/version.rs src/agent/kata-agent.service From 94a00f9346b1d39434cfb47408e69065adc10997 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Mon, 10 Apr 2023 15:52:33 -0700 Subject: [PATCH 03/15] utils: Make certain constants in utils.rs public These would be used outside of utils. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/utils.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tools/kata-ctl/src/utils.rs b/src/tools/kata-ctl/src/utils.rs index 03c005e9fc..524821aedf 100644 --- a/src/tools/kata-ctl/src/utils.rs +++ b/src/tools/kata-ctl/src/utils.rs @@ -27,7 +27,7 @@ pub fn drop_privs() -> Result<()> { Ok(()) } -const PROC_VERSION_FILE: &str = "/proc/version"; +pub const PROC_VERSION_FILE: &str = "/proc/version"; pub fn get_kernel_version(proc_version_file: &str) -> Result { let contents = fs::read_to_string(proc_version_file) @@ -43,10 +43,10 @@ pub fn get_kernel_version(proc_version_file: &str) -> Result { Ok(kernel_version) } -const OS_RELEASE: &str = "/etc/os-release"; +pub const OS_RELEASE: &str = "/etc/os-release"; // Clear Linux has a different path (for stateless support) -const OS_RELEASE_CLR: &str = "/usr/lib/os-release"; +pub const OS_RELEASE_CLR: &str = "/usr/lib/os-release"; const UNKNOWN: &str = "unknown"; @@ -144,7 +144,7 @@ pub fn get_generic_cpu_details(cpu_info_file: &str) -> Result<(String, String)> Ok((vendor, model)) } -const VHOST_VSOCK_DEVICE: &str = "/dev/vhost-vsock"; +pub const VHOST_VSOCK_DEVICE: &str = "/dev/vhost-vsock"; pub fn supports_vsocks(vsock_path: &str) -> Result { let metadata = fs::metadata(vsock_path)?; Ok(metadata.is_file()) From 7565b3356831e5a07dae2b6b63235db326eef0b8 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Mon, 10 Apr 2023 16:35:39 -0700 Subject: [PATCH 04/15] kata-ctl: Implement Display trait for GuestProtection enum Implement Display for enum to display in env output. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/check.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/tools/kata-ctl/src/check.rs b/src/tools/kata-ctl/src/check.rs index dfb9a3b7b6..bd5406bb86 100644 --- a/src/tools/kata-ctl/src/check.rs +++ b/src/tools/kata-ctl/src/check.rs @@ -8,6 +8,7 @@ use anyhow::{anyhow, Result}; use reqwest::header::{CONTENT_TYPE, USER_AGENT}; use serde::{Deserialize, Serialize}; +use std::fmt; use thiserror::Error; #[cfg(any(target_arch = "x86_64"))] @@ -147,6 +148,19 @@ pub enum GuestProtection { Se, } +impl fmt::Display for GuestProtection { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + GuestProtection::Tdx => write!(f, "tdx"), + GuestProtection::Sev => write!(f, "sev"), + GuestProtection::Snp => write!(f, "snp"), + GuestProtection::Pef => write!(f, "pef"), + GuestProtection::Se => write!(f, "se"), + GuestProtection::NoProtection => write!(f, "none"), + } + } +} + #[allow(dead_code)] #[derive(Error, Debug)] pub enum ProtectionError { From 68f63577319bb0f78d9d798a14d5859ffb5eec31 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Thu, 13 Apr 2023 23:13:45 -0700 Subject: [PATCH 05/15] config: Make function to get the default conf file public This will be used by the kata-env command. Signed-off-by: Archana Shinde --- src/libs/kata-types/src/config/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/kata-types/src/config/mod.rs b/src/libs/kata-types/src/config/mod.rs index 1730269217..2a696922a5 100644 --- a/src/libs/kata-types/src/config/mod.rs +++ b/src/libs/kata-types/src/config/mod.rs @@ -196,7 +196,7 @@ impl TomlConfig { } /// Probe configuration file according to the default configuration file list. - fn get_default_config_file() -> Result { + pub fn get_default_config_file() -> Result { for f in default::DEFAULT_RUNTIME_CONFIGURATIONS.iter() { if let Ok(path) = fs::canonicalize(f) { return Ok(path); From 07f7d17db59b8b8cd1bdb2fd83dacb88db47c231 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Thu, 13 Apr 2023 23:16:04 -0700 Subject: [PATCH 06/15] config: Make the pipe_size field optional Add the serde default attribute to the field so that parsing can continue if this field is not present. The agent assumes a default value for this, so it is not required by the user to provide a value here. Signed-off-by: Archana Shinde --- src/libs/kata-types/src/config/agent.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/kata-types/src/config/agent.rs b/src/libs/kata-types/src/config/agent.rs index 98ec142f4e..f30ab9a238 100644 --- a/src/libs/kata-types/src/config/agent.rs +++ b/src/libs/kata-types/src/config/agent.rs @@ -80,6 +80,7 @@ pub struct Agent { pub kernel_modules: Vec, /// container pipe size + #[serde(default)] pub container_pipe_size: u32, } From 2f81f48dae39bceac8087b7ddd7287fcbf0b0fdf Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Thu, 13 Apr 2023 23:18:39 -0700 Subject: [PATCH 07/15] config: Add file under /opt as another location to look for the config Most of kata installation tools use this path for installation, so add this to the paths to look for the configuration.toml file. Signed-off-by: Archana Shinde --- src/libs/kata-types/src/config/default.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/kata-types/src/config/default.rs b/src/libs/kata-types/src/config/default.rs index 1d5e2b4d3c..6b5495c5a6 100644 --- a/src/libs/kata-types/src/config/default.rs +++ b/src/libs/kata-types/src/config/default.rs @@ -16,6 +16,7 @@ lazy_static! { pub static ref DEFAULT_RUNTIME_CONFIGURATIONS: Vec::<&'static str> = vec![ "/etc/kata-containers/configuration.toml", "/usr/share/defaults/kata-containers/configuration.toml", + "/opt/kata/share/defaults/kata-containers/configuration.toml", ]; } From 9a94f1f149a3bb35e7e73b410949814c477fa7e6 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Thu, 13 Apr 2023 23:24:03 -0700 Subject: [PATCH 08/15] make: Export VERSION and COMMIT These will be consumed by kata-ctl, so export these so that they can be used to replace variables available to the rust binary. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/Makefile | 8 +++++--- src/tools/kata-ctl/src/ops/version.rs.in | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/tools/kata-ctl/Makefile b/src/tools/kata-ctl/Makefile index 60abae34b8..fbbd5c112a 100644 --- a/src/tools/kata-ctl/Makefile +++ b/src/tools/kata-ctl/Makefile @@ -12,10 +12,10 @@ PROJECT_COMPONENT = kata-ctl TARGET = $(PROJECT_COMPONENT) VERSION_FILE := ./VERSION -VERSION := $(shell grep -v ^\# $(VERSION_FILE)) +export VERSION := $(shell grep -v ^\# $(VERSION_FILE)) COMMIT_NO := $(shell git rev-parse HEAD 2>/dev/null || true) COMMIT_NO_SHORT := $(shell git rev-parse --short HEAD 2>/dev/null || true) -COMMIT := $(if $(shell git status --porcelain --untracked-files=no 2>/dev/null || true),${COMMIT_NO}-dirty,${COMMIT_NO}) +export COMMIT := $(if $(shell git status --porcelain --untracked-files=no 2>/dev/null || true),${COMMIT_NO}-dirty,${COMMIT_NO}) # Exported to allow cargo to see it export KATA_CTL_VERSION := $(if $(COMMIT),$(VERSION)-$(COMMIT),$(VERSION)) @@ -23,7 +23,9 @@ export KATA_CTL_VERSION := $(if $(COMMIT),$(VERSION)-$(COMMIT),$(VERSION)) GENERATED_CODE = src/ops/version.rs GENERATED_REPLACEMENTS= \ - KATA_CTL_VERSION + KATA_CTL_VERSION \ + VERSION \ + COMMIT GENERATED_FILES := $(GENERATED_CODE) diff --git a/src/tools/kata-ctl/src/ops/version.rs.in b/src/tools/kata-ctl/src/ops/version.rs.in index 052eccf168..e4a5db3c94 100644 --- a/src/tools/kata-ctl/src/ops/version.rs.in +++ b/src/tools/kata-ctl/src/ops/version.rs.in @@ -10,6 +10,8 @@ use clap::crate_version; const KATA_CTL_VERSION: &str = "@KATA_CTL_VERSION@"; +pub const VERSION: &str = "@VERSION@"; +pub const COMMIT: &str = "@COMMIT@"; pub fn get() -> Result { if KATA_CTL_VERSION.trim().is_empty() { From f2ebdd81c2a10e85a211bfefdc7097a99f8362f4 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Thu, 13 Apr 2023 23:26:05 -0700 Subject: [PATCH 09/15] utils: Get rid of spurious print statement left behind. The print was used for debugging, get ris of it. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/utils.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tools/kata-ctl/src/utils.rs b/src/tools/kata-ctl/src/utils.rs index 524821aedf..f05f3bb10d 100644 --- a/src/tools/kata-ctl/src/utils.rs +++ b/src/tools/kata-ctl/src/utils.rs @@ -110,7 +110,6 @@ pub fn get_distro_details(os_release: &str, os_release_clr: &str) -> Result<(Str pub fn get_generic_cpu_details(cpu_info_file: &str) -> Result<(String, String)> { let cpu_info = get_single_cpu_info(cpu_info_file, "\n\n")?; let lines = cpu_info.lines(); - println!("Single cpu info: {}", cpu_info); let mut vendor = String::new(); let mut model = String::new(); From f2b2621dec931921a5d4dfb5f860a09018b88fb7 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Thu, 13 Apr 2023 23:34:32 -0700 Subject: [PATCH 10/15] kata-env: Implement the kata-env command. Command implements functionality to get user environment settings. Fixes: #5339 Signed-off-by: Archana Shinde --- src/tools/kata-ctl/Cargo.lock | 12 + src/tools/kata-ctl/Cargo.toml | 2 + src/tools/kata-ctl/src/args.rs | 8 +- src/tools/kata-ctl/src/main.rs | 5 +- src/tools/kata-ctl/src/ops.rs | 1 + src/tools/kata-ctl/src/ops/check_ops.rs | 4 - src/tools/kata-ctl/src/ops/env_ops.rs | 431 ++++++++++++++++++++++++ src/tools/kata-ctl/src/utils.rs | 7 +- 8 files changed, 462 insertions(+), 8 deletions(-) create mode 100644 src/tools/kata-ctl/src/ops/env_ops.rs diff --git a/src/tools/kata-ctl/Cargo.lock b/src/tools/kata-ctl/Cargo.lock index e31c8622d4..333470cc57 100644 --- a/src/tools/kata-ctl/Cargo.lock +++ b/src/tools/kata-ctl/Cargo.lock @@ -742,10 +742,12 @@ dependencies = [ "slog-scope", "strum", "strum_macros", + "sys-info", "tempfile", "test-utils", "thiserror", "tokio", + "toml", "url", "vmm-sys-util", ] @@ -1653,6 +1655,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sys-info" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "take_mut" version = "0.2.2" diff --git a/src/tools/kata-ctl/Cargo.toml b/src/tools/kata-ctl/Cargo.toml index d2fc5fb1ea..642c9a8a8c 100644 --- a/src/tools/kata-ctl/Cargo.toml +++ b/src/tools/kata-ctl/Cargo.toml @@ -25,6 +25,8 @@ serde = { version = "1.0.149", features = ["derive"] } url = "2.3.1" futures = "0.3.24" base64 = "0.13.0" +toml = "0.5.8" +sys-info = "0.9.1" shim-interface = { path = "../../libs/shim-interface"} kata-types = { path = "../../libs/kata-types" } diff --git a/src/tools/kata-ctl/src/args.rs b/src/tools/kata-ctl/src/args.rs index ff489f82b4..84fac00a09 100644 --- a/src/tools/kata-ctl/src/args.rs +++ b/src/tools/kata-ctl/src/args.rs @@ -23,7 +23,7 @@ pub enum Commands { DirectVolume(DirectVolumeCommand), /// Display settings - Env, + Env(EnvArgument), /// Enter into guest VM by debug console Exec(ExecArguments), @@ -69,6 +69,12 @@ pub enum CheckSubCommand { List, } +#[derive(Debug, Args)] +pub struct EnvArgument { + /// Format output as JSON + #[arg(long)] + pub json: bool, +} #[derive(Debug, Args)] pub struct MetricsCommand { #[clap(subcommand)] diff --git a/src/tools/kata-ctl/src/main.rs b/src/tools/kata-ctl/src/main.rs index 980a947719..fe64f10e17 100644 --- a/src/tools/kata-ctl/src/main.rs +++ b/src/tools/kata-ctl/src/main.rs @@ -17,8 +17,9 @@ use std::process::exit; use args::{Commands, KataCtlCli}; use ops::check_ops::{ - handle_check, handle_env, handle_factory, handle_iptables, handle_metrics, handle_version, + handle_check, handle_factory, handle_iptables, handle_metrics, handle_version, }; +use ops::env_ops::handle_env; use ops::exec_ops::handle_exec; use ops::volume_ops::handle_direct_volume; @@ -29,7 +30,7 @@ fn real_main() -> Result<()> { Commands::Check(args) => handle_check(args), Commands::DirectVolume(args) => handle_direct_volume(args), Commands::Exec(args) => handle_exec(args), - Commands::Env => handle_env(), + Commands::Env(args) => handle_env(args), Commands::Factory => handle_factory(), Commands::Iptables(args) => handle_iptables(args), Commands::Metrics(args) => handle_metrics(args), diff --git a/src/tools/kata-ctl/src/ops.rs b/src/tools/kata-ctl/src/ops.rs index d5d4fe1626..f90f55cb25 100644 --- a/src/tools/kata-ctl/src/ops.rs +++ b/src/tools/kata-ctl/src/ops.rs @@ -4,6 +4,7 @@ // pub mod check_ops; +pub mod env_ops; pub mod exec_ops; pub mod version; pub mod volume_ops; diff --git a/src/tools/kata-ctl/src/ops/check_ops.rs b/src/tools/kata-ctl/src/ops/check_ops.rs index f2dbea7025..298e214c55 100644 --- a/src/tools/kata-ctl/src/ops/check_ops.rs +++ b/src/tools/kata-ctl/src/ops/check_ops.rs @@ -107,10 +107,6 @@ pub fn handle_check(checkcmd: CheckArgument) -> Result<()> { Ok(()) } -pub fn handle_env() -> Result<()> { - Ok(()) -} - pub fn handle_factory() -> Result<()> { Ok(()) } diff --git a/src/tools/kata-ctl/src/ops/env_ops.rs b/src/tools/kata-ctl/src/ops/env_ops.rs new file mode 100644 index 0000000000..894cc70202 --- /dev/null +++ b/src/tools/kata-ctl/src/ops/env_ops.rs @@ -0,0 +1,431 @@ +// Copyright (c) 2022 Intel Corporation +// +// SPDX-License-Identifier: Apache-2.0 +// + +// Contains checks that are not architecture-specific + +use crate::arch::arch_specific; +use crate::args::EnvArgument; +use crate::check; +use crate::ops::version; +use crate::utils; +use kata_types::config::TomlConfig; + +use anyhow::{anyhow, Context, Result}; +use serde::{Deserialize, Serialize}; +use std::process::Command; +use sys_info; + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct HostInfo { + #[serde(default)] + available_guest_protection: String, + #[serde(default)] + kernel: String, + #[serde(default)] + architecture: String, + #[serde(default)] + vm_container_capable: bool, + #[serde(default)] + support_vsocks: bool, + #[serde(default)] + distro: DistroInfo, + #[serde(default)] + cpu: CPUInfo, + #[serde(default)] + memory: MemoryInfo, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct DistroInfo { + #[serde(default)] + name: String, + #[serde(default)] + version: String, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct CPUInfo { + #[serde(default)] + vendor: String, + #[serde(default)] + model: String, + #[serde(default)] + cpus: usize, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct MemoryInfo { + #[serde(default)] + total: u64, + #[serde(default)] + available: u64, + #[serde(default)] + free: u64, +} + +// Semantic version for the output of the command. +// +// XXX: Increment for every change to the output format +// (meaning any change to the EnvInfo type). +const FORMAT_VERSION: &str = "0.0.1-kata-ctl"; + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct MetaInfo { + #[serde(default)] + version: String, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct VersionInfo { + #[serde(default)] + semver: String, + #[serde(default)] + commit: String, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct RuntimeConfigInfo { + #[serde(default)] + path: String, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct RuntimeInfo { + #[serde(default)] + path: String, + #[serde(default)] + guest_selinux_label: String, + #[serde(default)] + pub experimental: Vec, + #[serde(default)] + debug: bool, + #[serde(default)] + trace: bool, + #[serde(default)] + disable_guest_seccomp: bool, + #[serde(default)] + disable_new_net_ns: bool, + #[serde(default)] + sandbox_cgroup_only: bool, + #[serde(default)] + static_sandbox_resource_mgmt: bool, + #[serde(default)] + config: RuntimeConfigInfo, + #[serde(default)] + version: VersionInfo, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct AgentInfo { + #[serde(default)] + debug: bool, + #[serde(default)] + trace: bool, +} +// KernelInfo stores kernel details +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct KernelInfo { + #[serde(default)] + path: String, + #[serde(default)] + parameters: String, +} + +// InitrdInfo stores initrd image details +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct InitrdInfo { + #[serde(default)] + path: String, +} + +// ImageInfo stores root filesystem image details +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct ImageInfo { + #[serde(default)] + path: String, +} + +// HypervisorInfo stores hypervisor details +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct HypervisorInfo { + #[serde(default)] + machine_type: String, + #[serde(default)] + machine_accelerators: String, + #[serde(default)] + version: String, + #[serde(default)] + path: String, + #[serde(default)] + block_device_driver: String, + #[serde(default)] + entropy_source: String, + #[serde(default)] + shared_fs: String, + #[serde(default)] + virtio_fs_daemon: String, + #[serde(default)] + msize_9p: u32, + #[serde(default)] + memory_slots: u32, + #[serde(default)] + pcie_root_port: u32, + #[serde(default)] + hotplug_vfio_on_rootbus: bool, + #[serde(default)] + debug: bool, + #[serde(default)] + enable_iommu: bool, + #[serde(default)] + enable_iommu_platform: bool, + #[serde(default)] + default_vcpus: i32, + #[serde(default)] + cpu_features: String, +} + +// EnvInfo collects all information that will be displayed by the +// env command. +// +// XXX: Any changes must be coupled with a change to formatVersion. +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct EnvInfo { + #[serde(default)] + kernel: KernelInfo, + #[serde(default)] + meta: MetaInfo, + #[serde(default)] + image: ImageInfo, + #[serde(default)] + initrd: InitrdInfo, + #[serde(default)] + hypervisor: HypervisorInfo, + #[serde(default)] + runtime: RuntimeInfo, + #[serde(default)] + host: HostInfo, + #[serde(default)] + agent: AgentInfo, +} + +pub fn get_meta_info() -> MetaInfo { + MetaInfo { + version: String::from(FORMAT_VERSION), + } +} + +pub fn get_memory_info() -> Result { + let mem_info = sys_info::mem_info().context("get host memory information")?; + Ok(MemoryInfo { + total: mem_info.total, + available: mem_info.avail, + free: mem_info.free, + }) +} + +fn get_host_info() -> Result { + let host_kernel_version = utils::get_kernel_version(utils::PROC_VERSION_FILE)?; + let (host_distro_name, host_distro_version) = + utils::get_distro_details(utils::OS_RELEASE, utils::OS_RELEASE_CLR)?; + let (cpu_vendor, cpu_model) = utils::get_generic_cpu_details(check::PROC_CPUINFO)?; + + let host_distro = DistroInfo { + name: host_distro_name, + version: host_distro_version, + }; + + let cores: usize = std::thread::available_parallelism() + .context("get available parallelism")? + .into(); + + let host_cpu = CPUInfo { + vendor: cpu_vendor, + model: cpu_model, + cpus: cores, + }; + + let memory_info = get_memory_info()?; + + let guest_protection = + arch_specific::available_guest_protection().map_err(|e| anyhow!(e.to_string()))?; + + let guest_protection = guest_protection.to_string(); + + let support_vsocks = utils::supports_vsocks(utils::VHOST_VSOCK_DEVICE)?; + + Ok(HostInfo { + kernel: host_kernel_version, + architecture: String::from(std::env::consts::ARCH), + distro: host_distro, + cpu: host_cpu, + memory: memory_info, + available_guest_protection: guest_protection, + // TODO: See https://github.com/kata-containers/kata-containers/issues/6727 + vm_container_capable: true, + support_vsocks, + }) +} + +pub fn get_runtime_info(toml_config: &TomlConfig) -> Result { + let version = VersionInfo { + semver: String::from(version::VERSION), + commit: String::from(version::COMMIT), + }; + + let config_path = TomlConfig::get_default_config_file(); + let mut toml_path = String::new(); + if config_path.is_ok() { + let p = config_path?; + let path_str = p.to_str(); + toml_path = match path_str { + Some(s) => String::from(s), + None => String::new(), + }; + } + + Ok(RuntimeInfo { + // TODO: Needs to be implemented: https://github.com/kata-containers/kata-containers/issues/6518 + path: String::from("not implemented yet. See: https://github.com/kata-containers/kata-containers/issues/6518"), + version, + experimental: toml_config.runtime.experimental.clone(), + // TODO: See https://github.com/kata-containers/kata-containers/issues/6667 + guest_selinux_label: String::from("not implemented yet: See https://github.com/kata-containers/kata-containers/issues/6667"), + debug: toml_config.runtime.debug, + trace: toml_config.runtime.enable_tracing, + disable_guest_seccomp: toml_config.runtime.disable_guest_seccomp, + disable_new_net_ns: toml_config.runtime.disable_new_netns, + sandbox_cgroup_only: toml_config.runtime.sandbox_cgroup_only, + static_sandbox_resource_mgmt: toml_config.runtime.static_sandbox_resource_mgmt, + config: RuntimeConfigInfo { path: toml_path }, + } +} + +pub fn get_agent_info(toml_config: &TomlConfig) -> Result { + let agent_config = toml_config + .agent + .get(&toml_config.runtime.agent_name) + .ok_or("could not find agent config in configuration") + .map_err(|e| anyhow!(e))?; + + Ok(AgentInfo { + debug: agent_config.debug, + trace: agent_config.enable_tracing, + }) +} + +pub fn get_command_version(cmd: &str) -> Result { + // Path is empty in case of dragonball hypervisor + if cmd.is_empty() { + return Ok("unknown".to_string()); + } + let output = Command::new(cmd) + .arg("--version") + .output() + .map_err(|e| anyhow!(e))?; + + let version = String::from_utf8(output.stdout).map_err(|e| anyhow!(e))?; + + Ok(version) +} + +pub fn get_hypervisor_info( + toml_config: &TomlConfig, +) -> Result<(HypervisorInfo, ImageInfo, KernelInfo, InitrdInfo)> { + let hypervisor_config = toml_config + .hypervisor + .get(&toml_config.runtime.hypervisor_name) + .ok_or("could not find hypervisor config in configuration") + .map_err(|e| anyhow!(e))?; + + let version = + get_command_version(&hypervisor_config.path).context("error getting hypervisor version")?; + + let hypervisor_info = HypervisorInfo { + machine_type: hypervisor_config.machine_info.machine_type.to_string(), + machine_accelerators: hypervisor_config + .machine_info + .machine_accelerators + .to_string(), + version, + path: hypervisor_config.path.to_string(), + block_device_driver: hypervisor_config + .blockdev_info + .block_device_driver + .to_string(), + entropy_source: hypervisor_config.machine_info.entropy_source.to_string(), + shared_fs: hypervisor_config + .shared_fs + .shared_fs + .clone() + .unwrap_or_else(|| String::from("none")), + virtio_fs_daemon: hypervisor_config.shared_fs.virtio_fs_daemon.to_string(), + msize_9p: hypervisor_config.shared_fs.msize_9p, + memory_slots: hypervisor_config.memory_info.memory_slots, + pcie_root_port: hypervisor_config.device_info.pcie_root_port, + hotplug_vfio_on_rootbus: hypervisor_config.device_info.hotplug_vfio_on_root_bus, + debug: hypervisor_config.debug_info.enable_debug, + enable_iommu: hypervisor_config.device_info.enable_iommu, + enable_iommu_platform: hypervisor_config.device_info.enable_iommu_platform, + default_vcpus: hypervisor_config.cpu_info.default_vcpus, + cpu_features: hypervisor_config.cpu_info.cpu_features.to_string(), + }; + + let image_info = ImageInfo { + path: hypervisor_config.boot_info.image.clone(), + }; + + let kernel_info = KernelInfo { + path: hypervisor_config.boot_info.kernel.to_string(), + parameters: hypervisor_config.boot_info.kernel_params.to_string(), + }; + + let initrd_info = InitrdInfo { + path: hypervisor_config.boot_info.initrd.to_string(), + }; + + Ok((hypervisor_info, image_info, kernel_info, initrd_info)) +} + +pub fn get_env_info(toml_config: &TomlConfig) -> Result { + let metainfo = get_meta_info(); + + let runtime_info = get_runtime_info(toml_config).context("get runtime info")?; + + let agent_info = get_agent_info(toml_config).context("get agent configuration")?; + + let host_info = get_host_info().context("get host information")?; + + let (hypervisor_info, _image_info, kernel_info, initrd_info) = + get_hypervisor_info(toml_config).context("get hypervisor configuration")?; + + let env_info = EnvInfo { + meta: metainfo, + runtime: runtime_info, + kernel: kernel_info, + image: _image_info, + initrd: initrd_info, + hypervisor: hypervisor_info, + host: host_info, + agent: agent_info, + }; + + Ok(env_info) +} + +pub fn handle_env(env_args: EnvArgument) -> Result<()> { + let (toml_config, _) = TomlConfig::load_raw_from_file("").context("load toml config")?; + + let env_info = get_env_info(&toml_config)?; + + if env_args.json { + let serialized_json = serde_json::to_string_pretty(&env_info)?; + println!("{}", serialized_json); + } else { + let toml = toml::to_string(&env_info)?; + println!("{}", toml); + } + + Ok(()) +} diff --git a/src/tools/kata-ctl/src/utils.rs b/src/tools/kata-ctl/src/utils.rs index f05f3bb10d..371b5165d1 100644 --- a/src/tools/kata-ctl/src/utils.rs +++ b/src/tools/kata-ctl/src/utils.rs @@ -145,7 +145,12 @@ pub fn get_generic_cpu_details(cpu_info_file: &str) -> Result<(String, String)> pub const VHOST_VSOCK_DEVICE: &str = "/dev/vhost-vsock"; pub fn supports_vsocks(vsock_path: &str) -> Result { - let metadata = fs::metadata(vsock_path)?; + let metadata = fs::metadata(vsock_path).map_err(|err| { + anyhow!( + "Host system does not support vhost-vsock (try running (`sudo modprobe vhost_vsock`) : {}", + err.to_string() + ) + })?; Ok(metadata.is_file()) } From b1920198bea28e397992750c925273e59683a694 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Sat, 15 Apr 2023 00:46:53 -0700 Subject: [PATCH 11/15] config: Workaround the way agent and hypervisor configs are fetched This is essentially a workaround for the issue: https://github.com/kata-containers/kata-containers/issues/5954 runtime-rs chnages the Kata config format adding agent_name and hypervisor_name which are then used as keys to fetch the agent and hypervisor configs. This will not work for older configs. So use the first entry in the hashmaps to fetch the configs as a workaround while the config change issue is resolved. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/ops/env_ops.rs | 46 ++++++++++++++++++++------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/tools/kata-ctl/src/ops/env_ops.rs b/src/tools/kata-ctl/src/ops/env_ops.rs index 894cc70202..e44892efd8 100644 --- a/src/tools/kata-ctl/src/ops/env_ops.rs +++ b/src/tools/kata-ctl/src/ops/env_ops.rs @@ -299,15 +299,27 @@ pub fn get_runtime_info(toml_config: &TomlConfig) -> Result { sandbox_cgroup_only: toml_config.runtime.sandbox_cgroup_only, static_sandbox_resource_mgmt: toml_config.runtime.static_sandbox_resource_mgmt, config: RuntimeConfigInfo { path: toml_path }, - } + }) } pub fn get_agent_info(toml_config: &TomlConfig) -> Result { - let agent_config = toml_config - .agent - .get(&toml_config.runtime.agent_name) - .ok_or("could not find agent config in configuration") - .map_err(|e| anyhow!(e))?; + // Assign the first entry to the agent config, to make this + // work for configs where agent_name is absent. + // This is a workaround for https://github.com/kata-containers/kata-containers/issues/5954 + let key_val = toml_config.agent.iter().next(); + let mut agent_config = match key_val { + Some(x) => Ok(x.1), + None => Err(anyhow!("Missing agent config")), + }?; + + // If the agent_name config is present, use that + if !&toml_config.runtime.agent_name.is_empty() { + agent_config = toml_config + .agent + .get(&toml_config.runtime.agent_name) + .ok_or("could not find agent config in configuration") + .map_err(|e| anyhow!(e))?; + } Ok(AgentInfo { debug: agent_config.debug, @@ -333,11 +345,23 @@ pub fn get_command_version(cmd: &str) -> Result { pub fn get_hypervisor_info( toml_config: &TomlConfig, ) -> Result<(HypervisorInfo, ImageInfo, KernelInfo, InitrdInfo)> { - let hypervisor_config = toml_config - .hypervisor - .get(&toml_config.runtime.hypervisor_name) - .ok_or("could not find hypervisor config in configuration") - .map_err(|e| anyhow!(e))?; + // Assign the first entry in the hashmap to the hypervisor config, to make this + // work for configs where hypervisor_name is absent. + // This is a workaround for https://github.com/kata-containers/kata-containers/issues/5954 + let key_val = toml_config.hypervisor.iter().next(); + let mut hypervisor_config = match key_val { + Some(x) => Ok(x.1), + None => Err(anyhow!("Missing hypervisor config")), + }?; + + // If hypervisor_name config is present, use that + if !&toml_config.runtime.hypervisor_name.is_empty() { + hypervisor_config = toml_config + .hypervisor + .get(&toml_config.runtime.hypervisor_name) + .ok_or("could not find hypervisor config in configuration") + .map_err(|e| anyhow!(e))?; + } let version = get_command_version(&hypervisor_config.path).context("error getting hypervisor version")?; From b908a780a02b26a70bf9d7aa8b409b3672a74d93 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Tue, 25 Apr 2023 14:21:00 -0700 Subject: [PATCH 12/15] kata-env: Pass cmd option for file path Add ability to write the environment information to a file or stdout if file path is absent. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/args.rs | 3 +++ src/tools/kata-ctl/src/ops/env_ops.rs | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/tools/kata-ctl/src/args.rs b/src/tools/kata-ctl/src/args.rs index 84fac00a09..cc2dc0513e 100644 --- a/src/tools/kata-ctl/src/args.rs +++ b/src/tools/kata-ctl/src/args.rs @@ -74,6 +74,9 @@ pub struct EnvArgument { /// Format output as JSON #[arg(long)] pub json: bool, + /// File to write env output to + #[arg(short = 'f', long = "file")] + pub file: Option, } #[derive(Debug, Args)] pub struct MetricsCommand { diff --git a/src/tools/kata-ctl/src/ops/env_ops.rs b/src/tools/kata-ctl/src/ops/env_ops.rs index e44892efd8..7c6327d475 100644 --- a/src/tools/kata-ctl/src/ops/env_ops.rs +++ b/src/tools/kata-ctl/src/ops/env_ops.rs @@ -14,6 +14,8 @@ use kata_types::config::TomlConfig; use anyhow::{anyhow, Context, Result}; use serde::{Deserialize, Serialize}; +use std::fs::File; +use std::io::{self, Write}; use std::process::Command; use sys_info; @@ -439,16 +441,24 @@ pub fn get_env_info(toml_config: &TomlConfig) -> Result { } pub fn handle_env(env_args: EnvArgument) -> Result<()> { + let mut file: Box = if let Some(path) = env_args.file { + Box::new( + File::create(path.as_str()).with_context(|| format!("Error creating file {}", path))?, + ) + } else { + Box::new(io::stdout()) + }; + let (toml_config, _) = TomlConfig::load_raw_from_file("").context("load toml config")?; let env_info = get_env_info(&toml_config)?; if env_args.json { let serialized_json = serde_json::to_string_pretty(&env_info)?; - println!("{}", serialized_json); + write!(file, "{}", serialized_json)?; } else { let toml = toml::to_string(&env_info)?; - println!("{}", toml); + write!(file, "{}", toml)?; } Ok(()) From 1016bc17b74e2efceacd4889b5086ea98c94f420 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Tue, 25 Apr 2023 15:14:52 -0700 Subject: [PATCH 13/15] config: Add api to fetch config from default config path Add api to fetch config from default config path and use that in kata-ctl tool. Signed-off-by: Archana Shinde --- src/libs/kata-types/src/config/mod.rs | 8 ++++++++ src/tools/kata-ctl/src/ops/env_ops.rs | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libs/kata-types/src/config/mod.rs b/src/libs/kata-types/src/config/mod.rs index 2a696922a5..e73f8b84e6 100644 --- a/src/libs/kata-types/src/config/mod.rs +++ b/src/libs/kata-types/src/config/mod.rs @@ -127,6 +127,14 @@ impl TomlConfig { result } + /// Load raw Kata configuration information from default configuration file. + /// + /// Configuration file is probed according to the default configuration file list + /// default::DEFAULT_RUNTIME_CONFIGURATIONS. + pub fn load_from_default() -> Result<(TomlConfig, PathBuf)> { + Self::load_raw_from_file("") + } + /// Load raw Kata configuration information from configuration files. /// /// If `config_file` is valid, it will used, otherwise a built-in default path list will be diff --git a/src/tools/kata-ctl/src/ops/env_ops.rs b/src/tools/kata-ctl/src/ops/env_ops.rs index 7c6327d475..a0332af85a 100644 --- a/src/tools/kata-ctl/src/ops/env_ops.rs +++ b/src/tools/kata-ctl/src/ops/env_ops.rs @@ -449,7 +449,7 @@ pub fn handle_env(env_args: EnvArgument) -> Result<()> { Box::new(io::stdout()) }; - let (toml_config, _) = TomlConfig::load_raw_from_file("").context("load toml config")?; + let (toml_config, _) = TomlConfig::load_from_default().context("load toml config")?; let env_info = get_env_info(&toml_config)?; From fb40c71a2156f91bc13049e35a7fcbcf793541ed Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Wed, 26 Apr 2023 11:43:58 -0700 Subject: [PATCH 14/15] env: Check for root privileges Check for root privileges early on. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/ops/env_ops.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/tools/kata-ctl/src/ops/env_ops.rs b/src/tools/kata-ctl/src/ops/env_ops.rs index a0332af85a..de8970ad07 100644 --- a/src/tools/kata-ctl/src/ops/env_ops.rs +++ b/src/tools/kata-ctl/src/ops/env_ops.rs @@ -13,6 +13,7 @@ use crate::utils; use kata_types::config::TomlConfig; use anyhow::{anyhow, Context, Result}; +use nix::unistd::Uid; use serde::{Deserialize, Serialize}; use std::fs::File; use std::io::{self, Write}; @@ -441,6 +442,10 @@ pub fn get_env_info(toml_config: &TomlConfig) -> Result { } pub fn handle_env(env_args: EnvArgument) -> Result<()> { + if !Uid::effective().is_root() { + return Err(anyhow!("kata-ctl env command requires root privileges to get host information. Please run as root or use sudo")); + } + let mut file: Box = if let Some(path) = env_args.file { Box::new( File::create(path.as_str()).with_context(|| format!("Error creating file {}", path))?, From 40641928967a95f4fb846d7ff4c508ccb2d4e92e Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Wed, 26 Apr 2023 22:01:03 -0700 Subject: [PATCH 15/15] env: Utilize arch specific functionality to get cpu details Have kata-env call architecture specific function to get cpu details instead of generic function to get cpu details that works only for certain architectures. The functionality for cpu details has been fully implemented for x86_64 and arm architectures, but needs to be implemented for s390 and powerpc. Signed-off-by: Archana Shinde --- src/tools/kata-ctl/src/arch/aarch64/mod.rs | 29 +++++++++++++++++++ .../kata-ctl/src/arch/powerpc64le/mod.rs | 9 ++++++ src/tools/kata-ctl/src/arch/s390x/mod.rs | 9 ++++++ src/tools/kata-ctl/src/arch/x86_64/mod.rs | 5 ++++ src/tools/kata-ctl/src/check.rs | 2 -- src/tools/kata-ctl/src/ops/env_ops.rs | 3 +- src/tools/kata-ctl/src/utils.rs | 4 +-- 7 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/tools/kata-ctl/src/arch/aarch64/mod.rs b/src/tools/kata-ctl/src/arch/aarch64/mod.rs index a6137856fa..7eaf3ccb41 100644 --- a/src/tools/kata-ctl/src/arch/aarch64/mod.rs +++ b/src/tools/kata-ctl/src/arch/aarch64/mod.rs @@ -9,6 +9,7 @@ pub use arch_specific::*; mod arch_specific { use crate::check; use crate::types::*; + use crate::utils; use anyhow::Result; use std::path::Path; @@ -37,6 +38,34 @@ mod arch_specific { Ok(()) } + fn normalize_vendor(vendor: &str) -> String { + match vendor { + "0x41" => String::from("ARM Limited"), + _ => String::from("3rd Party Limited"), + } + } + + fn normalize_model(model: &str) -> String { + match model { + "8" => String::from("v8"), + "7" | "7M" | "?(12)" | "?(13)" | "?(14)" | "?(15)" | "?(16)" | "?(17)" => { + String::from("v7") + } + "6" | "6TEJ" => String::from("v6"), + "5" | "5T" | "5TE" | "5TEJ" => String::from("v5"), + "4" | "4T" => String::from("v4"), + "3" => String::from("v3"), + _ => String::from("unknown"), + } + } + + pub fn get_cpu_details() -> Result<(String, String)> { + let (vendor, model) = utils::get_generic_cpu_details(check::PROC_CPUINFO)?; + let norm_vendor = normalize_vendor(&vendor); + let norm_model = normalize_model(&model); + Ok((norm_vendor, norm_model)) + } + pub fn get_checks() -> Option<&'static [CheckItem<'static>]> { Some(CHECK_LIST) } diff --git a/src/tools/kata-ctl/src/arch/powerpc64le/mod.rs b/src/tools/kata-ctl/src/arch/powerpc64le/mod.rs index 8290dbb13c..fc849c6318 100644 --- a/src/tools/kata-ctl/src/arch/powerpc64le/mod.rs +++ b/src/tools/kata-ctl/src/arch/powerpc64le/mod.rs @@ -9,6 +9,7 @@ pub use arch_specific::*; mod arch_specific { use crate::check; + use crate::utils; use anyhow::Result; pub const ARCH_CPU_VENDOR_FIELD: &str = ""; @@ -24,6 +25,14 @@ mod arch_specific { const PEF_SYS_FIRMWARE_DIR: &str = "/sys/firmware/ultravisor/"; + pub fn get_cpu_details() -> Result<(String, String)> { + utils::get_generic_cpu_details(check::PROC_CPUINFO) + + // TODO: In case of error from get_generic_cpu_details, implement functionality + // to get cpu details specific to powerpc architecture similar + // to the goloang implementation of function getCPUDetails() + } + pub fn available_guest_protection() -> Result { if !Uid::effective().is_root() { return Err(check::ProtectionError::NoPerms); diff --git a/src/tools/kata-ctl/src/arch/s390x/mod.rs b/src/tools/kata-ctl/src/arch/s390x/mod.rs index 7a9940dcf9..929e79c92c 100644 --- a/src/tools/kata-ctl/src/arch/s390x/mod.rs +++ b/src/tools/kata-ctl/src/arch/s390x/mod.rs @@ -10,6 +10,7 @@ pub use arch_specific::*; mod arch_specific { use crate::check; use crate::types::*; + use crate::utils; use anyhow::{anyhow, Result}; use nix::unistd::Uid; use std::collections::HashMap; @@ -144,6 +145,14 @@ mod arch_specific { Ok(false) } + pub fn get_cpu_details() -> Result<(String, String)> { + utils::get_generic_cpu_details(check::PROC_CPUINFO) + + // TODO: In case of error from get_generic_cpu_details, implement functionality + // to get cpu details specific to s390x architecture similar + // to the goloang implementation of function getS390xCPUDetails() + } + #[allow(dead_code)] // Guest protection is not supported on ARM64. pub fn available_guest_protection() -> Result { diff --git a/src/tools/kata-ctl/src/arch/x86_64/mod.rs b/src/tools/kata-ctl/src/arch/x86_64/mod.rs index 0263126249..deafff94f4 100644 --- a/src/tools/kata-ctl/src/arch/x86_64/mod.rs +++ b/src/tools/kata-ctl/src/arch/x86_64/mod.rs @@ -12,6 +12,7 @@ mod arch_specific { use crate::check; use crate::check::{GuestProtection, ProtectionError}; use crate::types::*; + use crate::utils; use anyhow::{anyhow, Result}; use nix::unistd::Uid; use std::fs; @@ -109,6 +110,10 @@ mod arch_specific { Ok(cpu_flags) } + pub fn get_cpu_details() -> Result<(String, String)> { + utils::get_generic_cpu_details(check::PROC_CPUINFO) + } + pub const TDX_SYS_FIRMWARE_DIR: &str = "/sys/firmware/tdx_seam/"; pub const TDX_CPU_FLAG: &str = "tdx"; pub const SEV_KVM_PARAMETER_PATH: &str = "/sys/module/kvm_amd/parameters/sev"; diff --git a/src/tools/kata-ctl/src/check.rs b/src/tools/kata-ctl/src/check.rs index bd5406bb86..8f21f6fabb 100644 --- a/src/tools/kata-ctl/src/check.rs +++ b/src/tools/kata-ctl/src/check.rs @@ -47,7 +47,6 @@ pub const GENERIC_CPU_MODEL_FIELD: &str = "model name"; #[allow(dead_code)] pub const PROC_CPUINFO: &str = "/proc/cpuinfo"; -#[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] fn read_file_contents(file_path: &str) -> Result { let contents = std::fs::read_to_string(file_path)?; Ok(contents) @@ -55,7 +54,6 @@ fn read_file_contents(file_path: &str) -> Result { // get_single_cpu_info returns the contents of the first cpu from // the specified cpuinfo file by parsing based on a specified delimiter -#[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] pub fn get_single_cpu_info(cpu_info_file: &str, substring: &str) -> Result { let contents = read_file_contents(cpu_info_file)?; diff --git a/src/tools/kata-ctl/src/ops/env_ops.rs b/src/tools/kata-ctl/src/ops/env_ops.rs index de8970ad07..05602e479c 100644 --- a/src/tools/kata-ctl/src/ops/env_ops.rs +++ b/src/tools/kata-ctl/src/ops/env_ops.rs @@ -7,7 +7,6 @@ use crate::arch::arch_specific; use crate::args::EnvArgument; -use crate::check; use crate::ops::version; use crate::utils; use kata_types::config::TomlConfig; @@ -232,7 +231,7 @@ fn get_host_info() -> Result { let host_kernel_version = utils::get_kernel_version(utils::PROC_VERSION_FILE)?; let (host_distro_name, host_distro_version) = utils::get_distro_details(utils::OS_RELEASE, utils::OS_RELEASE_CLR)?; - let (cpu_vendor, cpu_model) = utils::get_generic_cpu_details(check::PROC_CPUINFO)?; + let (cpu_vendor, cpu_model) = arch_specific::get_cpu_details()?; let host_distro = DistroInfo { name: host_distro_name, diff --git a/src/tools/kata-ctl/src/utils.rs b/src/tools/kata-ctl/src/utils.rs index 371b5165d1..a5ab39d082 100644 --- a/src/tools/kata-ctl/src/utils.rs +++ b/src/tools/kata-ctl/src/utils.rs @@ -5,9 +5,7 @@ #![allow(dead_code)] -#[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] use crate::arch::arch_specific; -#[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] use crate::check::get_single_cpu_info; use anyhow::{anyhow, Context, Result}; @@ -106,7 +104,7 @@ pub fn get_distro_details(os_release: &str, os_release_clr: &str) -> Result<(Str Ok((name, version)) } -#[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] +#[cfg(any(target_arch = "s390x", target_arch = "x86_64", target_arch = "aarch64"))] pub fn get_generic_cpu_details(cpu_info_file: &str) -> Result<(String, String)> { let cpu_info = get_single_cpu_info(cpu_info_file, "\n\n")?; let lines = cpu_info.lines();