joyent-provisioner 0.3.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 112ca66cf4b1b153f6ec273ff04ba83ae59cd053
4
- data.tar.gz: ea701940d4b0dddd2af5d402c2eac05952bfc88a
3
+ metadata.gz: fa248d1cf9f18ede6e0ad3e8485fe325ba1fc95f
4
+ data.tar.gz: 40f04cc5329317d54febf9ff74317c5dbd26b5ef
5
5
  SHA512:
6
- metadata.gz: 66e9595db1d605ef08471a86eb2632c71a3629f9ad352bb3e831731520870b2cca5733e570b90759b25837d52df81db51aaba068acaeb6d8f7088ecf039d8196
7
- data.tar.gz: fc21b4800f1addad8e44cbc17b1dcbf70398a662594e597f68fb297e5f580fac34545a59413073a220b01c65f8a819ccbfd8e6d1b0c1449bad160356f3ddd9ac
6
+ metadata.gz: a444c2695fdfd38d8af205800c07f49329f10e8daeceef49ca0d127cf8051a41ed2802981fe4615224cf255cafb06a5c0559ea6119d7c54bb4370e04d422be97
7
+ data.tar.gz: 70f817b1523020ed4650f698be20513a65b61371a11549e9b789b7d6773f05aa339b74f5458b3e15640011cca6919fa601e74e41be7a7fc1c374bd77ac7effa2
@@ -20,8 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'mixlib-cli'
22
22
  spec.add_dependency 'chef'
23
- spec.add_dependency 'knife-joyent'
24
- spec.add_dependency 'colorize'
23
+ spec.add_dependency 'knife-joyent', '>= 0.3.4'
25
24
 
26
25
  spec.add_development_dependency 'bundler', '~> 1.3'
27
26
  spec.add_development_dependency 'rake'
@@ -29,4 +28,5 @@ Gem::Specification.new do |spec|
29
28
  spec.add_development_dependency 'guard-rspec'
30
29
  spec.add_development_dependency 'rspec'
31
30
  spec.add_development_dependency 'pry-debugger'
31
+ spec.add_development_dependency 'aruba-doubles'
32
32
  end
@@ -1,12 +1,10 @@
1
1
  module Provisioner
2
2
  end
3
3
 
4
- require 'colorize'
5
-
6
4
  require_relative 'provisioner/usage'
7
5
  require_relative 'provisioner/logger'
8
6
  require_relative 'provisioner/helper'
9
7
  require_relative 'provisioner/configuration'
10
8
  require_relative 'provisioner/host_ip'
11
9
  require_relative 'provisioner/cli'
12
- require_relative 'provisioner/command/base'
10
+ require_relative 'provisioner/command/base'
@@ -24,7 +24,7 @@ class Provisioner::CLI::Bootstrap < Provisioner::CLI
24
24
 
25
25
  if config[:dry]
26
26
  provisioner_command.shell_commands.each do |command|
27
- puts command.colorize(:green)
27
+ puts command
28
28
  end
29
29
  else
30
30
  provisioner_command.run
@@ -11,7 +11,7 @@ class Provisioner::CLI::Provision < Provisioner::CLI
11
11
 
12
12
  if config[:dry]
13
13
  provisioner_command.shell_commands.each do |command|
14
- puts command.colorize(:green)
14
+ puts command
15
15
  end
16
16
  else
17
17
  provisioner_command.run
@@ -3,7 +3,8 @@ module Provisioner
3
3
  class Base
4
4
  attr_accessor :image, :flavor, :distro, :networks, :run_list,
5
5
  :host_sequence, :host_prefix, :environment, :host_suffix,
6
- :host_presuffix, :log_dir, :host_number, :options, :ssh_user
6
+ :host_presuffix, :log_dir, :host_number, :options, :ssh_user,
7
+ :tags
7
8
 
8
9
  def initialize(template_configuration, options = {})
9
10
  @options = options
@@ -51,7 +52,7 @@ module Provisioner
51
52
 
52
53
  def shellout(command)
53
54
  puts "Running provision command:"
54
- puts command.colorize(:green)
55
+ puts command
55
56
  system(command)
56
57
  end
