@@ -47,26 +47,27 @@ impl KeyPairManager {
4747 util : & Util ,
4848 key_name : String ,
4949 ) -> Result < KeyPairInfo , EC2Error > {
50- let ( key_pair, material) = ec2
51- . create_key_pair ( key_name. clone ( ) )
52- . await
53- . map_err ( |e| e . add_message ( format ! ( "Couldn't create key {key_name}" ) ) ) ?;
50+ let ( key_pair, material) = ec2. create_key_pair ( key_name . clone ( ) ) . await . map_err ( |e| {
51+ self . key_pair = KeyPairInfo :: builder ( ) . key_name ( key_name . clone ( ) ) . build ( ) ;
52+ e . add_message ( format ! ( "Couldn't create key {key_name}" ) )
53+ } ) ?;
5454
5555 let path = self . key_file_dir . join ( format ! ( "{key_name}.pem" ) ) ;
5656
57- util. write_secure ( & key_name, & path, material) ?;
58-
59- self . key_file_path = Some ( path) ;
57+ // Save the key_pair information immediately, so it can get cleaned up if write_secure fails.
58+ self . key_file_path = Some ( path. clone ( ) ) ;
6059 self . key_pair = key_pair. clone ( ) ;
6160
61+ util. write_secure ( & key_name, & path, material) ?;
62+
6263 Ok ( key_pair)
6364 }
6465 // snippet-end:[ec2.rust.create_key.wrapper]
6566
6667 // snippet-start:[ec2.rust.delete_key.wrapper]
6768 pub async fn delete ( self , ec2 : & EC2 , util : & Util ) -> Result < ( ) , EC2Error > {
68- if let Some ( key_pair_id ) = self . key_pair . key_pair_id ( ) {
69- ec2. delete_key_pair ( key_pair_id ) . await ?;
69+ if let Some ( key_name ) = self . key_pair . key_name ( ) {
70+ ec2. delete_key_pair ( key_name ) . await ?;
7071 if let Some ( key_path) = self . key_file_path ( ) {
7172 if let Err ( err) = util. remove ( key_path) {
7273 eprintln ! ( "Failed to remove {key_path:?} ({err:?})" ) ;
0 commit comments