Skip to content

Commit d2f88c1

Browse files
authored
Rust: EC2 Getting Started fix #7031 invalid OpenOptions creating keyfile (#7054)
* Rust: EC2 Getting Started fix #7031 invalid OpenOptions creating keyfile
1 parent 78d9c6e commit d2f88c1

File tree

5 files changed

+20
-16
lines changed

5 files changed

+20
-16
lines changed

rustv1/examples/ec2/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Code excerpts that show you how to call individual service functions.
5151
- [CreateKeyPair](src/ec2.rs#L41)
5252
- [CreateSecurityGroup](src/ec2.rs#L77)
5353
- [CreateTags](src/ec2.rs#L233)
54-
- [DeleteKeyPair](src/getting_started/key_pair.rs#L66)
54+
- [DeleteKeyPair](src/getting_started/key_pair.rs#L67)
5555
- [DeleteSecurityGroup](src/ec2.rs#L167)
5656
- [DeleteSnapshot](../ebs/src/bin/delete-snapshot.rs#L26)
5757
- [DescribeImages](src/ec2.rs#L179)

rustv1/examples/ec2/src/ec2.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ impl EC2Impl {
6262
// snippet-end:[ec2.rust.list_keys.impl]
6363

6464
// snippet-start:[ec2.rust.delete_key.impl]
65-
pub async fn delete_key_pair(&self, key_pair_id: &str) -> Result<(), EC2Error> {
66-
let key_pair_id: String = key_pair_id.into();
67-
tracing::info!("Deleting key pair {key_pair_id}");
65+
pub async fn delete_key_pair(&self, key_name: &str) -> Result<(), EC2Error> {
66+
let key_name: String = key_name.into();
67+
tracing::info!("Deleting key pair {key_name}");
6868
self.client
6969
.delete_key_pair()
70-
.key_pair_id(key_pair_id)
70+
.key_name(key_name)
7171
.send()
7272
.await?;
7373
Ok(())

rustv1/examples/ec2/src/getting_started/key_pair.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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:?})");

rustv1/examples/ec2/src/getting_started/tests/scenario_with_mocks.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ async fn test_happy_path() {
353353
{
354354
mock_ec2
355355
.expect_delete_key_pair()
356-
.with(eq("kp-12345"))
356+
.with(eq("test_key"))
357357
.returning(|_| Ok(()));
358358

359359
mock_util
@@ -591,7 +591,7 @@ async fn test_unhappy_path_instance_takes_too_long() {
591591
{
592592
mock_ec2
593593
.expect_delete_key_pair()
594-
.with(eq("kp-12345"))
594+
.with(eq("test_key"))
595595
.returning(|_| Ok(()));
596596

597597
mock_util

rustv1/examples/ec2/src/getting_started/util.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ impl UtilImpl {
132132
fn open_file_0600(path: &PathBuf) -> Result<std::fs::File, EC2Error> {
133133
use std::os::unix::fs::OpenOptionsExt;
134134
std::fs::OpenOptions::new()
135+
.write(true)
136+
.create(true)
137+
.truncate(true)
135138
.mode(0o600)
136139
.open(path.clone())
137140
.map_err(|e| EC2Error::new(format!("Failed to create {path:?} ({e:?})")))

0 commit comments

Comments
 (0)