bosh-gen 0.3.2 → 0.3.4
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/ChangeLog.md +8 -0
- data/lib/bosh/gen/cli.rb +3 -3
- data/lib/bosh/gen/generators/deployment_manifest_generator.rb +13 -8
- data/lib/bosh/gen/models.rb +2 -1
- data/lib/bosh/gen/models/deployment_manifest.rb +10 -2
- data/lib/bosh/gen/models/release_detection.rb +35 -0
- data/lib/bosh/gen/version.rb +1 -1
- data/spec/fixtures/deployment_manifests/defaults.yml +2 -2
- data/spec/fixtures/releases/some_dev_releases/config/dev.yml +3 -0
- data/spec/fixtures/releases/some_dev_releases/dev_releases/index.yml +6 -0
- data/spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-1.yml +11 -0
- data/spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-10.yml +13 -0
- data/spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-2.yml +13 -0
- data/spec/models/deployment_manifest_spec.rb +3 -1
- data/spec/models/release_detection_spec.rb +28 -0
- metadata +17 -4
data/ChangeLog.md
CHANGED
@@ -22,6 +22,14 @@ Fixed:
|
|
22
22
|
* `job` - ctl file has TODO to remind about PID file
|
23
23
|
* `job` - use the provided release path to detect jobs
|
24
24
|
|
25
|
+
### v0.3.3
|
26
|
+
|
27
|
+
* `manifest` - introspect the release project for release + job information
|
28
|
+
|
29
|
+
### v0.3.4
|
30
|
+
|
31
|
+
* `manifest` - Force us-east-1e to ensure all VMs and volumes are always in the same AZ
|
32
|
+
|
25
33
|
## v0.2
|
26
34
|
|
27
35
|
Added:
|
data/lib/bosh/gen/cli.rb
CHANGED
@@ -60,15 +60,15 @@ module Bosh
|
|
60
60
|
Bosh::Gen::Generators::JobTemplateGenerator.start([job_name, file_path])
|
61
61
|
end
|
62
62
|
|
63
|
-
desc "manifest NAME PATH", "Creates a deployment manifest based on the release located at PATH"
|
63
|
+
desc "manifest NAME PATH UUID", "Creates a deployment manifest based on the release located at PATH"
|
64
64
|
method_option :force, :type => :boolean, :desc => "Force override existing target manifest file"
|
65
65
|
method_option :addresses, :aliases => ['-a'], :type => :array, :desc => "List of IP addresses available for jobs"
|
66
|
-
def manifest(name, release_path)
|
66
|
+
def manifest(name, release_path, uuid)
|
67
67
|
release_path = File.expand_path(release_path)
|
68
68
|
ip_addresses = options["addresses"] || []
|
69
69
|
flags = { :force => options["force"] || false }
|
70
70
|
require 'bosh/gen/generators/deployment_manifest_generator'
|
71
|
-
Bosh::Gen::Generators::DeploymentManifestGenerator.start([name, release_path, ip_addresses, flags])
|
71
|
+
Bosh::Gen::Generators::DeploymentManifestGenerator.start([name, release_path, uuid, ip_addresses, flags])
|
72
72
|
end
|
73
73
|
|
74
74
|
no_tasks do
|
@@ -8,6 +8,7 @@ module Bosh::Gen
|
|
8
8
|
|
9
9
|
argument :name
|
10
10
|
argument :release_path
|
11
|
+
argument :director_uuid
|
11
12
|
argument :ip_addresses
|
12
13
|
argument :flags, :type => :hash
|
13
14
|
|
@@ -24,17 +25,17 @@ module Bosh::Gen
|
|
24
25
|
|
25
26
|
# Create a deployment manifest (initially for AWS only)
|
26
27
|
def create_deployment_manifest
|
27
|
-
cloud_properties = { "instance_type" => "m1.small" }
|
28
|
-
manifest = Bosh::Gen::Models::DeploymentManifest.new(name,
|
28
|
+
cloud_properties = { "instance_type" => "m1.small", "availability_zone" => "us-east-1e" }
|
29
|
+
manifest = Bosh::Gen::Models::DeploymentManifest.new(name, director_uuid, release_properties, cloud_properties)
|
29
30
|
manifest.jobs = job_manifests(ip_addresses)
|
30
31
|
create_file manifest_file_name, manifest.to_yaml, :force => flags[:force]
|
31
32
|
end
|
32
33
|
|
33
34
|
private
|
34
|
-
def
|
35
|
-
|
35
|
+
def release_detector
|
36
|
+
@release_detector ||= Bosh::Gen::Models::ReleaseDetection.new(release_path)
|
36
37
|
end
|
37
|
-
|
38
|
+
|
38
39
|
# Whether +name+ contains .yml suffix or nor, returns a .yml filename for manifest to be generated
|
39
40
|
def manifest_file_name
|
40
41
|
basename = name.gsub(/\.yml/, '') + ".yml"
|
@@ -50,11 +51,15 @@ module Bosh::Gen
|
|
50
51
|
jobs
|
51
52
|
end
|
52
53
|
|
53
|
-
# Return list of job names
|
54
|
+
# Return list of job names
|
54
55
|
def detect_jobs
|
55
|
-
|
56
|
+
release_detector.latest_dev_release_job_names
|
57
|
+
end
|
58
|
+
|
59
|
+
# The "release" aspect of the manifest, which has two keys: name, version
|
60
|
+
def release_properties
|
61
|
+
release_detector.latest_dev_release_properties
|
56
62
|
end
|
57
|
-
|
58
63
|
end
|
59
64
|
end
|
60
65
|
end
|
data/lib/bosh/gen/models.rb
CHANGED
@@ -4,7 +4,7 @@ module Bosh::Gen::Models
|
|
4
4
|
class DeploymentManifest
|
5
5
|
attr_reader :manifest
|
6
6
|
|
7
|
-
def initialize(name, director_uuid, cloud_properties)
|
7
|
+
def initialize(name, director_uuid, release_properties, cloud_properties)
|
8
8
|
@manifest = {}
|
9
9
|
@cloud_properties = cloud_properties
|
10
10
|
@security_groups = ["default"]
|
@@ -12,7 +12,7 @@ module Bosh::Gen::Models
|
|
12
12
|
@stemcell = { "name" => "bosh-stemcell", "version" => @stemcell_version }
|
13
13
|
manifest["name"] = name
|
14
14
|
manifest["director_uuid"] = director_uuid
|
15
|
-
manifest["release"] =
|
15
|
+
manifest["release"] = release_properties.dup
|
16
16
|
manifest["compilation"] = {
|
17
17
|
"workers" => 10,
|
18
18
|
"network" => "default",
|
@@ -50,6 +50,14 @@ module Bosh::Gen::Models
|
|
50
50
|
manifest["properties"] = {}
|
51
51
|
end
|
52
52
|
|
53
|
+
# Each item of +jobs+ is a hash.
|
54
|
+
# The minimum hash is:
|
55
|
+
# { "name" => "jobname" }
|
56
|
+
# This is the equivalent to:
|
57
|
+
# { "name" => "jobname", "template" => "jobname", "instances" => 1}
|
58
|
+
#
|
59
|
+
# A +jobs+ item can also include a +"static_ips" item, which is an array of strings:
|
60
|
+
# { "name" => "jobname", "static_ips" => ['1.2.3.4', '9.8.7.6']}
|
53
61
|
def jobs=(jobs)
|
54
62
|
total_instances = 0
|
55
63
|
manifest["jobs"] = []
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
module Bosh::Gen::Models
|
4
|
+
class ReleaseDetection
|
5
|
+
attr_reader :release_path
|
6
|
+
attr_reader :latest_dev_release
|
7
|
+
|
8
|
+
def initialize(release_path)
|
9
|
+
@release_path = release_path
|
10
|
+
|
11
|
+
@dev_config = YAML.load_file(File.join(release_path, "config", "dev.yml"))
|
12
|
+
@latest_dev_release_filename = File.expand_path(@dev_config["latest_release_filename"], release_path) # absolute or relative
|
13
|
+
@latest_dev_release = YAML.load_file(@latest_dev_release_filename)
|
14
|
+
end
|
15
|
+
|
16
|
+
def latest_dev_release_name
|
17
|
+
@latest_dev_release["name"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def latest_dev_release_version
|
21
|
+
@latest_dev_release["version"].to_i
|
22
|
+
end
|
23
|
+
|
24
|
+
def latest_dev_release_job_names
|
25
|
+
@latest_dev_release["jobs"].map {|job| job["name"]}
|
26
|
+
end
|
27
|
+
|
28
|
+
def latest_dev_release_properties
|
29
|
+
{
|
30
|
+
"name" => latest_dev_release_name,
|
31
|
+
"version" => latest_dev_release_version
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/bosh/gen/version.rb
CHANGED
@@ -4,7 +4,9 @@ require "bosh/gen/models"
|
|
4
4
|
|
5
5
|
class DeploymentManifestSpec < MiniTest::Spec
|
6
6
|
it "creates 'defaults' manifest document with 2 jobs" do
|
7
|
-
manifest = Bosh::Gen::Models::DeploymentManifest.new("myproj", "UUID",
|
7
|
+
manifest = Bosh::Gen::Models::DeploymentManifest.new("myproj", "UUID",
|
8
|
+
{"name" => "myrelease", "version" => 2},
|
9
|
+
{"instance_type" => "m1.small"})
|
8
10
|
manifest.jobs = [
|
9
11
|
{ "name" => "job-with-ips", "static_ips" => ['1.2.3.4']},
|
10
12
|
{ "name" => "misc"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "minitest/spec"
|
2
|
+
require "minitest-colorize"
|
3
|
+
require "bosh/gen/models"
|
4
|
+
|
5
|
+
class ReleaseDetectionSpec < MiniTest::Spec
|
6
|
+
it "detects latest dev release version" do
|
7
|
+
detector = Bosh::Gen::Models::ReleaseDetection.new(fixture_release_path('some_dev_releases'))
|
8
|
+
latest_dev_release_version = detector.latest_dev_release_version
|
9
|
+
latest_dev_release_version.must_equal 10
|
10
|
+
end
|
11
|
+
|
12
|
+
it "creates release properties for deployment manifest" do
|
13
|
+
detector = Bosh::Gen::Models::ReleaseDetection.new(fixture_release_path('some_dev_releases'))
|
14
|
+
detector.latest_dev_release_properties.must_equal({
|
15
|
+
"name" => "myrelease",
|
16
|
+
"version" => 10
|
17
|
+
})
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns list of jobs" do
|
21
|
+
detector = Bosh::Gen::Models::ReleaseDetection.new(fixture_release_path('some_dev_releases'))
|
22
|
+
detector.latest_dev_release_job_names.must_equal %w[redis]
|
23
|
+
end
|
24
|
+
|
25
|
+
def fixture_release_path(name)
|
26
|
+
File.expand_path("../../fixtures/releases/#{name}/", __FILE__)
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -144,9 +144,16 @@ files:
|
|
144
144
|
- lib/bosh/gen/generators/package_source_generator.rb
|
145
145
|
- lib/bosh/gen/models.rb
|
146
146
|
- lib/bosh/gen/models/deployment_manifest.rb
|
147
|
+
- lib/bosh/gen/models/release_detection.rb
|
147
148
|
- lib/bosh/gen/version.rb
|
148
149
|
- spec/fixtures/deployment_manifests/defaults.yml
|
150
|
+
- spec/fixtures/releases/some_dev_releases/config/dev.yml
|
151
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/index.yml
|
152
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-1.yml
|
153
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-10.yml
|
154
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-2.yml
|
149
155
|
- spec/models/deployment_manifest_spec.rb
|
156
|
+
- spec/models/release_detection_spec.rb
|
150
157
|
homepage: https://github.com/drnic/bosh-gen
|
151
158
|
licenses: []
|
152
159
|
post_install_message:
|
@@ -161,7 +168,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
168
|
version: '0'
|
162
169
|
segments:
|
163
170
|
- 0
|
164
|
-
hash:
|
171
|
+
hash: 983046583635840744
|
165
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
173
|
none: false
|
167
174
|
requirements:
|
@@ -170,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
177
|
version: '0'
|
171
178
|
segments:
|
172
179
|
- 0
|
173
|
-
hash:
|
180
|
+
hash: 983046583635840744
|
174
181
|
requirements: []
|
175
182
|
rubyforge_project:
|
176
183
|
rubygems_version: 1.8.23
|
@@ -179,4 +186,10 @@ specification_version: 3
|
|
179
186
|
summary: ''
|
180
187
|
test_files:
|
181
188
|
- spec/fixtures/deployment_manifests/defaults.yml
|
189
|
+
- spec/fixtures/releases/some_dev_releases/config/dev.yml
|
190
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/index.yml
|
191
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-1.yml
|
192
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-10.yml
|
193
|
+
- spec/fixtures/releases/some_dev_releases/dev_releases/myrelease-2.yml
|
182
194
|
- spec/models/deployment_manifest_spec.rb
|
195
|
+
- spec/models/release_detection_spec.rb
|