keymaster 0.0.6

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.
data/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ Copyright (c) 2009 Engine Yard, Inc. <http://engineyard.com>
2
+
3
+ All Rights Reserved
@@ -0,0 +1,3 @@
1
+ == keymaster
2
+
3
+ A gem that provides...
@@ -0,0 +1,48 @@
1
+ require 'rake/gempackagetask'
2
+ require 'rubygems/specification'
3
+ require 'date'
4
+ require 'bundler'
5
+
6
+ task :default => :spec
7
+
8
+ spec = Gem::Specification.new do |s|
9
+ s.name = "keymaster"
10
+ s.version = "0.0.6"
11
+ s.author = "Ninjas at Engine Yard"
12
+ s.email = "ninja@engineyard.com"
13
+ s.homepage = "http://example.com"
14
+ s.description = s.summary = "A gem that updates ssh authorized_keys on an instance"
15
+
16
+ s.platform = Gem::Platform::RUBY
17
+ s.has_rdoc = false
18
+
19
+ manifest = Bundler::Environment.load(File.dirname(__FILE__) + '/Gemfile')
20
+ manifest.dependencies.each do |d|
21
+ next unless d.only && d.only.include?('release')
22
+ s.add_dependency(d.name, d.version)
23
+ end
24
+
25
+ s.require_path = 'lib'
26
+ s.files = %w(LICENSE README.md Rakefile TODO) + Dir.glob("{lib}/**/*")
27
+
28
+ s.bindir = "bin"
29
+ s.executables = %w( ey-keymaster )
30
+ end
31
+
32
+ require 'spec/rake/spectask'
33
+ desc "Run specs"
34
+ Spec::Rake::SpecTask.new do |t|
35
+ t.spec_files = FileList['spec/**/*_spec.rb']
36
+ t.spec_opts = %w(-fs --color)
37
+ end
38
+
39
+ Rake::GemPackageTask.new(spec) do |pkg|
40
+ pkg.gem_spec = spec
41
+ end
42
+
43
+ desc "create a gemspec file"
44
+ task :make_spec do
45
+ File.open("#{GEM}.gemspec", "w") do |file|
46
+ file.puts spec.to_ruby
47
+ end
48
+ end
data/TODO ADDED
@@ -0,0 +1,4 @@
1
+ TODO:
2
+ Fix LICENSE with your name
3
+ Fix Rakefile with your name and contact info
4
+ Add your code to lib/<%= name %>.rb
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+
4
+ gem 'keymaster'
5
+
6
+ require File.dirname(__FILE__) + '/../lib/keymaster'
7
+ EY::Keymaster.update!
@@ -0,0 +1,53 @@
1
+ require 'yaml'
2
+ require 'open-uri'
3
+
4
+ DNA_FILE = "/etc/chef/dna.json" unless defined?(DNA_FILE)
5
+
6
+ module EY
7
+ module Keymaster
8
+ def self.fetch(url)
9
+ Request.fetch(url)
10
+ end
11
+
12
+ def self.update!(filename = File.expand_path("~/.ssh/authorized_keys"))
13
+ new_keys = keys
14
+ FileUtils.mkdir_p(File.expand_path("~/.ssh/"))
15
+ File.open(filename, "w") do |fp|
16
+ new_keys.each do |key|
17
+ fp.puts key
18
+ end
19
+ fp.chmod(0600)
20
+ end
21
+ end
22
+
23
+ def self.keys
24
+ (management_keys + amazon_keys + user_keys).uniq
25
+ end
26
+
27
+ def self.management_keys
28
+ response = Request.fetch("http://gatekeeper.ninja-staging.engineyard.com/cloud/root?token=#{instance_token}")
29
+ response.authorized_keys
30
+ end
31
+
32
+ def self.amazon_keys
33
+ [ open('http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key').read ]
34
+ rescue OpenURI::HTTPError
35
+ []
36
+ end
37
+
38
+ def self.user_keys
39
+ dna["user_ssh_key"]
40
+ end
41
+
42
+ def self.instance_token
43
+ dna["reporting_url"].split(/\//).last
44
+ end
45
+
46
+ def self.dna
47
+ YAML.load_file(DNA_FILE)
48
+ end
49
+ end
50
+ end
51
+
52
+ require 'keymaster/response'
53
+ require 'keymaster/request'
@@ -0,0 +1,31 @@
1
+ require 'net/http'
2
+
3
+ module EY::Keymaster
4
+ class Request
5
+ class RequestError < StandardError
6
+ def initialize(code, body)
7
+ @code, @body = code, body
8
+ end
9
+
10
+ def message
11
+ "RequestFailed: #{@code} -> #{@body}"
12
+ end
13
+ end
14
+ def self.fetch(url)
15
+ Response.new(get(url))
16
+ end
17
+
18
+ def self.get(url)
19
+ url = URI.parse(url)
20
+ res = Net::HTTP.start(url.host, url.port) do |http|
21
+ http.get(url.path)
22
+ end
23
+ case res.code
24
+ when "200"
25
+ res.body.split("\n")
26
+ else
27
+ raise RequestError.new(res.code, res.body)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ module EY::Keymaster
2
+ class Response
3
+ attr_accessor :authorized_keys
4
+
5
+ def initialize(authorized_keys)
6
+ @authorized_keys = authorized_keys
7
+ end
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: keymaster
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Ninjas at Engine Yard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-12-11 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A gem that updates ssh authorized_keys on an instance
17
+ email: ninja@engineyard.com
18
+ executables:
19
+ - ey-keymaster
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - LICENSE
26
+ - README.md
27
+ - Rakefile
28
+ - TODO
29
+ - lib/keymaster/response.rb
30
+ - lib/keymaster/request.rb
31
+ - lib/keymaster.rb
32
+ has_rdoc: true
33
+ homepage: http://example.com
34
+ licenses: []
35
+
36
+ post_install_message:
37
+ rdoc_options: []
38
+
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ requirements: []
54
+
55
+ rubyforge_project:
56
+ rubygems_version: 1.3.5
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: A gem that updates ssh authorized_keys on an instance
60
+ test_files: []
61
+