bosh-deployer 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bosh-deployer (0.0.6)
4
+ bosh-deployer (0.0.7)
5
5
  cancun
6
6
  readwritesettings
7
+ recursive-open-struct
7
8
  redcard
8
9
  thor (~> 0.18)
9
10
 
@@ -13,19 +14,19 @@ GEM
13
14
  aws-sdk (1.44.0)
14
15
  json (~> 1.4)
15
16
  nokogiri (>= 1.4.4)
16
- blobstore_client (1.2710.0)
17
+ blobstore_client (1.2719.0)
17
18
  aws-sdk (= 1.44.0)
18
- bosh_common (~> 1.2710.0)
19
- fog (~> 1.14.0)
19
+ bosh_common (~> 1.2719.0)
20
+ fog (~> 1.23.0)
20
21
  httpclient (= 2.4.0)
21
22
  multi_json (~> 1.1)
22
23
  ruby-atmos-pure (~> 1.0.5)
23
- bosh-template (1.2710.0)
24
+ bosh-template (1.2719.0)
24
25
  semi_semantic (~> 1.1.0)
25
- bosh_cli (1.2710.0)
26
- blobstore_client (~> 1.2710.0)
27
- bosh-template (~> 1.2710.0)
28
- bosh_common (~> 1.2710.0)
26
+ bosh_cli (1.2719.0)
27
+ blobstore_client (~> 1.2719.0)
28
+ bosh-template (~> 1.2719.0)
29
+ bosh_common (~> 1.2719.0)
29
30
  highline (~> 1.6.2)
30
31
  httpclient (= 2.4.0)
31
32
  json_pure (~> 1.7)
@@ -36,7 +37,7 @@ GEM
36
37
  netaddr (~> 1.5.0)
37
38
  progressbar (~> 0.9.0)
38
39
  terminal-table (~> 1.4.3)
39
- bosh_common (1.2710.0)
40
+ bosh_common (1.2719.0)
40
41
  semi_semantic (~> 1.1.0)
41
42
  builder (3.2.2)
42
43
  cancun (0.2.2)
@@ -44,23 +45,38 @@ GEM
44
45
  highline-color
45
46
  sourcify
46
47
  diff-lcs (1.2.5)
47
- excon (0.25.3)
48
- file-tail (1.0.12)
49
- tins (~> 0.5)
50
- fog (1.14.0)
48
+ excon (0.39.6)
49
+ file-tail (1.1.0)
50
+ tins (~> 1.0)
51
+ fog (1.23.0)
52
+ fog-brightbox
53
+ fog-core (~> 1.23)
54
+ fog-json
55
+ fog-softlayer
56
+ ipaddress (~> 0.5)
57
+ nokogiri (~> 1.5, >= 1.5.11)
58
+ fog-brightbox (0.5.1)
59
+ fog-core (~> 1.22)
60
+ fog-json
61
+ inflecto
62
+ fog-core (1.24.0)
51
63
  builder
52
- excon (~> 0.25.0)
53
- formatador (~> 0.2.0)
64
+ excon (~> 0.38)
65
+ formatador (~> 0.2)
54
66
  mime-types
55
- multi_json (~> 1.0)
56
67
  net-scp (~> 1.1)
57
68
  net-ssh (>= 2.1.3)
58
- nokogiri (~> 1.5)
59
- ruby-hmac
69
+ fog-json (1.0.0)
70
+ multi_json (~> 1.0)
71
+ fog-softlayer (0.3.18)
72
+ fog-core
73
+ fog-json
60
74
  formatador (0.2.5)
61
75
  highline (1.6.21)
62
- highline-color (0.0.3)
76
+ highline-color (0.0.5)
63
77
  httpclient (2.4.0)
78
+ inflecto (0.0.2)
79
+ ipaddress (0.8.0)
64
80
  json (1.8.1)
65
81
  json_pure (1.8.1)
66
82
  log4r (1.1.10)
@@ -79,6 +95,7 @@ GEM
79
95
  progressbar (0.9.2)
80
96
  rake (10.3.2)
81
97
  readwritesettings (3.0.1)
98
+ recursive-open-struct (0.5.0)
82
99
  redcard (1.1.0)
83
100
  rspec (3.1.0)
84
101
  rspec-core (~> 3.1.0)
@@ -86,20 +103,20 @@ GEM
86
103
  rspec-mocks (~> 3.1.0)
87
104
  rspec-core (3.1.4)
88
105
  rspec-support (~> 3.1.0)
89
- rspec-expectations (3.1.1)
106
+ rspec-expectations (3.1.2)
90
107
  diff-lcs (>= 1.2.0, < 2.0)
91
108
  rspec-support (~> 3.1.0)
92
- rspec-mocks (3.1.1)
109
+ rspec-mocks (3.1.2)
93
110
  rspec-support (~> 3.1.0)
94
- rspec-support (3.1.0)
111
+ rspec-support (3.1.1)
95
112
  ruby-atmos-pure (1.0.5)
96
113
  log4r (>= 1.1.9)
97
114
  ruby-hmac (>= 0.4.0)
98
115
  ruby-hmac (0.4.0)
99
- ruby2ruby (2.1.2)
116
+ ruby2ruby (2.1.3)
100
117
  ruby_parser (~> 3.1)
101
118
  sexp_processor (~> 4.0)
102
- ruby_parser (3.6.2)
119
+ ruby_parser (3.6.3)
103
120
  sexp_processor (~> 4.1)
104
121
  semi_semantic (1.1.0)
105
122
  sexp_processor (4.4.4)
@@ -110,7 +127,7 @@ GEM
110
127
  sexp_processor (>= 3.0.5)
111
128
  terminal-table (1.4.5)
112
129
  thor (0.19.1)
113
- tins (0.13.2)
130
+ tins (1.3.3)
114
131
 
115
132
  PLATFORMS
116
133
  ruby
@@ -29,6 +29,7 @@ Gem::Specification.new do |gem|
29
29
  gem.add_dependency "redcard"
30
30
  gem.add_dependency 'readwritesettings'
31
31
  gem.add_dependency "cancun"
32
+ gem.add_dependency "recursive-open-struct"
32
33
  gem.add_development_dependency "rake"
33
34
  gem.add_development_dependency "rspec"
34
35
  end
@@ -20,8 +20,8 @@ module Bosh::Cli::Command
20
20
  Bosh::Deployer::Cli::Commands::ProvisionStemcells.new.perform
21
21
  end
22
22
 
23
- usage "generate stubs for bosh or cf"
24
- desc "Creates stub file"
23
+ usage "deployer generate stub"
24
+ desc "Creates stub file to be compile with Spiff."
25
25
  def generate_stub(name, path=nil)
26
26
  require "bosh-deployer/cli/commands/generate_stub"
27
27
  Bosh::Deployer::Cli::Commands::GenerateStub.new(name,path).perform
@@ -0,0 +1,78 @@
1
+ require 'bosh-deployer/microbosh_settings'
2
+
3
+ module Bosh::Deployer::BoshSettings
4
+ def microbosh
5
+ @microbosh ||= Bosh::Deployer::MicroboshSettings.load
6
+ end
7
+
8
+ def default_key_name
9
+ @default_key_name ||= ask('Key name:') do |q|
10
+ q.default = 'firstbosh'
11
+ end
12
+ end
13
+
14
+ def private_key
15
+ @private_key ||= ask('Private key:') do |q|
16
+ q.default = '~/.microbosh/ssh/firstbosh.pem'
17
+ end
18
+ end
19
+
20
+ def static_ip_from
21
+ @static_ip_from ||= ask 'Intial available static ip for deployment:'
22
+ end
23
+
24
+ def static_ip_to
25
+ @static_ip_to ||= ask 'Last available static ip for deployment:'
26
+ end
27
+
28
+ def openstack_auth_url
29
+ @openstack_auth_url ||= ask('Openstack auth url:') do |q|
30
+ q.default = microbosh.provider.credentials.openstack_auth_url.gsub('/tokens', '') if microbosh
31
+ end
32
+ end
33
+
34
+ def openstack_username
35
+ @openstack_username ||= ask('Openstack username:') do |q|
36
+ q.default = microbosh.provider.credentials.openstack_username if microbosh
37
+ end
38
+ end
39
+
40
+ def openstack_api_key
41
+ @openstack_api_key ||= ask('Openstack api key:') do |q|
42
+ q.default = microbosh.provider.credentials.openstack_api_key if microbosh
43
+ end
44
+ end
45
+
46
+ def openstack_tenant
47
+ @openstack_tenant ||= ask('Openstack tenant:') do |q|
48
+ q.default = microbosh.provider.credentials.openstack_tenant if microbosh
49
+ end
50
+ end
51
+
52
+ def recursor_ip
53
+ @recursor_ip ||= ask('Recursor ip or host:') do |q|
54
+ q.default = microbosh.address.ip if microbosh
55
+ end
56
+ end
57
+
58
+ def subnet_id
59
+ @subnet_id ||= ask('Subnet ID where it will be deployed:') do |q|
60
+ q.default = microbosh.address.subnet_id if microbosh
61
+ end
62
+ end
63
+
64
+ def gateway
65
+ @gateway ||= ask('Gateway IP:') do |q|
66
+ #UGLY REPLACE ME WITH A REGEX
67
+ q.default = (static_ip_from.split('.')[0..-2] + ['1']).join('.')
68
+ end
69
+ end
70
+
71
+ def range
72
+ @range ||= ask('Ip Range where it will be deployed:') do |q|
73
+ #UGLY REPLACE ME WITH A REGEX
74
+ q.default = (static_ip_from.split('.')[0..-2] + ['0']).join('.') + '/24'
75
+ end
76
+ end
77
+
78
+ end
@@ -1,111 +1,12 @@
1
- require 'erb'
2
- require 'cancun'
3
- require 'cancun/highline'
4
- require 'readwritesettings'
1
+ require 'bosh-deployer/stub'
2
+ require 'bosh-deployer/bosh_settings'
5
3
 
6
4
  module Bosh; module Deployer; end ;end
7
5
 
8
- class Bosh::Deployer::BoshStub
9
- include ::Cancun::Highline
10
- attr_reader :filename
6
+ class Bosh::Deployer::BoshStub < Bosh::Deployer::Stub
7
+ include Bosh::Deployer::BoshSettings
11
8
 
