bosh-gen 0.16.2 → 0.17.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.
Files changed (57) hide show
  1. checksums.yaml +13 -5
  2. data/.rspec +3 -0
  3. data/.travis.yml +16 -0
  4. data/ChangeLog.md +110 -89
  5. data/Gemfile +7 -1
  6. data/Guardfile +4 -8
  7. data/README.md +52 -22
  8. data/Rakefile +10 -0
  9. data/bosh-gen.gemspec +7 -5
  10. data/lib/bosh/gen/cli.rb +20 -28
  11. data/lib/bosh/gen/generators/job_generator.rb +9 -10
  12. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/bin/%job_name%_ctl.tt +5 -5
  13. data/lib/bosh/gen/generators/new_release_generator.rb +63 -68
  14. data/lib/bosh/gen/generators/new_release_generator/templates/jobs/%project_name_hyphenated%/templates/bin/%job_name%_ctl.tt +5 -5
  15. data/lib/bosh/gen/generators/new_release_generator/templates/jobs/%project_name_hyphenated%/templates/data/properties.sh.erb +6 -0
  16. data/lib/bosh/gen/generators/new_release_generator/templates/templates/infrastructure-aws-ec2.yml.tt +7 -5
  17. data/lib/bosh/gen/generators/new_release_generator/templates/templates/infrastructure-warden.yml.tt +3 -4
  18. data/lib/bosh/gen/generators/new_release_generator/templates/templates/jobs.yml.tt +3 -0
  19. data/lib/bosh/gen/generators/new_release_generator/templates/templates/make_manifest.tt +18 -2
  20. data/lib/bosh/gen/generators/new_release_generator/templates/templates/stub.yml.tt +2 -1
  21. data/lib/bosh/gen/settings.rb +61 -0
  22. data/lib/bosh/gen/version.rb +1 -1
  23. data/spec/fixtures/deployment_manifests/2_jobs_1_ip_8196_disk_with_numeric.yml +64 -0
  24. data/spec/fixtures/releases/s3test-boshrelease/.gitignore +18 -0
  25. data/spec/fixtures/releases/s3test-boshrelease/README.md +51 -0
  26. data/spec/fixtures/releases/s3test-boshrelease/Rakefile +15 -0
  27. data/spec/fixtures/releases/s3test-boshrelease/config/blobs.yml +1 -0
  28. data/spec/fixtures/releases/s3test-boshrelease/config/final.yml +5 -0
  29. data/spec/fixtures/releases/s3test-boshrelease/jobs/.gitkeep +0 -0
  30. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/monit +5 -0
  31. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/spec +13 -0
  32. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/bin/monit_debugger +13 -0
  33. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/bin/s3test_ctl +36 -0
  34. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/config/.gitkeep +0 -0
  35. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/config/s3test.conf.erb +5 -0
  36. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/data/properties.sh.erb +10 -0
  37. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/helpers/ctl_setup.sh +81 -0
  38. data/spec/fixtures/releases/s3test-boshrelease/jobs/s3test/templates/helpers/ctl_utils.sh +156 -0
  39. data/spec/fixtures/releases/s3test-boshrelease/packages/.gitkeep +0 -0
  40. data/spec/fixtures/releases/s3test-boshrelease/src/.gitkeep +0 -0
  41. data/spec/fixtures/releases/s3test-boshrelease/templates/deployment.yml +35 -0
  42. data/spec/fixtures/releases/s3test-boshrelease/templates/infrastructure-aws-ec2.yml +40 -0
  43. data/spec/fixtures/releases/s3test-boshrelease/templates/infrastructure-warden.yml +107 -0
  44. data/spec/fixtures/releases/s3test-boshrelease/templates/jobs.yml +30 -0
  45. data/spec/fixtures/releases/s3test-boshrelease/templates/make_manifest +54 -0
  46. data/spec/fixtures/releases/s3test-boshrelease/templates/stub.yml +13 -0
  47. data/spec/generators/deployment_manifest_generator_spec.rb +19 -14
  48. data/spec/generators/{jobs/webapp_job_generator_spec.rb → job_generator_spec.rb} +8 -13
  49. data/spec/generators/new_release_generator_spec.rb +70 -0
  50. data/spec/models/bosh_config_spec.rb +3 -3
  51. data/spec/models/deployment_manifest_spec.rb +16 -6
  52. data/spec/models/release_detection_spec.rb +6 -6
  53. data/spec/spec_helper.rb +27 -7
  54. data/spec/support/fog.rb +3 -0
  55. data/spec/{generators → support}/generator_spec_helper.rb +47 -6
  56. metadata +105 -36
  57. data/spec/models/extract_spec.rb +0 -10
@@ -0,0 +1,30 @@
1
+ meta:
2
+ environment: ~
3
+
4
+ update:
5
+ canaries: 1
6
+ max_in_flight: 50
7
+ canary_watch_time: 1000-30000
8
+ update_watch_time: 1000-30000
9
+ serial: false
10
+
11
+ jobs:
12
+ - name: s3test_leader_z1
13
+ template: s3test
14
+ instances: 0
15
+ resource_pool: small_z1
16
+ networks: (( merge ))
17
+ - name: s3test_z1
18
+ template: s3test
19
+ instances: 0
20
+ resource_pool: small_z1
21
+ networks: (( merge ))
22
+ update:
23
+ canaries: 10
24
+ properties:
25
+ s3test:
26
+ leader_address: (( merge ))
27
+
28
+ networks: (( merge ))
29
+
30
+ properties: {}
@@ -0,0 +1,54 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ infrastructure=$1
6
+ template_prefix="s3test"
7
+
8
+ if [ "$infrastructure" != "aws-ec2" ] && \
9
+ [ "$infrastructure" != "warden" ] ; then
10
+ echo "usage: ./make_manifest <aws-ec2|warden>"
11
+ exit 1
12
+ fi
13
+
14
+ shift
15
+
16
+ BOSH_STATUS=$(bosh status)
17
+ DIRECTOR_UUID=$(echo "$BOSH_STATUS" | grep UUID | awk '{print $2}')
18
+ DIRECTOR_CPI=$(echo "$BOSH_STATUS" | grep CPI | awk '{print $2}')
19
+ DIRECTOR_NAME=$(echo "$BOSH_STATUS" | grep Name | awk '{print $2}')
20
+ NAME=$template_prefix-$infrastructure
21
+
22
+ if [[ $DIRECTOR_NAME = "warden" ]]; then
23
+ if [[ $infrastructure != "warden" ]]; then
24
+ echo "Not targeting bosh-lite with warden CPI. Please use 'bosh target' before running this script."
25
+ exit 1
26
+ fi
27
+ fi
28
+
29
+ if [[ $infrastructure = "aws-ec2" ]]; then
30
+ if [[ $DIRECTOR_CPI != "aws" ]]; then
31
+ echo "Not targeting an AWS BOSH. Please use 'bosh target' before running this script."
32
+ exit 1
33
+ fi
34
+ fi
35
+
36
+ templates=$(dirname $0)
37
+ release=$templates/..
38
+ tmpdir=$release/tmp
39
+
40
+ mkdir -p $tmpdir
41
+ cp $templates/stub.yml $tmpdir/stub-with-uuid.yml
42
+ echo $DIRECTOR_NAME $DIRECTOR_CPI $DIRECTOR_UUID
43
+ perl -pi -e "s/PLACEHOLDER-DIRECTOR-UUID/$DIRECTOR_UUID/g" $tmpdir/stub-with-uuid.yml
44
+ perl -pi -e "s/NAME/$NAME/g" $tmpdir/stub-with-uuid.yml
45
+
46
+ spiff merge \
47
+ $templates/deployment.yml \
48
+ $templates/jobs.yml \
49
+ $templates/infrastructure-${infrastructure}.yml \
50
+ $tmpdir/stub-with-uuid.yml \
51
+ $* > $tmpdir/$NAME-manifest.yml
52
+
53
+ bosh deployment $tmpdir/$NAME-manifest.yml
54
+ bosh status
@@ -0,0 +1,13 @@
1
+ ---
2
+ meta:
3
+ environment: NAME
4
+ dns_root: microbosh
5
+ network_name: s3test1
6
+ security_groups:
7
+ - s3test
8
+
9
+ director_uuid: PLACEHOLDER-DIRECTOR-UUID
10
+
11
+ releases:
12
+ - name: s3test
13
+ version: latest
@@ -1,28 +1,20 @@
1
1
  require "spec_helper"
2
- require "generators/generator_spec_helper"
2
+ require "bosh/gen/generators/deployment_manifest_generator"
3
3
 
4
4
  # in a tmp folder:
5
5
  # * run generator
6
6
  # * deployment manifest created
7
7
 
8
8
  # generates dpeloyment manifest for a target release
9
- class DeploymentManifestGeneratorSpec < MiniTest::Spec
10
- include GeneratorSpecHelper
9
+ describe Bosh::Gen::Generators::DeploymentManifestGenerator do
11
10
 
12
- def self.pending(name, &block); end
13
-
14
- def setup
15
- setup_universe
11
+ xit "creates deployment manifest with properties" do
16
12
  setup_project_release("bosh-sample-release")
17
- end
18
-
19
- pending "creates deployment manifest with properties" do
20
13
  release_folder = File.expand_path("../../fixtures/releases/bosh-sample-release", __FILE__)
21
14
  in_home_folder do
22
15
  generate_manifest("wordpress", release_folder)
23
-
24
- File.exist?("wordpress.yml").must_equal(true, "manifest wordpress.yml not created")
25
-
16
+ expect(File.exist?("wordpress.yml")).to eq(true)
17
+
26
18
  manifest = YAML.load_file("wordpress.yml")
27
19
  properties = manifest["properties"]
28
20
  properties.wont_be_nil "manifest properties must be set"
@@ -30,4 +22,17 @@ class DeploymentManifestGeneratorSpec < MiniTest::Spec
30
22
  properties["mysql"]["password"].must_equal 'mysqlpassword'
31
23
  end
32
24
  end
33
- end
25
+
26
+ it "checks for numerics in filenames/properties" do
27
+ release_folder = File.expand_path("../../tmp", __FILE__)
28
+ setup_project_release("s3test-boshrelease")
29
+ expect(File.exist?(File.join(@active_project_folder, "jobs/s3test/spec"))).to eq true
30
+
31
+ dev = YAML.load_file(File.join(@active_project_folder, "config/dev.yml"))
32
+ expect(dev).not_to be_nil
33
+ expect(dev["dev_name"]).to eq "s3test"
34
+
35
+ deployment = YAML.load_file(File.join(@active_project_folder, "templates/deployment.yml"))
36
+ expect(deployment["compilation"]["network"]).to eq("s3test1")
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
1
  require "spec_helper"
2
- require "generators/generator_spec_helper"
2
+ require "bosh/gen/generators/job_generator"
3
3
 
4
4
  # in a tmp folder:
5
5
  # * run generator
@@ -8,21 +8,16 @@ require "generators/generator_spec_helper"
8
8
  # * it shouldn't fail
9
9
 
10
10
  # generates job for a webapp application package
11
- class WebappGeneratorSpec < MiniTest::Spec
12
- include GeneratorSpecHelper
13
-
14
- def self.pending(name, &block); end
15
-
16
- def setup
17
- setup_universe
11
+ describe Bosh::Gen::Generators::JobGenerator do
12
+ before do
18
13
  setup_project_release("bosh-sample-release")
19
14
  end
20
15
 
21
16
  it "creates common job files" do
22
17
  in_project_folder do
23
18
  generate_job("mywebapp")
24
- File.exist?("jobs/mywebapp/monit").must_equal(true, "jobs/mywebapp/monit not created")
25
- File.exist?("jobs/mywebapp/spec").must_equal(true, "jobs/mywebapp/spec not created")
19
+ expect(File.exist?("jobs/mywebapp/monit")).to eq(true)
20
+ expect(File.exist?("jobs/mywebapp/spec")).to eq(true)
26
21
  job_template_exists "mywebapp", "bin/mywebapp_ctl", "bin/mywebapp_ctl"
27
22
  job_template_exists "mywebapp", "bin/monit_debugger", "bin/monit_debugger"
28
23
  job_template_exists "mywebapp", "data/properties.sh.erb", "data/properties.sh"
@@ -34,10 +29,10 @@ class WebappGeneratorSpec < MiniTest::Spec
34
29
  pending "creates job files with rails & nginx templates" do
35
30
  in_project_folder do
36
31
  generate_job("mywebapp", "--purpose", "nginx_rack", '-d', 'nginx', 'ruby', 'myapp')
37
- File.exist?("jobs/mywebapp/monit").must_equal(true, "jobs/mywebapp/monit not created")
38
- File.exist?("jobs/mywebapp/spec").must_equal(true, "jobs/mywebapp/spec not created")
32
+ expect(File.exist?("jobs/mywebapp/monit")).to eq(true)
33
+ expect(File.exist?("jobs/mywebapp/spec")).to eq(true)
39
34
 
40
- job_spec("mywebapp")["packages"].must_equal(%w[nginx ruby myapp], "spec dependencies incorrect")
35
+ expect(job_spec("mywebapp")["packages"]).to eq(%w[nginx ruby myapp])
41
36
 
42
37
  job_template_exists "mywebapp", "bin/mywebapp_ctl", "bin/mywebapp_ctl"
43
38
  job_template_exists "mywebapp", "bin/monit_debugger", "bin/monit_debugger"
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+ require "bosh/gen/generators/new_release_generator"
3
+
4
+ describe Bosh::Gen::Generators::NewReleaseGenerator do
5
+ include Bosh::Gen::Settings
6
+
7
+ it "generates with s3 blobstore" do
8
+ in_home_folder do
9
+ self.settings_dir = "redis-boshrelease/config"
10
+ setting "provider.name", "aws"
11
+ setting "provider.region", "us-west-2"
12
+ setting "provider.credentials.aws_access_key_id", "ACCESS"
13
+ setting "provider.credentials.aws_secret_access_key", "SECRET"
14
+
15
+ generate_new_release 'redis'
16
+ expect(File.directory?("jobs")).to eq(true)
17
+
18
+ config = YAML.load_file("config/final.yml")
19
+ expect(config).to_not be_nil
20
+ expect(config["blobstore"]).to_not be_nil
21
+ expect(config["blobstore"]["options"]).to_not be_nil
22
+ expect(config["blobstore"]["provider"]).to eq("s3")
23
+ expect(config["blobstore"]["options"].keys).to eq(["bucket_name"])
24
+ expect(config["blobstore"]["options"]["bucket_name"]).to eq("redis-boshrelease")
25
+
26
+ config = YAML.load_file("config/private.yml")
27
+ expect(config).to_not be_nil
28
+ expect(config["blobstore"]).to_not be_nil
29
+ expect(config["blobstore"]["s3"]).to_not be_nil
30
+ expect(config["blobstore"]["s3"]["access_key_id"]).to eq("ACCESS")
31
+ expect(config["blobstore"]["s3"]["secret_access_key"]).to eq("SECRET")
32
+ end
33
+ end
34
+
35
+ # TODO: Fog::Errors::MockNotImplemented: Contributions welcome!
36
+ xit "generates with swift blobstore" do
37
+ in_home_folder do
38
+ setting "provider.name", "openstack"
39
+ setting "provider.credentials.openstack_auth_url", "http://10.0.0.2:5000/v2.0/tokens"
40
+ setting "provider.credentials.openstack_username", "USER"
41
+ setting "provider.credentials.openstack_api_key", "PASSWORD"
42
+ setting "provider.credentials.openstack_tenant", "TENANT"
43
+ setting "provider.credentials.openstack_region", "REGION"
44
+
45
+ # TODO: get rid of this prompt from Cyoi::Provider
46
+ setting "provider.options.boot_from_volume", false
47
+
48
+ generate_new_release 'redis'
49
+ expect(File.directory?("jobs")).to eq(true)
50
+
51
+ config = YAML.load_file("config/final.yml")
52
+ expect(config).to_not be_nil
53
+ expect(config["blobstore"]).to_not be_nil
54
+ expect(config["blobstore"]["options"]).to_not be_nil
55
+ expect(config["blobstore"]["provider"]).to eq("swift")
56
+ expect(config["blobstore"]["options"].keys).to eq(["container_name", "swift_provider"])
57
+ expect(config["blobstore"]["options"]["container_name"]).to eq("redis-boshrelease")
58
+
59
+ config = YAML.load_file("config/private.yml")
60
+ expect(config).to_not be_nil
61
+ expect(config["blobstore"]).to_not be_nil
62
+ expect(config["blobstore"]["swift"]["openstack"]).to_not be_nil
63
+ expect(config["blobstore"]["swift"]["openstack"]["openstack_auth_url"]).to eq("http://10.0.0.2:5000/v2.0/tokens")
64
+ expect(config["blobstore"]["swift"]["openstack"].keys).to eq(["openstack_auth_url", "openstack_username", "openstack_api_key", "openstack_tenant", "openstack_region"])
65
+ end
66
+ end
67
+
68
+ # generate_new_release 'redis'
69
+ # generate_new_release 'redis-boshrelease'
70
+ end
@@ -1,11 +1,11 @@
1
1
  require "spec_helper"
2
2
  require "bosh/gen/models"
3
3
 
4
- class BoshConfigSpec < MiniTest::Spec
4
+ describe Bosh::Gen::Models::BoshConfig do
5
5
  it "knows UUID of current target bosh" do
6
6
  fake_config = File.expand_path( \
7
7
  "../../fixtures/bosh_config/multiple_boshes.yml", __FILE__)
8
8
  config = Bosh::Gen::Models::BoshConfig.new(fake_config)
9
- config.target_uuid.must_equal "f734ed1f-6892-4d96-9123-018c830a8543"
9
+ expect(config.target_uuid).to eq "f734ed1f-6892-4d96-9123-018c830a8543"
10
10
  end
11
- end
11
+ end
@@ -1,29 +1,39 @@
1
1
  require "spec_helper"
2
2
  require "bosh/gen/models"
3
3
 
4
- class DeploymentManifestSpec < MiniTest::Spec
4
+ describe Bosh::Gen::Models::DeploymentManifest do
5
5
  it "creates manifest document with 2 jobs, no disk" do
6
- manifest = Bosh::Gen::Models::DeploymentManifest.new("myproj", "UUID",
6
+ manifest = Bosh::Gen::Models::DeploymentManifest.new("myproj", "UUID",
7
7
  {"name" => "myrelease", "version" => 2},
8
8
  {"instance_type" => "m1.small", "static_ips" => ['1.2.3.4', '6.7.8.9']}, {})
9
9
  manifest.jobs = [
10
10
  { "name" => "job-with-ips"},
11
11
  { "name" => "misc"}
12
12
  ]
13
- manifest.to_yaml.must_equal fixture_manifest("2_jobs_2_ips_no_disk")
13
+ expect(manifest.to_yaml).to eq fixture_manifest("2_jobs_2_ips_no_disk")
14
14
  end
15
15
 
16
16
  it "creates manifest document with 2 jobs, with disk" do
17
- manifest = Bosh::Gen::Models::DeploymentManifest.new("myproj", "UUID",
17
+ manifest = Bosh::Gen::Models::DeploymentManifest.new("myproj", "UUID",
18
18
  {"name" => "myrelease", "version" => 2},
19
19
  {"instance_type" => "m1.small", "persistent_disk" => "8196", "static_ips" => ['1.2.3.4']}, {})
20
20
  manifest.jobs = [
21
21
  { "name" => "job-with-ips"},
22
22
  { "name" => "misc"}
23
23
  ]
24
- manifest.to_yaml.must_equal fixture_manifest("2_jobs_1_ip_8196_disk")
24
+ expect(manifest.to_yaml).to eq fixture_manifest("2_jobs_1_ip_8196_disk")
25
25
  end
26
-
26
+ it "creates manifest document with 2 jobs, with disk, numeric in manifest name" do
27
+ manifest = Bosh::Gen::Models::DeploymentManifest.new("s3test", "UUID",
28
+ {"name" => "myrelease", "version" => 2},
29
+ {"instance_type" => "m1.small", "persistent_disk" => "8196", "static_ips" => ['4.3.2.1']}, {})
30
+ manifest.jobs = [
31
+ { "name" => "job-with-ips"},
32
+ { "name" => "misc"}
33
+ ]
34
+ expect(manifest.to_yaml).to eq fixture_manifest("2_jobs_1_ip_8196_disk_with_numeric")
35
+ end
36
+
27
37
  def fixture_manifest(name)
28
38
  File.read(File.expand_path("../../fixtures/deployment_manifests/#{name}.yml", __FILE__))
29
39
  end
@@ -1,23 +1,23 @@
1
1
  require "spec_helper"
2
2
  require "bosh/gen/models"
3
3
 
4
- class ReleaseDetectionSpec < MiniTest::Spec
4
+ describe Bosh::Gen::Models::ReleaseDetection do
5
5
  it "detects latest dev release version" do
6
6
  detector = Bosh::Gen::Models::ReleaseDetection.new(fixture_release_path('some_dev_releases'))
7
7
  latest_dev_release_version = detector.latest_dev_release_version
8
- latest_dev_release_version.must_equal 10
8
+ expect(latest_dev_release_version).to eq 10
9
9
  end
10
-
10
+
11
11
  it "creates release properties for deployment manifest" do
12
12
  detector = Bosh::Gen::Models::ReleaseDetection.new(fixture_release_path('some_dev_releases'))
13
- detector.latest_dev_release_properties.must_equal({
13
+ expect(detector.latest_dev_release_properties).to eq({
14
14
  "name" => "myrelease",
15
15
  "version" => 10
16
16
  })
17
17
  end
18
-
18
+
19
19
  it "returns list of jobs" do
20
20
  detector = Bosh::Gen::Models::ReleaseDetection.new(fixture_release_path('some_dev_releases'))
21
- detector.latest_dev_release_job_names.must_equal %w[redis]
21
+ expect(detector.latest_dev_release_job_names).to eq %w[redis]
22
22
  end
23
23
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,30 @@
1
- require "minitest/spec"
2
- require "minitest-colorize"
1
+ # Copyright (c) 2012-2014 Stark & Wayne, LLC
3
2
 
4
- module FixtureHelpers
5
- def fixture_release_path(name)
6
- File.expand_path("../fixtures/releases/#{name}/", __FILE__)
7
- end
3
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
4
+
5
+ require "rubygems"
6
+ require "bundler"
7
+ Bundler.setup(:default, :test)
8
+
9
+ $:.unshift(File.expand_path("../../lib", __FILE__))
10
+
11
+ require "rspec/core"
12
+
13
+ require "bosh/gen/settings"
14
+
15
+ # load all files in spec/support/* (but not lower down)
16
+ Dir[File.dirname(__FILE__) + '/support/*'].each do |path|
17
+ require path unless File.directory?(path)
18
+ end
19
+
20
+ def fixture_release_path(name)
21
+ File.expand_path("../fixtures/releases/#{name}/", __FILE__)
8
22
  end
9
23
 
10
- MiniTest::Spec.send(:include, FixtureHelpers)
24
+ RSpec.configure do |c|
25
+ c.before do
26
+ extend GeneratorSpecHelper
27
+ setup_universe
28
+ end
29
+ c.color = true
30
+ end
@@ -0,0 +1,3 @@
1
+ require "fog"
2
+
3
+ Fog.mock!
@@ -9,7 +9,10 @@ module GeneratorSpecHelper
9
9
  FileUtils.rm_rf @tmp_root
10
10
  FileUtils.mkdir_p @home_path
11
11
  ENV['HOME'] = @home_path
12
- FileUtils.cp_r(@@local_developer_bosh_config, @home_path)
12
+ if File.exists?(@@local_developer_bosh_config)
13
+ FileUtils.cp_r(@@local_developer_bosh_config, @home_path)
14
+ end
15
+ setup_git
13
16
  end
14
17
 
15
18
  def setup_project_release(name)
@@ -18,6 +21,25 @@ module GeneratorSpecHelper
18
21
  @active_project_folder = File.join(@tmp_root, name)
19
22
  end
20
23
 
24
+ def setup_git
25
+ in_home_folder do
26
+ git config: "--global user.name 'Dr Nic Williams'"
27
+ git config: "--global user.email 'drnic@starkandwayne.com'"
28
+ end
29
+ end
30
+
31
+ # generate_new_release 'redis'
32
+ # generate_new_release 'redis-boshrelease'
33
+ # generate_new_release 'redis', '--s3'
34
+ # generate_new_release 'redis', '--swift'
35
+ def generate_new_release(*args)
36
+ stdout, stderr = capture_stdios do
37
+ Bosh::Gen::Command.start(["new", *args])
38
+ end
39
+ @stdout = File.expand_path(File.join(@tmp_root, "generate_release.out"))
40
+ File.open(@stdout, "w") {|f| f << stdout; f << stderr}
41
+ end
42
+
21
43
  # Runs 'bosh-gen job NAME ...'
22
44
  #
23
45
  # generate_job 'JOBNAME'
@@ -49,9 +71,9 @@ module GeneratorSpecHelper
49
71
  options = args.pop
50
72
  end
51
73
  path = File.join(["jobs"] + args) # jobs/JOBNAME/monit
52
- File.exist?(path).must_equal(true, "#{path} not created")
74
+ expect(File.exist?(path)).to eq(true)
53
75
  if options && options[:executable]
54
- File.executable?(path).must_equal(true, "#{path} not executable")
76
+ expect(File.executable?(path)).to eq(true)
55
77
  end
56
78
  end
57
79
 
@@ -62,10 +84,10 @@ module GeneratorSpecHelper
62
84
  # mywebapp_ctl.erb: bin/mywebapp_ctl
63
85
  def job_template_exists(job, template_name, spec_path)
64
86
  path = File.join("jobs", job, "templates", template_name)
65
- File.exist?(path).must_equal(true, "#{path} not created")
87
+ expect(File.exist?(path)).to eq(true)
66
88
  spec_templates = job_spec(job)["templates"]
67
- spec_templates[template_name].wont_be_nil("spec.templates missing #{template_name}")
68
- spec_templates[template_name].must_equal(spec_path, "spec.templates must be #{template_name} -> #{spec_path}")
89
+ expect(spec_templates[template_name]).to_not be_nil
90
+ expect(spec_templates[template_name]).to eq(spec_path)
69
91
  end
70
92
 
71
93
  def job_spec(job)
@@ -111,4 +133,23 @@ module GeneratorSpecHelper
111
133
  def strip_color_codes(text)
112
134
  text.gsub(/\e\[\d+m/, '')
113
135
  end
136
+
137
+ # Run a command in git.
138
+ #
139
+ # ==== Examples
140
+ #
141
+ # git :init
142
+ # git :add => "this.file that.rb"
143
+ # git :add => "onefile.rb", :rm => "badfile.cxx"
144
+ #
145
+ def git(commands={})
146
+ if commands.is_a?(Symbol)
147
+ `git #{commands}`
148
+ else
149
+ commands.each do |cmd, options|
150
+ `git #{cmd} #{options}`
151
+ end
152
+ end
153
+ end
154
+
114
155
  end