57
58
  end
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module Provisioner
2
4
  module Command
3
5
  class Provision < Base
@@ -14,11 +16,19 @@ module Provisioner
14
16
  "--networks #{networks}",
15
17
  "--environment #{environment}",
16
18
  "--node-name #{host_name}",
17
- ].join(' ')
19
+ ]
20
+
18
21
 
19
22
  log_path = "#{log_dir}/#{host_name}_provision.log"
20
- command << " --run-list #{run_list}" if run_list
21
- command << " 2>&1 > #{log_path} &"
23
+ command << "--run-list #{run_list}" if run_list
24
+ command << "--tags '#{encoded_tags}'" if tags
25
+ command << "2>&1 > #{log_path} &"
26
+
27
+ command.join(' ')
28
+ end
29
+
30
+ def encoded_tags
31
+ JSON.dump(tags)
22
32
  end
23
33
 
24
34
  end
@@ -12,14 +12,14 @@ module Provisioner
12
12
  def self.ips
13
13
  @ips = {}
14
14
  server_list.each do |server|
15
- hostname, ip = server.split(' ')
15
+ hostname, ip = server.split(' ').compact
16
16
  @ips[hostname] = ip
17
17
  end
18
18
  @ips
19
19
  end
20
20
 
21
21
  def self.server_list
22
- @server_list ||= `knife joyent server list | awk '{print $2 " " $6}' | tail +2`.split("\n")
22
+ @server_list ||= `knife joyent server list | awk '{print $2 " " $7}' | tail +2`.split("\n")
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Provisioner
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -4,12 +4,10 @@ describe Provisioner::Command::Provision do
4
4
  let(:configuration) { Provisioner::Configuration.from_path('spec/fixtures/test.yml') }
5
5
 
6
6
  describe '#shell_commands' do
7
-
8
7
  context 'host is specified' do
9
-
10
8
  let(:subject) { Provisioner::Command::Provision.new(template_configuration, number: '1') }
11
- let(:expected_command) { [
12
- 'knife joyent server create',
9
+
10
+ let(:command_options) { [
13
11
  '--image 9ec5c0c-a941-11e2-a7dc-57a6b041988f',
14
12
  '--flavor g3-highmemory-17.125-smartos',
15
13
  '--distro smartos-base64',
@@ -17,8 +15,13 @@ describe Provisioner::Command::Provision do
17
15
  '--environment test',
18
16
  '--node-name memcached-sessions001.test',
19
17
  '--run-list role[joyent]',
18
+ ] }
19
+
20
+ let(:expected_command) { [
21
+ 'knife joyent server create',
22
+ command_options,
20
23
  '2>&1 > ./tmp/memcached-sessions001.test_provision.log &'
21
- ].join(' ') }
24
+ ].flatten.join(' ')}
22
25
 
23
26
  context 'passing options directly' do
24
27
  let(:template_configuration) { {
@@ -33,9 +36,19 @@ describe Provisioner::Command::Provision do
33
36
  log_dir: './tmp',
34
37
  run_list: 'role[joyent]'
35
38
  } }
39
+
36
40
  it 'returns expected command string' do
37
41
  expect(subject.shell_commands).to eq([expected_command])
38
42
  end
43
+
44
+ context 'tags are included' do
45
+ it 'passes tags to knife-joyent' do
46
+ template_configuration[:tags] = {a: 1, b: 2, c: 3}
47
+ command_options << "--tags '{\"a\":1,\"b\":2,\"c\":3}'"
48
+
49
+ expect(subject.shell_commands).to eq([expected_command])
50
+ end
51
+ end
39
52
  end
40
53
 
41
54
  context 'using the template from yaml configuration' do
@@ -1,15 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Provisioner::HostIP do
4
+ describe '.ip_for' do
5
+ let(:header) { "ID Name State Type Image Flavor IPs RAM Disk Tags\n" }
6
+ let(:server001) { "a67c6340-4bf4-11e3-8f96-0800200c9a66 app001.stage running smartmachine sdc:sdc:base64:13.1.0 g3-highmemory-17.125-smartos 1.1.1.1 17.12 GB 420 GB\n" }
7
+ let(:server002) { "eb332d70-4bf4-11e3-8f96-0800200c9a66 app002.stage running smartmachine sdc:sdc:base64:13.1.0 g3-highmemory-17.125-smartos 1.1.1.2 17.12 GB 420 GB\n" }
8
+ let(:servers) { [header, server001, server002].join }
4
9
 