12
- def initialize(path = '~/.bosh-deployer/stubs')
13
- path = path[0..-2] if path[-1] == '/'
14
- @filename = "#{path}/bosh.yml"
15
- end
16
-
17
- def generate
18
- if File.exists?(filename) and !agree "#{filename} already exists, do you want to overwrite it?"
19
- say 'Stub generation cancelled!'
20
- return
21
- end
22
- say_bold 'Provide the following information for your bosh configuration:'
23
- stub = template.result(binding)
24
- say "Saving stub at #{filename}"
25
- File.open(filename, 'w') { |f| f.write(stub) }
26
-
27
- end
28
-
29
- def static_ip_from
30
- @static_ip_from ||= ask 'Intial available static ip for deploying bosh:'
31
- end
32
-
33
- def static_ip_to
34
- @static_ip_to ||= ask 'Last available static ip for deploying bosh:'
35
- end
36
-
37
-
38
- def openstack_auth_url
39
- @openstack_auth_url ||= ask('Openstack auth url:') do |q|
40
- q.default = microbosh.provider.credentials.openstack_auth_url.gsub('/tokens', '') if microbosh
41
- end
42
- end
43
-
44
- def openstack_username
45
- @openstack_username ||= ask('Openstack username:') do |q|
46
- q.default = microbosh.provider.credentials.openstack_username if microbosh
47
- end
48
- end
49
-
50
- def openstack_api_key
51
- @openstack_api_key ||= ask('Openstack api key:') do |q|
52
- q.default = microbosh.provider.credentials.openstack_api_key if microbosh
53
- end
54
- end
55
-
56
- def openstack_tenant
57
- @openstack_tenant ||= ask('Openstack tenant:') do |q|
58
- q.default = microbosh.provider.credentials.openstack_tenant if microbosh
59
- end
60
- end
61
-
62
- def recursor_ip
63
- @recursor_ip ||= ask('Recursor ip or host:') do |q|
64
- q.default = microbosh.address.ip if microbosh
65
- end
66
- end
67
-
68
- def subnet_id
69
- @subnet_id ||= ask('Subnet ID where bosh will be deployed:') do |q|
70
- q.default = microbosh.address.subnet_id if microbosh
71
- end
72
- end
73
-
74
- def gateway
75
- @gateway ||= ask('Gateway IP for bosh:') do |q|
76
- #UGLY REPLACE ME WITH A REGEX
77
- q.default = (static_ip_from.split('.')[0..-2] + ['1']).join('.')
78
- end
79
- end
80
-
81
- def range
82
- @range ||= ask('Gateway IP for bosh:') do |q|
83
- #UGLY REPLACE ME WITH A REGEX
84
- q.default = (static_ip_from.split('.')[0..-2] + ['0']).join('.') + '/24'
85
- end
86
- end
87
-
88
- def default_key_name
89
- @default_key_name ||= ask('Key name:') do |q|
90
- q.default = 'firstbosh'
91
- end
92
- end
93
-
94
- def private_key
95
- @private_key ||= ask('Private key:') do |q|
96
- q.default = '~/.microbosh/ssh/firstbosh.pem'
97
- end
98
- end
99
-
100
- protected
101
-
102
- def template
103
- @template ||= ERB.new( File.read(File.expand_path('../../../stubs/bosh.yml.erb', __FILE__)))
104
- end
105
-
106
- def microbosh
107
- if File.exists?('~/.bootstrap/settings.yml')
108
- @microbosh ||= ReadWriteSettings.new('~/.bootstrap/settings.yml')
109
- end
9
+ def name
10
+ 'bosh'
110
11
  end
111
12
  end
@@ -0,0 +1,16 @@
1
+ require 'bosh-deployer/stub'
2
+ require 'bosh-deployer/bosh_settings'
3
+
4
+ module Bosh; module Deployer; end ;end
5
+
6
+ class Bosh::Deployer::CFStub < Bosh::Deployer::Stub
7
+ include Bosh::Deployer::BoshSettings
8
+
9
+ def name
10
+ 'cloudfoundry'
11
+ end
12
+
13
+ def floating_static_ip
14
+ @floating_static_ip ||= ask('Available floating ip for cf:')
15
+ end
16
+ end
@@ -15,6 +15,11 @@ class Bosh::Deployer::Cli::Commands::GenerateStub
15
15
 
16
16
  protected
17
17
  def stub
18
- Bosh::Deployer::BoshStub.new(path) if name == 'bosh'
18
+ case name
19
+ when 'bosh'
20
+ Bosh::Deployer::BoshStub.new(path)
21
+ when 'cf'
22
+ Bosh::Deployer::CFStub.new(path)
23
+ end
19
24
  end
20
25
  end
@@ -0,0 +1,22 @@
1
+ require 'yaml'
2
+ require 'recursive-open-struct'
3
+
4
+ class Bosh::Deployer::MicroboshSettings < RecursiveOpenStruct
5
+ attr_reader :filepath
6
+
7
+ def initialize(h=nil, args={})
8
+ if h && h.is_a?(String)
9
+ @filepath ||= h
10
+ super(YAML.load_file(filepath)) if File.exists?(filepath)
11
+ else
12
+ @filepath ||= '~/.bootstrap/settings.yml'
13
+ super(h, args)
14
+ end
15
+ end
16
+
17
+ def self.load(filepath = nil)
18
+ new(filepath).tap do |settings|
19
+ return unless settings.to_a
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,47 @@
1
+ require 'erb'
2
+ require 'bosh-deployer/stub'
3
+ require 'cancun'
4
+ require 'cancun/highline'
5
+
6
+ module Bosh; module Deployer; end ;end
7
+
8
+ class Bosh::Deployer::Stub
9
+ include ::Cancun::Highline
10
+
11
+ attr_reader :filename
12
+
13
+ def initialize(path = '~/.bosh-deployer/stubs')
14
+ path = path[0..-2] if path[-1] == '/'
15
+ @filename = "#{path}/#{name}.yml"
16
+ end
17
+
18
+ def name
19
+ raise NotImplementedError
20
+ end
21
+
22
+ def generate
23
+ if File.exists?(filename) and !agree "#{filename} already exists, do you want to overwrite it?"
24
+ say 'Stub generation cancelled!'
25
+ return
26
+ end
27
+
28
+ save_stub
29
+ end
30
+
31
+ protected
32
+ def save_stub
33
+ stub.tap do |s|
34
+ say "Saving stub at #{filename}"
35
+ File.open(filename, 'w') { |f| f.write(s) }
36
+ end
37
+ end
38
+
39
+ def template
40
+ @template ||= ERB.new( File.read(File.expand_path("../../../stubs/#{name}.yml.erb", __FILE__)))
41
+ end
42
+
43
+ def stub
44
+ say_bold "Provide the following information for #{name} configuration:"
45
+ template.result(binding)
46
+ end
47
+ end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Deployer
3
- VERSION = '0.0.6'
3
+ VERSION = '0.0.7'
4
4
  end
5
5
  end
data/lib/bosh-deployer.rb CHANGED
@@ -9,4 +9,6 @@ end
9
9
 
10
10
  require "bosh-deployer/version"
11
11
  require "bosh-deployer/stemcell"
12
+ require "bosh-deployer/stub"
12
13
  require "bosh-deployer/bosh_stub"
14
+ require "bosh-deployer/cf_stub"
@@ -1,29 +1,8 @@
1
- require 'cancun'
1
+ require_relative 'support/helper'
2
2
  require 'bosh-deployer/bosh_stub'
3
+ require 'cancun'
3
4
  require 'yaml'
4
5
 
5
- class Hash
6
- def sort_by_key(recursive = false, &block)
7
- self.keys.sort(&block).reduce({}) do |seed, key|
8
- seed[key] = self[key]
9
- if recursive && seed[key].is_a?(Hash)
10
- seed[key] = seed[key].sort_by_key(true, &block)
11
- end
12
- seed
13
- end
14
- end
15
- end
16
-
17
- def equal_yaml(expected_file, actual_file)
18
- @expected_content = File.read(expected_file)
19
- @actual_content = File.read(actual_file)
20
-
21
- expected = YAML.load(@expected_content).sort_by_key(true).to_a
22
- actual = YAML.load(@actual_content).sort_by_key(true).to_a
23
-
24
- expect(expected).to eq(actual)
25
- end
26
-
27
6
  describe Bosh::Deployer::BoshStub do
28
7
  include ::Cancun::Test
29
8
  before{ init_cancun_test }
@@ -31,25 +10,12 @@ describe Bosh::Deployer::BoshStub do
31
10
  let(:path){ 'tmp/'}
32
11
  let(:bosh_stub){ described_class.new(path) }
33
12
 
34
- describe '#new' do
35
- describe 'when path is given' do
36
- it 'sets the filename to PATH/stubs' do
37
- expect(bosh_stub.filename).to eq('tmp/bosh.yml')
38
- end
39
- end
40
-
41
- describe 'when path is not given' do
42
- let(:bosh_stub){ described_class.new }
43
-
44
- it 'sets the filename to ~/.bosh-deployer/stubs' do
45
- expect(bosh_stub.filename).to eq('~/.bosh-deployer/stubs/bosh.yml')
46
- end
47
- end
48
- end
49
-
50
13
  describe '#generate' do
51
- let(:settings_file) do
52
- File.new('spec/fixtures/bosh-bootstrap/settings.yml')
14
+ let(:microbosh_settings) do
15
+ Bosh::Deployer::MicroboshSettings.new(
16
+ 'spec/fixtures/bosh-bootstrap/settings.yml'
17
+ )
18
+
53
19
  end
54
20
 
55
21
  let(:args) do
@@ -59,14 +25,8 @@ describe Bosh::Deployer::BoshStub do
59
25
  describe 'when .bootstrap/settings.yml exist' do
60
26
  before do
61
27
  `rm -rf tmp ; mkdir tmp`
62
- allow(File).to receive(:exists?).and_call_original
63
- allow(File).to receive(:exists?)
64
- .with('~/.bootstrap/settings.yml').and_return(true)
65
- allow_any_instance_of(ReadWriteSettings)
66
- .to receive(:open).and_call_original
67
- allow_any_instance_of(ReadWriteSettings)
68
- .to receive(:open).with('~/.bootstrap/settings.yml')
69
- .and_return(settings_file)
28
+ allow(Bosh::Deployer::MicroboshSettings)
29
+ .to receive(:load).and_return(microbosh_settings)
70
30
  end
71
31
 
72
32
 
@@ -95,22 +55,5 @@ describe Bosh::Deployer::BoshStub do
95
55
  equal_yaml('spec/fixtures/stubs/bosh.yml', 'tmp/bosh.yml')
96
56
  end
97
57
  end
98
-
99
- describe 'when stub already exists' do
100
- before do
101
- `rm -rf tmp ; mkdir tmp`
102
- `echo 'something' > tmp/bosh.yml`
103
- end
104
-
105
- let(:args){ %w{ n } }
106
-
107
- it 'should not change stub if user does not want to edit it' do
108
- execute do
109
- bosh_stub.generate
110
- end.and_type *args
111
- expect(output).to include('Stub generation cancelled!')
112
- end
113
- end
114
58
  end
115
-
116
59
  end
@@ -0,0 +1,39 @@
1
+ require 'cancun'
2
+ require 'bosh-deployer/cf_stub'
3
+ require_relative 'support/helper'
4
+
5
+
6
+ describe Bosh::Deployer::CFStub do
7
+ include ::Cancun::Test
8
+ before{ init_cancun_test }
9
+
10
+ let(:path){ 'tmp/'}
11
+ let(:cf_stub){ described_class.new(path) }
12
+
13
+ describe '#generate' do
14
+ let(:microbosh_settings) do
15
+ Bosh::Deployer::MicroboshSettings.new(
16
+ 'spec/fixtures/bosh-bootstrap/settings.yml'
17
+ )
18
+ end
19
+ let(:args) do
20
+ ['2.2.2.2', '10.0.0.0/8', '1.2.3.4', 'MICROBOSH_SUBNET_ID', '3.3.3.3']
21
+ end
22
+
23
+ describe 'when .bootstrap/settings.yml exist' do
24
+ before do
25
+ `rm -rf tmp ; mkdir tmp`
26
+ allow(Bosh::Deployer::MicroboshSettings)
27
+ .to receive(:load).and_return(microbosh_settings)
28
+ end
29
+
30
+ it 'should generate the stub correctly' do
31
+ execute do
32
+ cf_stub.generate
33
+ end.and_type *args
34
+ sleep 1 #TODO: develop wait for cmd after and type
35
+ equal_yaml('spec/fixtures/stubs/cloudfoundry.yml', 'tmp/cloudfoundry.yml')
36
+ end
37
+ end
38
+ end
39
+ end