bosh_lite_helpers 0.1.0
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 +7 -0
- data/lib/bosh_lite_helpers.rb +2 -0
- data/lib/bosh_lite_helpers/api.rb +126 -0
- data/lib/bosh_lite_helpers/command_runner.rb +32 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 99ac7ab9cd4e4a9bea25e6c90726698387f1a22a
|
4
|
+
data.tar.gz: 69ac7a3bdc56160af17fab36c39af6c47c4080ef
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b2ab7e4c04a962807bf62e8e8aefd87d274bb13218e27bed76e65f3009d17af268a8bc3f8c0bc08f2cb64a0b4268c9692952018fca515f1a6451636632d666a1
|
7
|
+
data.tar.gz: b1bbd407e4918da59693e9346c4c78b56c23643ef9b343d06cc346396131911c020ff2e83f11c758ac7c6d29f8937e4021e1bd7af862610d8578e44aa4d1927b
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'tmpdir'
|
3
|
+
require_relative 'command_runner'
|
4
|
+
|
5
|
+
# BOSH Lite Helpers
|
6
|
+
module BoshLiteHelpers
|
7
|
+
class BoshLiteError < StandardError; end
|
8
|
+
|
9
|
+
# Include this module in your specs
|
10
|
+
module Api
|
11
|
+
attr_writer :command_runner
|
12
|
+
|
13
|
+
def bosh_lite
|
14
|
+
bosh 'target https://192.168.50.4:25555'
|
15
|
+
bosh 'login admin admin'
|
16
|
+
yield
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_release
|
20
|
+
bosh 'create release --force'
|
21
|
+
end
|
22
|
+
|
23
|
+
def delete_deployment(name)
|
24
|
+
return unless bosh_object_exists?(:deployment, name)
|
25
|
+
bosh "delete deployment #{name}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete_release(name)
|
29
|
+
return unless bosh_object_exists?(:release, name)
|
30
|
+
bosh "delete release #{name}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def deploy(manifest_path)
|
34
|
+
bosh "deployment #{manifest_path}"
|
35
|
+
bosh 'deploy'
|
36
|
+
end
|
37
|
+
|
38
|
+
def upload_release
|
39
|
+
ignore_error 'Rebase is attempted without any job or package changes' do
|
40
|
+
bosh 'upload release --rebase'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def upload_stemcell(path)
|
45
|
+
stemcell = stemcell_from_path(path)
|
46
|
+
return if existing_stemcells.include?(stemcell)
|
47
|
+
bosh "upload stemcell #{path}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def with_new_empty_directory
|
51
|
+
old_dir = Dir.pwd
|
52
|
+
begin
|
53
|
+
Dir.mktmpdir do |empty_dir|
|
54
|
+
Dir.chdir(empty_dir)
|
55
|
+
yield
|
56
|
+
end
|
57
|
+
ensure
|
58
|
+
Dir.chdir(old_dir)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def bosh(command)
|
65
|
+
result = command_runner.run "bosh -n #{command}"
|
66
|
+
unless result[:exit_code] == 0
|
67
|
+
fail BoshLiteError, "#{result[:stderr]}\n#{result[:stdout]}"
|
68
|
+
end
|
69
|
+
result[:stdout]
|
70
|
+
end
|
71
|
+
|
72
|
+
def bosh_object_exists?(type, name)
|
73
|
+
ignore_error "No #{type}s" do
|
74
|
+
bosh("#{type}s").lines.any? { |line| line.include?(" #{name} ") }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def command_runner
|
79
|
+
@command_runner ||= CommandRunner.new
|
80
|
+
end
|
81
|
+
|
82
|
+
def existing_stemcells
|
83
|
+
ignore_error 'No stemcells' do
|
84
|
+
columns = first_two_columns(bosh('stemcells'))
|
85
|
+
stemcells = columns.map do |name, version|
|
86
|
+
[name.strip, version.strip.to_i]
|
87
|
+
end
|
88
|
+
stemcells.reject! { |name, _version| name == 'Name' }
|
89
|
+
return stemcell_columns_to_hash(stemcells)
|
90
|
+
end
|
91
|
+
[]
|
92
|
+
end
|
93
|
+
|
94
|
+
def extract_path(url)
|
95
|
+
return Pathname.new(url.path) if url.respond_to?(:path)
|
96
|
+
Pathname.new(url)
|
97
|
+
end
|
98
|
+
|
99
|
+
def first_two_columns(output)
|
100
|
+
columns = output.lines.map do |line|
|
101
|
+
line.split('|')[1..2]
|
102
|
+
end
|
103
|
+
columns.reject { |s| s.empty? }
|
104
|
+
end
|
105
|
+
|
106
|
+
def ignore_error(error_message)
|
107
|
+
yield
|
108
|
+
rescue BoshLiteError => e
|
109
|
+
raise unless e.message.include?(error_message)
|
110
|
+
end
|
111
|
+
|
112
|
+
def stemcell_columns_to_hash(columns)
|
113
|
+
columns.map do |name, version|
|
114
|
+
{ name: name, version: version }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def stemcell_from_path(path)
|
119
|
+
bn = extract_path(path).basename.to_s
|
120
|
+
{
|
121
|
+
name: bn.sub(/stemcell-[0-9]+-/, '').sub('.tgz', ''),
|
122
|
+
version: bn.match(/stemcell-([0-9]+)-/)[1].to_i
|
123
|
+
}
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
module BoshLiteHelpers
|
4
|
+
# Wraps running operating system commands
|
5
|
+
class CommandRunner
|
6
|
+
def run(command, options = {})
|
7
|
+
stdout_lines, stderr_lines, status = [], [], nil
|
8
|
+
puts command unless options[:quiet]
|
9
|
+
Open3.popen3(command) do |_stdin, stdout, stderr, wait_thr|
|
10
|
+
read_output(stdout_lines, stdout, options[:quiet])
|
11
|
+
read_output(stderr_lines, stderr, options[:quiet])
|
12
|
+
status = wait_thr.value
|
13
|
+
end
|
14
|
+
command_result(status.exitstatus, stdout_lines, stderr_lines)
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_output(lines, stream, quiet)
|
18
|
+
line = stream.read
|
19
|
+
return if line.empty?
|
20
|
+
puts line unless quiet
|
21
|
+
lines << line
|
22
|
+
end
|
23
|
+
|
24
|
+
def command_result(exit_code, stdout_lines, stderr_lines)
|
25
|
+
{
|
26
|
+
exit_code: exit_code,
|
27
|
+
stdout: stdout_lines.join(''),
|
28
|
+
stderr: stderr_lines.join('')
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bosh_lite_helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Crump
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bosh_cli
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2624'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.2624'
|
27
|
+
description: Basic wrapper around bosh-lite
|
28
|
+
email: andrew@cloudcredo.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/bosh_lite_helpers.rb
|
34
|
+
- lib/bosh_lite_helpers/api.rb
|
35
|
+
- lib/bosh_lite_helpers/command_runner.rb
|
36
|
+
homepage: https://github.com/cloudcredo/bosh_lite_helpers
|
37
|
+
licenses:
|
38
|
+
- Apache
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 2.2.2
|
57
|
+
signing_key:
|
58
|
+
specification_version: 4
|
59
|
+
summary: Basic wrapper around bosh-lite
|
60
|
+
test_files: []
|