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 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: