7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/stax/keypair.rb', line 7
def self.included(thor)
thor.class_eval do
no_commands do
def key_pair_name
@_key_pair_name ||= stack_name
end
def key_pair_store_name
"#{key_pair_name}.key_pair"
end
def key_pair_describe
keypair(:ls, [key_pair_name], long: true)
rescue Aws::EC2::Errors::InvalidKeyPairNotFound => e
warn(e.message)
end
def key_pair_create
keypair(:create, [key_pair_name], quiet: true).key_material
rescue Aws::EC2::Errors::InvalidKeyPairDuplicate => e
warn(e.message)
nil
end
def key_pair_store
key = key_pair_create or return
param(:put, [key_pair_store_name], value: key, type: 'SecureString', key_id: try(:kms_id), overwrite: true)
end
def key_pair_get
Tempfile.new(stack_name).tap do |file|
key = param(:get, [key_pair_store_name], decrypt: true, quiet: true).first
File.chmod(0400, file.path) file.write(key.value)
file.close
end
end
def key_pair_delete
keypair(:delete, [key_pair_name], yes: true)
param(:delete, [key_pair_store_name], yes: true)
rescue Aws::SSM::Errors::ParameterNotFound
warn("Parameter #{key_pair_store_name} does not exist")
end
end
desc 'key', 'key pair tasks'
method_option :create, type: :boolean, default: false, desc: 'create a new key pair'
method_option :delete, type: :boolean, default: false, desc: 'delete key pair'
def key
if options[:create]
key_pair_store
elsif options[:delete]
key_pair_delete
else
key_pair_describe
end
end
end
end
|