@@ -2040,6 +2040,13 @@ struct Stage1<'a> {
20402040 keys : AppKeys ,
20412041}
20422042
2043+ fn validate_key_provider_inputs ( kind : KeyProviderKind , kms_urls : & [ String ] ) -> Result < ( ) > {
2044+ if kind. is_kms ( ) && kms_urls. is_empty ( ) {
2045+ bail ! ( "No KMS URLs are set" ) ;
2046+ }
2047+ Ok ( ( ) )
2048+ }
2049+
20432050impl < ' a > Stage0 < ' a > {
20442051 fn host_api ( & self ) -> HostApi {
20452052 HostApi :: new (
@@ -2264,6 +2271,7 @@ impl<'a> Stage0<'a> {
22642271
22652272 async fn request_app_keys ( & self ) -> Result < AppKeys > {
22662273 let key_provider = self . shared . app_compose . key_provider ( ) ;
2274+ validate_key_provider_inputs ( key_provider, & self . shared . sys_config . kms_urls ) ?;
22672275 match key_provider {
22682276 KeyProviderKind :: Kms => self . request_app_keys_from_kms ( ) . await ,
22692277 KeyProviderKind :: Local => self . get_keys_from_local_key_provider ( ) . await ,
@@ -3572,3 +3580,19 @@ fn test_unquote_os_release_value_handles_quoting_styles() {
35723580 assert_eq ! ( unquote_os_release_value( "\" " ) , "\" " ) ;
35733581 assert_eq ! ( unquote_os_release_value( "\" a" ) , "\" a" ) ;
35743582}
3583+
3584+ #[ cfg( test) ]
3585+ mod kms_provider_inventory_tests {
3586+ use super :: validate_key_provider_inputs;
3587+ use dstack_types:: KeyProviderKind ;
3588+
3589+ #[ test]
3590+ fn local_key_providers_do_not_require_kms_inventory ( ) {
3591+ let no_urls = Vec :: new ( ) ;
3592+ assert ! ( validate_key_provider_inputs( KeyProviderKind :: Local , & no_urls) . is_ok( ) ) ;
3593+ assert ! ( validate_key_provider_inputs( KeyProviderKind :: Tpm , & no_urls) . is_ok( ) ) ;
3594+ assert ! ( validate_key_provider_inputs( KeyProviderKind :: None , & no_urls) . is_ok( ) ) ;
3595+ let error = validate_key_provider_inputs ( KeyProviderKind :: Kms , & no_urls) . unwrap_err ( ) ;
3596+ assert ! ( error. to_string( ) . contains( "No KMS URLs are set" ) ) ;
3597+ }
3598+ }
0 commit comments