knife-ec2-ssh-config 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/chef/knife/ec2_ssh_config_generate.rb +120 -0
- data/lib/knife-ec2-ssh-config/version.rb +8 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: edb47125b4f3ea94c325651413cce09c6a61b50a
|
4
|
+
data.tar.gz: 2666ecd93e449185e249ae8498371063571dd045
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b021459d86f02115f6d5572506c89e6ff260c2271fbe379dc0a830bdb2bc9073f6f69f0e66d40b2526576bccd4cef01a7f2a9fe477660feb42ff315b83085149
|
7
|
+
data.tar.gz: ff1d36da6227d72695a1a71a7f9bf89cec29e58b4778883ebd971bce5e3d4bcd4eeb696623985112f0df43af66e341c6564c280533896b46b35310b31f87cdb7
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'chef/knife'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class Ec2SshConfigGenerate < Knife
|
6
|
+
include FileUtils
|
7
|
+
SSH_CONFIG_FILE = "#{ENV['HOME']}/.ssh/config"
|
8
|
+
GEN_WARNING = "### This block is auto generated using knife ec2 ssh generate ###"
|
9
|
+
BEGIN_MARKER = "### Knife EC2 ssh hosts - begin ###"
|
10
|
+
END_MARKER = "### Knife EC2 ssh hosts - end ###"
|
11
|
+
|
12
|
+
deps do
|
13
|
+
require 'fog'
|
14
|
+
end
|
15
|
+
|
16
|
+
banner "knife ec2 ssh generate (options)"
|
17
|
+
|
18
|
+
option :aws_credential_file,
|
19
|
+
:long => "--aws-credential-file FILE",
|
20
|
+
:description => "File containing AWS credentials as used by aws cmdline tools",
|
21
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:aws_credential_file] = key }
|
22
|
+
|
23
|
+
option :aws_access_key_id,
|
24
|
+
:short => "-A ID",
|
25
|
+
:long => "--aws-access-key-id KEY",
|
26
|
+
:description => "Your AWS Access Key ID",
|
27
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
|
28
|
+
|
29
|
+
option :aws_secret_access_key,
|
30
|
+
:short => "-K SECRET",
|
31
|
+
:long => "--aws-secret-access-key SECRET",
|
32
|
+
:description => "Your AWS API Secret Access Key",
|
33
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
|
34
|
+
|
35
|
+
option :identity_file,
|
36
|
+
:short => "-i IDENTITY_FILE",
|
37
|
+
:long => "--identity-file IDENTITY_FILE",
|
38
|
+
:description => "The SSH identity file used for authentication"
|
39
|
+
|
40
|
+
option :ssh_user,
|
41
|
+
:short => "-x USERNAME",
|
42
|
+
:long => "--ssh-user USERNAME",
|
43
|
+
:description => "The ssh username",
|
44
|
+
:default => "root"
|
45
|
+
|
46
|
+
def run
|
47
|
+
$stdout.sync = true
|
48
|
+
backup_ssh_file
|
49
|
+
remove_old_config
|
50
|
+
write_config
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def write_config
|
56
|
+
open(SSH_CONFIG_FILE, "a") do | f |
|
57
|
+
f.puts ""
|
58
|
+
f.puts BEGIN_MARKER
|
59
|
+
f.puts GEN_WARNING
|
60
|
+
f.puts ""
|
61
|
+
servers.each do |name, host|
|
62
|
+
if namespace = locate_config_value(:ec2_ssh_namespace)
|
63
|
+
f.puts "Host #{namespace}-#{name}"
|
64
|
+
else
|
65
|
+
f.puts "Host #{name}"
|
66
|
+
end
|
67
|
+
f.puts " HostName #{host}"
|
68
|
+
if user = locate_config_value(:ssh_user)
|
69
|
+
f.puts " User #{user}"
|
70
|
+
end
|
71
|
+
if identity = locate_config_value(:identity_file)
|
72
|
+
f.puts " IdentityFile #{File.expand_path(identity)}"
|
73
|
+
end
|
74
|
+
f.puts ""
|
75
|
+
end
|
76
|
+
f.puts END_MARKER
|
77
|
+
f.puts ""
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def remove_old_config
|
82
|
+
content = open(SSH_CONFIG_FILE).read
|
83
|
+
content.slice! /#{BEGIN_MARKER}\n*.*\n#{END_MARKER}/mi
|
84
|
+
open(SSH_CONFIG_FILE, "w").write(content.strip)
|
85
|
+
end
|
86
|
+
|
87
|
+
def servers
|
88
|
+
unless @servers
|
89
|
+
@servers = {}
|
90
|
+
connection.servers.all.each do |server|
|
91
|
+
@servers[server.tags['Name']] = server.dns_name
|
92
|
+
end
|
93
|
+
end
|
94
|
+
@servers
|
95
|
+
end
|
96
|
+
|
97
|
+
def backup_ssh_file
|
98
|
+
ssh_backup_file = "#{SSH_CONFIG_FILE}-knife-#{Time.now.to_i}"
|
99
|
+
copy_file SSH_CONFIG_FILE, ssh_backup_file
|
100
|
+
ui.info "Backed up ssh config file to #{ssh_backup_file}"
|
101
|
+
end
|
102
|
+
|
103
|
+
def connection
|
104
|
+
@connection ||= begin
|
105
|
+
connection = Fog::Compute.new(
|
106
|
+
:provider => 'AWS',
|
107
|
+
:aws_access_key_id => Chef::Config[:knife][:aws_access_key_id],
|
108
|
+
:aws_secret_access_key => Chef::Config[:knife][:aws_secret_access_key],
|
109
|
+
:region => locate_config_value(:region)
|
110
|
+
)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def locate_config_value(key)
|
115
|
+
key = key.to_sym
|
116
|
+
config[key] || Chef::Config[:knife][key]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knife-ec2-ssh-config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Greg Osuri
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-12-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: fog
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.16.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.16.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Knife plugin to update ssh client config with ec2 instance information
|
56
|
+
email:
|
57
|
+
- greg@overclock.io
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- lib/chef/knife/ec2_ssh_config_generate.rb
|
63
|
+
- lib/knife-ec2-ssh-config/version.rb
|
64
|
+
homepage: http://github.com/gosuri/knife-ec2-ssh-config
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.1.9
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: SSH config file generation support for Chef's knife command
|
88
|
+
test_files: []
|
89
|
+
has_rdoc:
|