5
- before do
6
- Provisioner::HostIP.stub(:server_list){ ['app001.stage 1.1.1.1', 'app002.stage 1.1.1.2']}
7
- end
8
-
10
+ before do
11
+ double_cmd('knife joyent server list', puts: servers)
12
+ end
9
13
 
10
- describe '.ip_for' do
11
14
  it 'returns the IP address given a hostname' do
12
15
  expect(Provisioner::HostIP.ip_for('app001.stage')).to eq('1.1.1.1')
16
+ expect(Provisioner::HostIP.ip_for('app002.stage')).to eq('1.1.1.2')
13
17
  end
14
18
  end
15
19
  end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,9 @@
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
7
 
8
8
  require 'joyent-provisioner'
9
+ require 'aruba-doubles'
10
+
11
+ require 'support/aruba'
9
12
 
10
13
  RSpec.configure do |config|
11
14
  config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -17,4 +20,15 @@ RSpec.configure do |config|
17
20
  # the seed, which is printed after each run.
18
21
  # --seed 1234
19
22
  config.order = 'random'
23
+
24
+ config.include ArubaDoubles
25
+
26
+ config.before(:each) do
27
+ ArubaDoubles::Double.setup
28
+ end
29
+
30
+ config.after(:each) do
31
+ ArubaDoubles::Double.teardown
32
+ history.clear
33
+ end
20
34
  end
@@ -0,0 +1,5 @@
1
+ module ArubaHelpers
2
+ def self.history
3
+ @history ||= ArubaDoubles::History.new(File.join(ArubaDoubles::Double.bindir, ArubaDoubles::HISTORY_FILE))
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joyent-provisioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-13 00:00:00.000000000 Z
13
+ date: 2013-11-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mixlib-cli
@@ -46,28 +46,14 @@ dependencies:
46
46
  requirements:
47
47
  - - '>='
48
48
  - !ruby/object:Gem::Version
49
- version: '0'
50
- type: :runtime
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - '>='
55
- - !ruby/object:Gem::Version
56
- version: '0'
57
- - !ruby/object:Gem::Dependency
58
- name: colorize
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - '>='
62
- - !ruby/object:Gem::Version
63
- version: '0'
49
+ version: 0.3.4
64
50
  type: :runtime
65
51
  prerelease: false
66
52
  version_requirements: !ruby/object:Gem::Requirement
67
53
  requirements:
68
54
  - - '>='
69
55
  - !ruby/object:Gem::Version
70
- version: '0'
56
+ version: 0.3.4
71
57
  - !ruby/object:Gem::Dependency
72
58
  name: bundler
73
59
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +138,20 @@ dependencies:
152
138
  - - '>='
153
139
  - !ruby/object:Gem::Version
154
140
  version: '0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: aruba-doubles
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
155
  description: Wrapper gem around provisioning clusters of servers on Joyent cloud
156
156
  email:
157
157
  - kigster@gmail.com
@@ -195,6 +195,7 @@ files:
195
195
  - spec/provisioner/configuration_spec.rb
196
196
  - spec/provisioner/host_ip_spec.rb
197
197
  - spec/spec_helper.rb
198
+ - spec/support/aruba.rb
198
199
  homepage: ''
199
200
  licenses:
200
201
  - MIT
@@ -215,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
216
  version: '0'
216
217
  requirements: []
217
218
  rubyforge_project:
218
- rubygems_version: 2.0.7
219
+ rubygems_version: 2.0.3
219
220
  signing_key:
220
221
  specification_version: 4
221
222
  summary: Wrapper gem around provisioning clusters of servers on Joyent cloud
@@ -228,3 +229,4 @@ test_files:
228
229
  - spec/provisioner/configuration_spec.rb
229
230
  - spec/provisioner/host_ip_spec.rb
230
231
  - spec/spec_helper.rb
232
+ - spec/support/aruba.rb