spaux 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21a17179cba89adae20a6335220adab158e77f58
4
- data.tar.gz: b37a9735d3b5c9fa7a0a53f6c8b4dbf3dcf46493
3
+ metadata.gz: 466f15ee386ce8a4828c78c2ddd79d237abba028
4
+ data.tar.gz: 33f63a81f23e5b16a956be021578a8cf104d044a
5
5
  SHA512:
6
- metadata.gz: 2dbdb25593bf919cff9dca2e599d26528f8ac75f518ebaa859477ac8ec9b83feb7eb938b4b2468464bdfac119d08f794ac7130eab4c028cbee1e1c23c4e80db4
7
- data.tar.gz: 576e9fcb7f72380d0cd7000e5ed290aed370cf950656cce9bbb6562ded97b58193b1ecd534d32d5f8b13d872bb8a2b0b67758afba731d04ec70038e492764a26
6
+ metadata.gz: 490e90f25221c3c7e3d36527ecc7a92b542253912aafa2958d09fab7a4d568f326032101f00fb9c83387e4ec890257bec5888c6fb4a49c4c92a8f2258ac8f0df
7
+ data.tar.gz: c73694ab180b60e7f51f367e3004b4057345aafc5500471e2ec721810d4d830d8ec73b5d89086f2654fb9e7825914719a3d767390419227c254bae4a1bd754eb
@@ -0,0 +1,30 @@
1
+ {
2
+ "spaux":{
3
+ "machine":{
4
+ "action":"converge",
5
+ "key_name":"fancy",
6
+ "name":"shangrila",
7
+ "runlist":[
8
+ "ufw",
9
+ "hostname",
10
+ "apt",
11
+ "git",
12
+ "users::sysadmins",
13
+ "sudo"
14
+ ]
15
+ },
16
+ "digital_ocean":{
17
+ "bootstrap_options":{
18
+ "flavor_name":"512MB"
19
+ }
20
+ },
21
+ "conf_mgmt":{
22
+ "chef":{
23
+ "endpoint":"https://api.qirtaiba.org/organizations/xanadu",
24
+ "options":{
25
+ "client_name":"xanadu"
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
data/examples/chef.rb ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ :chef_server_url => "https://api.qirtaiba.org/organizations/xanadu",
3
+ :node_name => "xanadu"
4
+ }
data/examples/spaux.rb ADDED
@@ -0,0 +1 @@
1
+ {:chef_private_key_gist_id =>"513395c90bfe499fdc55"}
@@ -19,12 +19,11 @@ class Spaux
19
19
  @config.merge! default_chef_config.merge(chef_config)
20
20
 
21
21
  default_spaux_config = Spaux::default_spaux_config
22
-
23
22
  @spaux_config = default_spaux_config.merge(spaux_config)
24
- #if !@spaux_config.eql?(default_spaux_config)
25
- #trigger a reevalutation of the private key
26
23
 
27
- @config[:raw_key] = Spaux::Chef::RawKey
24
+ @config[:raw_key] = Spaux::Chef::Key.new(@spaux_config).raw_key
25
+ # ugly hack but better than another options...
26
+ redefine_chef_http_authenticator @config[:raw_key]
28
27
 
29
28
  FileUtils.touch @config[:config_file]
30
29
  FileUtils.touch @config[:client_key]
@@ -51,6 +50,15 @@ class Spaux
51
50
  # just ignore chef-client exit
52
51
  end
53
52
  end
53
+
54
+ private
55
+ def redefine_chef_http_authenticator(key)
56
+ ::Chef::HTTP::Authenticator.send(:define_method,
57
+ 'load_signing_key') do |signing_key_filename, raw_key|
58
+ @raw_key = key
59
+ @key = OpenSSL::PKey::RSA.new(@raw_key)
60
+ end
61
+ end
54
62
  end
55
63
  end
56
64
  end
@@ -10,7 +10,7 @@ class Spaux
10
10
 
11
11
  def initialize(config={})
12
12
  @work_dir = ::File.join(ENV['PWD'], 'current')
13
- @config = config.merge(default_spaux_config)
13
+ @config = default_spaux_config.merge(config)
14
14
  @raw_key ||= get_raw_key
15
15
  end
16
16
 
@@ -64,5 +64,3 @@ class Spaux
64
64
  end
65
65
  end
66
66
  end
67
-
68
- Spaux::Chef::RawKey = Spaux::Chef::Key.new.raw_key
@@ -1,21 +1,6 @@
1
1
  require 'chef'
2
2
  require 'chef/application/client'
3
3
 
4
- class Chef
5
- class HTTP
6
- class Authenticator
7
- def load_signing_key(key_file, raw_key = nil)
8
- @raw_key = Spaux::Chef::RawKey
9
- @key = OpenSSL::PKey::RSA.new(@raw_key)
10
- rescue OpenSSL::PKey::RSAError
11
- msg = "The file #{key_file} or :raw_key option does not contain a correctly formatted private key.\n"
12
- msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
13
- raise Chef::Exceptions::InvalidPrivateKey, msg
14
- end
15
- end
16
- end
17
- end
18
-
19
4
  class ChefVault
20
5
  class Item < Chef::DataBagItem
21
6
  def secret
@@ -0,0 +1,52 @@
1
+ require 'thor'
2
+ require 'chef/http/authenticator'
3
+ require 'pry'
4
+ require 'tempfile'
5
+
6
+ class Spaux
7
+ class CLI < Thor
8
+ class SSHSubcommand
9
+ def initialize(*args)
10
+ chef_config = args.shift || {}
11
+ spaux_config = args.shift || {}
12
+
13
+ default_chef_config = Spaux::default_chef_config(:client)
14
+ @config = {}
15
+ @config.merge! default_chef_config.merge(chef_config)
16
+
17
+ default_spaux_config = Spaux::default_spaux_config
18
+ @spaux_config = default_spaux_config.merge(spaux_config)
19
+
20
+ @config[:raw_key] = Spaux::Chef::Key.new(@spaux_config).raw_key
21
+ redefine_chef_http_authenticator @config[:raw_key]
22
+ end
23
+
24
+ def run(nodename, options={})
25
+ begin
26
+ node = ::Chef::Node.load(nodename)
27
+ rescue Net::HTTPServerException => e
28
+ not_found_msg = nodename + ' node could not be found in the server'
29
+ STDERR.puts not_found_msg if e.response.code.eql?('404')
30
+ end
31
+ node_ipaddress = node[:ipaddress]
32
+ node_rsa_public_key = node[:keys][:ssh][:host_rsa_public]
33
+ # write a gem to do this instead of shelling out
34
+ node_key = `ssh-keyscan -H #{node_ipaddress} 2>/dev/null`
35
+ tmp_known_hosts_file = Tempfile.new('tmp_known_hosts_file')
36
+ tmp_known_hosts_file.write(node_key)
37
+ tmp_known_hosts_file.flush
38
+ ssh_cmd = "ssh -o UserKnownHostsFile="
39
+ exec(ssh_cmd + "#{tmp_known_hosts_file.path} #{node_ipaddress}")
40
+ end
41
+
42
+ private
43
+ def redefine_chef_http_authenticator(key)
44
+ ::Chef::HTTP::Authenticator.send(:define_method,
45
+ 'load_signing_key') do |signing_key_filename, raw_key|
46
+ @raw_key = key
47
+ @key = OpenSSL::PKey::RSA.new(@raw_key)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
data/lib/spaux/cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'thor'
2
2
  require 'spaux'
3
+ require 'spaux/cli/ssh_subcommand'
3
4
  require 'tmpdir'
4
5
  require 'fileutils'
5
6
 
@@ -9,17 +10,28 @@ class Spaux
9
10
  option :dir, :desc => 'Working directory', :banner => 'DIRECTORY'
10
11
  option :current, :type => :boolean, :default => true,
11
12
  :desc => 'Create and/or use a working directory in the current directory'
13
+ option :config, :desc => 'Configuration file to use with chef-client',
14
+ :aliases => :c
15
+ option :spaux_config, :desc => 'Configuration file to use with spaux',
16
+ :aliases => :s
12
17
  def converge
13
18
  work_dir = get_work_dir(options)
14
19
  FileUtils.mkdir_p work_dir
15
20
 
16
- client = Spaux::Chef::Client.new(work_dir)
17
- client.run
21
+ begin
22
+ chef_config = parse_config_file(options[:config]) if options[:config]
23
+ spaux_config = parse_config_file(options[:spaux_config]) if options[:spaux_config]
24
+ client = Spaux::Chef::Client.new(work_dir, chef_config, spaux_config)
25
+ client.run
26
+ rescue Errno::ENOENT => e
27
+ ssh_message = 'error: You need to create a ssh keypair'
28
+ STDERR.puts ssh_message if e.message.match(/id_rsa/)
29
+ end
18
30
  end
19
31
  desc 'savekey', 'Show/save private chef key'
20
32
  option :file, :type => :string
21
33
  def savekey
22
- key = Spaux::Chef::RawKey
34
+ key = Spaux::Chef::Key.new.raw_key
23
35
  if !options[:file]
24
36
  puts key
25
37
  else
@@ -35,6 +47,11 @@ class Spaux
35
47
  knife = Spaux::Chef::Knife.new(work_dir, args)
36
48
  knife.run
37
49
  end
50
+ desc 'ssh', 'Connect via ssh to a node'
51
+ def ssh(nodename)
52
+ ssh_cmd = Spaux::CLI::SSHSubcommand.new
53
+ ssh_cmd.run(nodename, options)
54
+ end
38
55
 
39
56
  private
40
57
  def get_work_dir(options)
@@ -52,5 +69,13 @@ class Spaux
52
69
  work_dir = dir
53
70
  end
54
71
  end
72
+ def parse_config_file(file)
73
+ begin
74
+ eval(IO.read(file))
75
+ rescue Errno::ENOENT => e
76
+ puts e.message
77
+ {}
78
+ end
79
+ end
55
80
  end
56
81
  end
data/lib/spaux/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Spaux
2
- VERSION = '0.0.8'
2
+ VERSION = '0.0.9'
3
3
  end
data/spec/spaux_spec.rb CHANGED
@@ -20,6 +20,7 @@ end
20
20
 
21
21
  #describe Spaux::Chef::Key
22
22
  #describe Spaux::Chef::Knife
23
+ #describe Spaux::CLI::SSHSubcommand
23
24
 
24
25
  describe Spaux::CLI do
25
26
  describe '#converge' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spaux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Landaeta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-24 00:00:00.000000000 Z
11
+ date: 2014-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -179,8 +179,11 @@ files:
179
179
  - Rakefile
180
180
  - bin/spaux
181
181
  - examples/attributes.json
182
+ - examples/attributes2.json
183
+ - examples/chef.rb
182
184
  - examples/knife.rb
183
185
  - examples/knife_minimal.rb
186
+ - examples/spaux.rb
184
187
  - lib/spaux.rb
185
188
  - lib/spaux/chef/client.rb
186
189
  - lib/spaux/chef/default/client.rb
@@ -190,6 +193,7 @@ files:
190
193
  - lib/spaux/chef/monkey_patches/client.rb
191
194
  - lib/spaux/chef/monkey_patches/knife.rb
192
195
  - lib/spaux/cli.rb
196
+ - lib/spaux/cli/ssh_subcommand.rb
193
197
  - lib/spaux/config.rb
194
198
  - lib/spaux/version.rb
195
199
  - spaux.gemspec