knife-ec2-ssh-config 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,8 @@
1
+ module Knife
2
+ module Ec2
3
+ module SshConfig
4
+ VERSION = "0.0.1"
5
+ MAJOR, MINOR, TINY = VERSION.split('.')
6
+ end
7
+ end
8
+ 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: