vagrant-pirate 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c46dc6ec2291217ca9f078dabcdb225d8ff54e3d
4
- data.tar.gz: 1569a99613c7167e7c70911c29a37176f6f06f2c
3
+ metadata.gz: 34fae5c76d4b0a545453514b6b97748e5a6853da
4
+ data.tar.gz: 73d1e410e8dfea98add9d35ab7a364f2da6c8d0b
5
5
  SHA512:
6
- metadata.gz: 63f6e2203dcf70a0e06b31359d1d92e2907c767c21f0033ec51bf350aa544b96a558c076e4ed051157631bf33e79d6b72c52e3f30e06976cd4c59dbe35e4a380
7
- data.tar.gz: c3dd2754cb4a5338eac5e7f1290dadc959bd5db6a49247a2515df3f4fc9138e21b147164750776efd1fbc578055c809c464599dd56115498aa080a82aff142e4
6
+ metadata.gz: 0b81186308a7b48611a35c57f98885520d441ef9a4004d567b997bae4c8ba7160dba4a48d35af593f235cd509f5e0bad4ea57ceeb3c754919036844ff518e6ab
7
+ data.tar.gz: 16e1f49461211119bf20534de4e87fc14e17b05e027bff5eec2e69f159c4940452fea916f24c04fdbf014eb7de73cf474768b1cb2dfbb7abd6f2c63348deead6
@@ -0,0 +1,34 @@
1
+ Feature: 'vagrant pirate fleet' command
2
+
3
+ In order to start using a complex YAML-based Vagrant project
4
+ As a user using vagrant-pirate
5
+ I want to initialize a new full-featured project
6
+
7
+ Scenario: Running 'vagrant pirate fleet'
8
+ Given a directory named "test_fleet"
9
+ And I cd to "test_fleet"
10
+ When I successfully run `vagrant pirate fleet`
11
+ Then the following directories should exist:
12
+ | local.d |
13
+ | available.d |
14
+ | available.d/default |
15
+ | enabled.d |
16
+ | enabled.d/vm1 |
17
+ | enabled.d/vm2 |
18
+ And the following files should exist:
19
+ | Vagrantfile |
20
+ | available.d/default/Piratefile |
21
+ | local.d/vm1.yaml |
22
+ | local.d/vm2.yaml |
23
+ And the output should contain "A `Vagrantfile` has been placed in this directory. A default directory containing"
24
+
25
+ @up
26
+ Scenario: Running 'vagrant up' after initializing a full project
27
+ Given a Vagrant project directory named "test_fleet_up"
28
+ When I successfully run `vagrant pirate fleet`
29
+ And I successfully run `vagrant up`
30
+ And I successfully run `vagrant ssh vm1 -c "hostname -f"`
31
+ And I successfully run `vagrant ssh vm2 -c "hostname -f"`
32
+ Then the output should contain "vm1.example.com"
33
+ Then the output should contain "vm2.example.com"
34
+
@@ -8,36 +8,34 @@ Feature: Command help text
8
8
  When I successfully run `vagrant help`
9
9
  Then the output should contain "pirate"
10
10
  And the output should contain "Manage YAML-based projects."
11
+ And the output should not contain "pirate-fleet"
11
12
  And the output should not contain "pirate-ship"
12
- And the output should not contain "pirate-update"
13
13
 
14
14
  Scenario: Running 'vagrant list-commands'
15
15
  When I successfully run `vagrant list-commands`
16
16
  Then the output should contain "pirate"
17
17
  And the output should contain "Manage YAML-based projects."
18
+ And the output should contain "pirate-fleet"
19
+ And the output should contain "Initializes a new Vagrant environment by creating a Vagrantfile and YAML config files."
18
20
  And the output should contain "pirate-ship"
19
21
  And the output should contain "Initializes a new Vagrant environment by creating a Vagrantfile and YAML config files."
20
- And the output should contain "pirate-update"
21
- And the output should contain "Updates a YAML-based Vagrant environment."
22
22
 
23
23
  Scenario: Running 'vagrant pirate'
24
24
  When I successfully run `vagrant pirate`
25
25
  Then the output should contain "Usage: vagrant pirate <command> [<args>]"
26
26
  And the output should contain "Available subcommands:"
27
+ And the output should contain "fleet"
27
28
  And the output should contain "ship"
28
- And the output should contain "update"
29
29
  And the output should contain "For help on any individual command run `vagrant pirate COMMAND -h`"
30
30
 
31
- Scenario: Running 'vagrant pirate ship -h'
32
- When I successfully run `vagrant pirate ship -h`
33
- Then the output should contain "Usage: vagrant pirate ship [box-name] [box-url]"
31
+ Scenario: Running 'vagrant pirate fleet -h'
32
+ When I successfully run `vagrant pirate fleet -h`
33
+ Then the output should contain "Usage: vagrant pirate fleet [box-name] [box-url]"
34
34
  And the output should contain "-h, --help"
35
35
  And the output should contain "Print this help"
36
36
 
37
- Scenario: Running 'vagrant pirate update -h'
38
- When I successfully run `vagrant pirate update -h`
39
- Then the output should contain "Usage: vagrant pirate update"
40
- And the output should contain "-f, --force"
41
- And the output should contain "Update without confirmation."
37
+ Scenario: Running 'vagrant pirate ship -h'
38
+ When I successfully run `vagrant pirate ship -h`
39
+ Then the output should contain "Usage: vagrant pirate ship [box-name] [box-url]"
42
40
  And the output should contain "-h, --help"
43
41
  And the output should contain "Print this help"
@@ -1,28 +1,23 @@
1
- Feature: Init command
1
+ Feature: 'vagrant pirate ship' command
2
2
 
3
3
  In order to start using a YAML-based Vagrant project
4
4
  As a user using vagrant-pirate
5
- I want to initialize a new project
5
+ I want to initialize a new basic project
6
6
 
7
7
  Scenario: Running 'vagrant pirate ship'
8
- Given a directory named "test"
9
- And I cd to "test"
8
+ Given a directory named "test_ship"
9
+ And I cd to "test_ship"
10
10
  When I successfully run `vagrant pirate ship`
11
- Then the following directories should exist:
12
- | local.d |
13
- | available.d |
14
- | enabled.d |
15
- And the following files should exist:
11
+ Then the following files should exist:
16
12
  | Vagrantfile |
17
- | available.d/default.yaml |
18
- | enabled.d/vm1.yaml |
19
- | enabled.d/vm2.yaml |
20
- | local.d/vm1.yaml |
21
- | local.d/vm2.yaml |
22
- And the output should contain "A `Vagrantfile` has been placed in this directory, a default Yaml VM config file"
23
- And the output should contain "has been placed in 'available.d', and a symlink to it, placed in 'enabled.d'."
24
- And the output should contain "Finally, a file to contain local overrides was placed in 'local.d'. Unlike a"
25
- And the output should contain "regular Vagrantfile, this one parses and applies the configuration in the Yaml"
26
- And the output should contain "files it finds in 'enabled.d'. You are now ready to `vagrant up` your first"
27
- And the output should contain "virtual environment! Please read the comments in the default Yaml VM config"
28
- And the output should contain "file to see how it works."
13
+ | Piratefile |
14
+ And the output should contain "A `Vagrantfile` and `Piratefile` (YAML VM config file) have been placed in this"
15
+
16
+ @up
17
+ Scenario: Running 'vagrant up' after initializing a basic project
18
+ Given a Vagrant project directory named "test_ship_up"
19
+ When I successfully run `vagrant pirate ship`
20
+ And I successfully run `vagrant up`
21
+ And I successfully run `vagrant ssh vm1 -c "hostname -f"`
22
+ Then the output should contain "vm1.example.com"
23
+
@@ -0,0 +1,30 @@
1
+ Given(/^a Vagrant project directory named "(.*?)"$/) do |dir_name|
2
+ # Running 'vagrant up' (in a subsequent step) will take longer than the
3
+ # default 3 seconds that Aruba allows a process to run. So we set it to
4
+ # 2 minutes, unless it's already explicitely been set with:
5
+ # "Given The default aruba timeout is X seconds"
6
+ @aruba_timeout_seconds ||= 120
7
+
8
+ create_dir(dir_name)
9
+ cd(dir_name)
10
+
11
+ # We register the directory we'll be running 'vagrant up' in, so that we
12
+ # can 'vagrant destroy' it in our 'After' hook. Since the 'After' hook runs
13
+ # after each scenario, it's safe to re-use a single environment variable.
14
+ # If we ever want to support using this step multiple times in a single
15
+ # scenario, we'll need to re-work this.
16
+ ENV['vagrant_test_dir'] = Pathname.new(Dir.pwd).join(current_dir).to_s
17
+
18
+ end
19
+
20
+ After do |scenario|
21
+ if ENV.member?('vagrant_test_dir')
22
+ # chdir's persist within the process, so we'll need to get back where we
23
+ # started.
24
+ orig_dir = Dir.pwd
25
+ # @TODO Print the below calls and their output when @announce is set.
26
+ Dir.chdir(ENV.delete('vagrant_test_dir'))
27
+ `vagrant destroy -f`
28
+ Dir.chdir(orig_dir)
29
+ end
30
+ end
@@ -1,9 +1,9 @@
1
- # Since simplecov need to run in the same process as the code being annalized,
2
- # we run initialize simplecov at the very beginning of our plugin. To only do
3
- # so during tests, we wrap it in a check for an environment variable.
1
+ # Since simplecov needs to run in the same process as the code being analyzed,
2
+ # we initialize simplecov at the very beginning of our plugin. To only do so
3
+ # during tests, we wrap it in a check for an environment variable.
4
4
  ENV['COVERAGE'] = 'true'
5
5
  require 'coveralls'
6
- # Since simplecov is running under a separate process, we need to retrieve the
7
- # results afterwards.
6
+ # Since simplecov is running under a separate process, we need to retrieve and
7
+ # merge the results afterwards.
8
8
  Coveralls.wear_merged!
9
9
  require 'aruba/cucumber'
@@ -11,7 +11,7 @@ end
11
11
  require 'vagrant'
12
12
  require 'vagrant-pirate/errors'
13
13
  require 'vagrant-pirate/plugin'
14
- require 'vagrant-pirate/vagrant-pirate'
14
+ require 'vagrant-pirate/pirate'
15
15
 
16
16
  # Add our custom translations to the load path
17
17
  I18n.load_path << File.expand_path("../../locales/en.yml", __FILE__)
@@ -2,18 +2,17 @@ require 'optparse'
2
2
  require 'vagrant/util/template_renderer'
3
3
 
4
4
  module VagrantPlugins
5
- module VagrantPirate
5
+ module Pirate
6
6
  module Command
7
- class PirateShip < Vagrant.plugin("2", :command)
7
+ class Fleet < Vagrant.plugin("2", :command)
8
8
 
9
9
  def self.synopsis
10
10
  "Initializes a new Vagrant environment by creating a Vagrantfile and YAML config files."
11
11
  end
12
12
  def execute
13
13
  options = {}
14
-
15
14
  opts = OptionParser.new do |opts|
16
- opts.banner = "Usage: vagrant pirate ship [box-name] [box-url]"
15
+ opts.banner = "Usage: vagrant pirate fleet [box-name] [box-url]"
17
16
  end
18
17
 
19
18
  # Parse the options
@@ -22,12 +21,12 @@ module VagrantPlugins
22
21
 
23
22
  create_vagrantfile
24
23
  create_directories
25
- create_default_yaml(argv[0], argv[1])
24
+ create_piratefile(argv[0], argv[1])
26
25
  create_vm_yaml('vm1')
27
26
  create_vm_yaml('vm2')
28
27
 
29
28
  @env.ui.info(I18n.t(
30
- "vagrant.plugins.pirate.commands.ship.success",
29
+ "vagrant.plugins.pirate.commands.fleet.success",
31
30
  avail_dir: 'available.d',
32
31
  enabled_dir: 'enabled.d',
33
32
  local_dir: 'local.d'
@@ -38,9 +37,11 @@ module VagrantPlugins
38
37
 
39
38
  def create_vagrantfile
40
39
  save_path = @env.cwd.join("Vagrantfile")
41
- raise Errors::VagrantfileExistsError if save_path.exist?
40
+ if save_path.exist?
41
+ raise ::Pirate::Errors::VagrantfileExistsError, :command => 'fleet'
42
+ end
42
43
 
43
- template_path = ::VagrantPirate.source_root.join("templates/Vagrantfile")
44
+ template_path = ::Pirate.gangway.join("templates/Vagrantfile_fleet")
44
45
  contents = Vagrant::Util::TemplateRenderer.render(template_path)
45
46
  save_path.open("w+") do |f|
46
47
  f.write(contents)
@@ -48,16 +49,21 @@ module VagrantPlugins
48
49
  end
49
50
 
50
51
  def create_directories
51
- Dir.mkdir('available.d')
52
- Dir.mkdir('enabled.d')
53
- Dir.mkdir('local.d')
52
+ ['available.d', 'enabled.d', 'local.d', 'available.d/default'].each do |dir|
53
+ if ::Pirate.haven.join(dir).exist?
54
+ raise ::Pirate::Errors::ConfigDirExistsError, :this_dir => dir, :command => 'fleet'
55
+ end
56
+ Dir.mkdir(dir)
57
+ end
54
58
  end
55
59
 
56
- def create_default_yaml(box_name=nil, box_url=nil)
57
- save_path = @env.cwd.join("available.d/default.yaml")
58
- raise Errors::VagrantfileExistsError if save_path.exist?
60
+ def create_piratefile(box_name=nil, box_url=nil)
61
+ save_path = ::Pirate.haven.join("available.d/default/Piratefile")
62
+ if save_path.exist?
63
+ raise ::Pirate::Errors::PiratefileExistsError, :this_dir => save_path.dirname, :command => 'fleet'
64
+ end
59
65
 
60
- template_path = ::VagrantPirate.source_root.join("templates/default.yaml")
66
+ template_path = ::Pirate.gangway.join("templates/Piratefile")
61
67
  contents = Vagrant::Util::TemplateRenderer.render(template_path,
62
68
  :box_name => box_name,
63
69
  :box_url => box_url)
@@ -67,10 +73,17 @@ module VagrantPlugins
67
73
  end
68
74
 
69
75
  def create_vm_yaml(vm_name)
70
- File.symlink("../available.d/default.yaml", "enabled.d/" + vm_name + ".yaml")
71
- save_path = @env.cwd.join("local.d/" + vm_name + ".yaml")
72
- raise Errors::VagrantfileExistsError if save_path.exist?
73
- template_path = ::VagrantPirate.source_root.join("templates/local.yaml")
76
+ source = "enabled.d/" + vm_name
77
+ target = "../available.d/default/"
78
+ if ::Pirate.haven.join(source).exist?
79
+ raise ::Pirate::Errors::SymlinkExistsError, :source => source, :command => 'fleet'
80
+ end
81
+ File.symlink(target, source)
82
+ save_path = ::Pirate.haven.join("local.d/" + vm_name + ".yaml")
83
+ if save_path.exist?
84
+ raise ::Pirate::Errors::LocalFileExistsError, :save_path => save_path, :command => 'fleet'
85
+ end
86
+ template_path = ::Pirate.gangway.join("templates/local.yaml")
74
87
  contents = Vagrant::Util::TemplateRenderer.render(template_path,
75
88
  :hostname => vm_name + ".example.com")
76
89
  save_path.open("w+") do |f|
@@ -1,7 +1,7 @@
1
1
  require 'optparse'
2
2
 
3
3
  module VagrantPlugins
4
- module VagrantPirate
4
+ module Pirate
5
5
  module Command
6
6
  class Pirate < Vagrant.plugin("2", :command)
7
7
  def self.synopsis
@@ -14,15 +14,17 @@ module VagrantPlugins
14
14
  @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
15
15
 
16
16
  @subcommands = Vagrant::Registry.new
17
+
17
18
  @subcommands.register(:ship) do
18
- require File.expand_path("../pirate_ship", __FILE__)
19
- PirateShip
19
+ require File.expand_path("../ship", __FILE__)
20
+ Ship
20
21
  end
21
22
 
22
- @subcommands.register(:update) do
23
- require File.expand_path("../pirate_update", __FILE__)
24
- PirateUpdate
23
+ @subcommands.register(:fleet) do
24
+ require File.expand_path("../fleet", __FILE__)
25
+ Fleet
25
26
  end
27
+
26
28
  end
27
29
 
28
30
  def execute
@@ -0,0 +1,73 @@
1
+ require 'optparse'
2
+ require 'vagrant/util/template_renderer'
3
+
4
+ module VagrantPlugins
5
+ module Pirate
6
+ module Command
7
+ class Ship < Vagrant.plugin("2", :command)
8
+
9
+ def self.synopsis
10
+ "Initializes a new Vagrant environment by creating a Vagrantfile and YAML config files."
11
+ end
12
+ def execute
13
+ options = {}
14
+ opts = OptionParser.new do |opts|
15
+ opts.banner = "Usage: vagrant pirate ship [box-name] [box-url]"
16
+ end
17
+
18
+ # Parse the options
19
+ argv = parse_options(opts)
20
+ return if !argv
21
+
22
+ create_vagrantfile
23
+ create_piratefile(argv[0], argv[1])
24
+ create_vm_yaml('vm1')
25
+
26
+ @env.ui.info(I18n.t("vagrant.plugins.pirate.commands.ship.success"), :prefix => false)
27
+
28
+ # Success, exit status 0
29
+ 0
30
+ end
31
+
32
+ def create_vagrantfile
33
+ save_path = @env.cwd.join("Vagrantfile")
34
+ if save_path.exist?
35
+ raise ::Pirate::Errors::VagrantfileExistsError, :command => 'ship'
36
+ end
37
+
38
+ template_path = ::Pirate.gangway.join("templates/Vagrantfile_ship")
39
+ contents = Vagrant::Util::TemplateRenderer.render(template_path)
40
+ save_path.open("w+") do |f|
41
+ f.write(contents)
42
+ end
43
+ end
44
+
45
+ def create_piratefile(box_name=nil, box_url=nil)
46
+ save_path = ::Pirate.haven.join("Piratefile")
47
+ if save_path.exist?
48
+ raise ::Pirate::Errors::PiratefileExistsError, :this_dir => save_path.dirname, :command => 'ship'
49
+ end
50
+
51
+ template_path = ::Pirate.gangway.join("templates/Piratefile")
52
+ contents = Vagrant::Util::TemplateRenderer.render(template_path,
53
+ :box_name => box_name,
54
+ :box_url => box_url)
55
+ save_path.open("w+") do |f|
56
+ f.write(contents)
57
+ end
58
+ end
59
+
60
+ def create_vm_yaml(vm_name)
61
+ source = ::Pirate.haven.join(vm_name)
62
+ # TODO: target need to be relative
63
+ target = ::Pirate.haven.join(".")
64
+ if source.exist?
65
+ raise ::Pirate::Errors::SymlinkExistsError, :source => source, :command => 'ship'
66
+ end
67
+ File.symlink('.', source)
68
+ end
69
+
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module VagrantPirate
2
+ module Pirate
3
3
  module Config
4
4
  class Pirate < Vagrant.plugin("2", :config)
5
5
  attr_accessor :map
@@ -10,22 +10,10 @@ module VagrantPlugins
10
10
 
11
11
  def finalize!
12
12
  if @map == UNSET_VALUE
13
- @map = { "local" => "local.d", "enabled" => "vms-enabled" }
13
+ @map = { "local" => "local.d", "enabled" => "enabled.d" }
14
14
  end
15
15
  end
16
16
 
17
- def validate(machine)
18
- errors = _detected_errors
19
- @map.each() do |name, conf_dir|
20
- current_dir = Dir.pwd + '/' + conf_dir
21
- if !File.directory?(current_dir)
22
- errors << "Configuration directories must exist: #{current_dir}"
23
- end
24
- end
25
-
26
- { "pirate" => errors }
27
- end
28
-
29
17
  end
30
18
  end
31
19
  end
@@ -1,4 +1,4 @@
1
- module VagrantPirate
1
+ module Pirate
2
2
  module Errors
3
3
 
4
4
  class PirateError < Vagrant::Errors::VagrantError
@@ -9,9 +9,27 @@ module VagrantPirate
9
9
  error_key :vagrantfile_exists
10
10
  end
11
11
 
12
- class EnabledDirMissing < PirateError
13
- error_key :enabled_dir_missing
12
+ class PiratefileExistsError < PirateError
13
+ error_key :piratefile_exists
14
14
  end
15
15
 
16
+ class ConfigDirExistsError < PirateError
17
+ error_key :config_dir_exists
18
+ end
19
+
20
+ class ConfigDirMissingError < PirateError
21
+ error_key :config_dir_missing
22
+ end
23
+
24
+ class LocalFileExistsError < PirateError
25
+ error_key :local_file_exists
26
+ end
27
+
28
+ class SymlinkExistsError < PirateError
29
+ error_key :symlink_exists
30
+ end
31
+
32
+
33
+
16
34
  end
17
35
  end
@@ -1,7 +1,13 @@
1
- module VagrantPirate
1
+ module Pirate
2
2
  # The source root is the path to the root directory of the this gem.
3
- def self.source_root
4
- @source_root ||= Pathname.new(File.expand_path('../../../', __FILE__))
3
+ def self.gangway
4
+ @gangway ||= Pathname.new(File.expand_path('../../../', __FILE__))
5
+ end
6
+
7
+ # The project root directory.
8
+ # TODO: can we retrive this from Vagrant::Environment?
9
+ def self.haven
10
+ @haven ||= Pathname.new(Dir.pwd)
5
11
  end
6
12
 
7
13
  # Apply settings loaded from YAML to a vm.
@@ -22,49 +28,56 @@ module VagrantPirate
22
28
  def self.sail_ho!(first, second)
23
29
  second.each_pair do |k,v|
24
30
  if first[k].is_a?(Hash) and second[k].is_a?(Hash)
25
- deep_merge!(first[k], second[k])
31
+ sail_ho!(first[k], second[k])
26
32
  else
27
33
  first[k] = second[k]
28
34
  end
29
35
  end
30
36
  end
31
37
 
32
-
33
- def self.Arrr!(plunder)
34
- require "yaml"
35
-
38
+ # Define our config directories
39
+ def self.get_map(plunder)
40
+ dirs = {}
36
41
  # Set defaults
37
- local_dir = "local.d"
38
- enabled_dir = "enabled.d"
42
+ dirs['local'] = ::Pirate.haven.join('local.d')
43
+ dirs['enabled'] = ::Pirate.haven.join('enabled.d')
39
44
  # Override defaults with config, if it's set, since config finalizing
40
45
  # occurs too late for our purposes.
41
46
  if plunder.pirate.map.is_a?(Hash)
42
47
  if plunder.pirate.map.has_key?('local')
43
- local_dir = plunder.pirate.map['local']
48
+ dirs['local'] = ::Pirate.haven.join(plunder.pirate.map['local'])
44
49
  end
45
50
  if plunder.pirate.map.has_key?('enabled')
46
- enabled_dir = plunder.pirate.map['enabled']
51
+ dirs['enabled'] = ::Pirate.haven.join(plunder.pirate.map['enabled'])
47
52
  end
48
53
  end
49
54
 
50
- # All paths are relative to the project root
51
- # todo: Can we access this from Vagrant::Environment?
52
- current_dir = Dir.pwd
53
- local_dir = "#{current_dir}/#{local_dir}"
54
- enabled_dir = "#{current_dir}/#{enabled_dir}"
55
-
56
- # Scan our vms-enabled/ directory for YAML config files
57
- if File.directory?(enabled_dir)
58
- config_files = Dir.glob("#{enabled_dir}/*.yaml")
59
- else
60
- raise Errors::EnabledDirMissing,
61
- :enabled_dir => enabled_dir
55
+ # We only check that the 'enabled' directory exists, since the 'local' one
56
+ # is optional and the existence of the files therein are checked indivi-
57
+ # dually.
58
+ if not dirs['enabled'].directory?
59
+ raise Errors::ConfigDirMissingError, :label => 'enabled',:missing_dir => dirs['enabled']
62
60
  end
63
61
 
62
+ dirs
63
+ end
64
+
65
+ def self.Arrr!(plunder)
66
+ require "yaml"
67
+
68
+ # Get our config directories
69
+ map = ::Pirate.get_map(plunder)
70
+
71
+ # Scan our enabled directory for Piratefiles (YAML config files)
72
+ config_dirs = Dir.glob(map['enabled'] + '*/')
73
+
64
74
  # Build up a list of the VMs we'll provision, and their config_files
65
75
  vms = {}
66
- config_files.each do |config_file|
67
- vms.update({ File.basename(config_file, ".yaml") => config_file})
76
+ config_dirs.each do |config_dir|
77
+ piratefile = Pathname.new(config_dir).join('Piratefile')
78
+ if piratefile.file?
79
+ vms.update({ File.basename(config_dir) => piratefile})
80
+ end
68
81
  end
69
82
 
70
83
  # VM-specific configuration loaded from YAML config files
@@ -74,7 +87,7 @@ module VagrantPirate
74
87
  yml = {} if !yml.is_a?(Hash)
75
88
 
76
89
  # Allow local overrides
77
- local_file = "#{local_dir}/#{vm}.yaml"
90
+ local_file = map['local'] + "#{vm}.yaml"
78
91
  if File.exists?(local_file)
79
92
  local = YAML.load_file local_file
80
93
  sail_ho!(yml, local) if local.is_a?(Hash)
@@ -1,9 +1,9 @@
1
- require 'vagrant-pirate/vagrant-pirate'
1
+ require 'vagrant-pirate/pirate'
2
2
 
3
3
  module VagrantPlugins
4
- module VagrantPirate
4
+ module Pirate
5
5
  class Plugin < Vagrant.plugin("2")
6
- name "Yagrant YAML"
6
+ name "Yagrant Pirate"
7
7
  description <<-DESC
8
8
  This plugin enables Vagrant to use YAML files to configure VMs.
9
9
  DESC
@@ -19,14 +19,15 @@ module VagrantPlugins
19
19
  end
20
20
 
21
21
  command("pirate-ship", primary: false) do
22
- require_relative "command/pirate_ship"
23
- Command::PirateShip
22
+ require_relative "command/ship"
23
+ Command::Ship
24
24
  end
25
25
 
26
- command("pirate-update", primary: false) do
27
- require_relative "command/pirate_update"
28
- Command::PirateUpdate
26
+ command("pirate-fleet", primary: false) do
27
+ require_relative "command/fleet"
28
+ Command::Fleet
29
29
  end
30
+
30
31
  end
31
32
  end
32
33
  end
@@ -1,3 +1,3 @@
1
- module VagrantPirate
2
- VERSION = "0.2.0"
1
+ module Pirate
2
+ VERSION = "0.3.0"
3
3
  end
data/locales/en.yml CHANGED
@@ -3,15 +3,22 @@ en:
3
3
  plugins:
4
4
  pirate:
5
5
  commands:
6
+ fleet:
7
+ success: |-
8
+ A `Vagrantfile` has been placed in this directory. A default directory containing
9
+ a Piratefile (Yaml VM config file) has been placed in '%{avail_dir}', and symlinks
10
+ to it, placed in '%{enabled_dir}'. Finally, files to contain local overrides were
11
+ placed in '%{local_dir}'. Unlike a regular Vagrantfile, this one parses and applies
12
+ the configuration in the Piratefiles it finds under '%{enabled_dir}'. You are now
13
+ ready to `vagrant up` your first virtual environment! Please read the comments in
14
+ the default Yaml VM config file to see how it works.
6
15
  ship:
7
16
  success: |-
8
- A `Vagrantfile` has been placed in this directory, a default Yaml VM config file
9
- has been placed in '%{avail_dir}', and a symlink to it, placed in '%{enabled_dir}'.
10
- Finally, a file to contain local overrides was placed in '%{local_dir}'. Unlike a
11
- regular Vagrantfile, this one parses and applies the configuration in the Yaml
12
- files it finds in '%{enabled_dir}'. You are now ready to `vagrant up` your first
13
- virtual environment! Please read the comments in the default Yaml VM config
14
- file to see how it works.
17
+ A `Vagrantfile` and `Piratefile` (YAML VM config file) have been placed in this
18
+ directory, along with a symlink to it (that defines the VM name). Unlike a regular
19
+ Vagrantfile, this one parses and applies the configuration in the Piratefile. You
20
+ are now ready to `vagrant up` your first virtual environment! Please read the
21
+ comments in the Piratefile to see how it works.
15
22
  update:
16
23
  success: |-
17
24
  Vagrantfile updated using the latest one from vagrant-pirate.
@@ -24,9 +31,20 @@ en:
24
31
  errors:
25
32
  vagrantfile_exists: |-
26
33
  `Vagrantfile` already exists in this directory. Remove it before running `vagrant
27
- pirate init`, or run `vagrant pirate update` to update to the latest version.
28
- enabled_dir_missing: |-
34
+ pirate %{command}`.
35
+ piratefile_exists: |-
36
+ `Piratefile` already exists in '%{this_dir}'.
37
+ Remove it before running `vagrant pirate %{command}`.
38
+ config_dir_exists: |-
39
+ Config directory already exists at '%{this_dir}'.
40
+ Remove it before running `vagrant pirate %{command}`.
41
+ config_dir_missing: |-
29
42
  A valid directory must be specified where YAML configs for the VMs can be found.
30
- Current config points to a non-existent directory:
31
- >>> %{enabled_dir}
32
-
43
+ Current `%{label}` config points to a non-existent directory:
44
+ >>> %{missing_dir}
45
+ local_file_exists: |-
46
+ Local override file already exists at `%{save_path}`.
47
+ Remove it before running `vagrant pirate %{command}`.
48
+ symlink_exists: |-
49
+ Symlink to available config directory already exists at %{source}.
50
+ Remove it before running `vagrant pirate %{command}`.
data/tasks/cucumber.rake CHANGED
@@ -7,5 +7,5 @@ desc 'Default task which runs all cucumber tests'
7
7
  Coveralls::RakeTask.new
8
8
  task :default => [:features, 'coveralls:push']
9
9
  Cucumber::Rake::Task.new(:features) do |t|
10
- t.cucumber_opts = "features --no-source --format pretty"
10
+ t.cucumber_opts = "features --no-source --format pretty --tags ~@up"
11
11
  end
File without changes
@@ -0,0 +1,16 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ # Vagrantfile API/syntax version.
5
+ # Don't be touching this, Matey, lest ye send us all down to Dany Jones' locker!
6
+ VAGRANTFILE_API_VERSION = "2"
7
+
8
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |plunder|
9
+
10
+ # Specify the directories in which to look for YAML VM config files.
11
+ plunder.pirate.map = { 'enabled' => '.' }
12
+
13
+ # Load, parse and apply YAML VM configs.
14
+ Pirate::Arrr!(plunder)
15
+
16
+ end
@@ -3,7 +3,7 @@ require File.expand_path('../lib/vagrant-pirate/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "vagrant-pirate"
6
- s.version = VagrantPirate::VERSION
6
+ s.version = Pirate::VERSION
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Christopher Gervais"]
9
9
  s.email = ["chris@ergonlogic.com"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-pirate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Gervais
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-02 00:00:00.000000000 Z
11
+ date: 2014-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -94,22 +94,25 @@ files:
94
94
  - LICENSE
95
95
  - Rakefile
96
96
  - Readme.md
97
+ - features/fleet.feature
97
98
  - features/help.feature
98
99
  - features/ship.feature
100
+ - features/step_definitions/vagrant_steps.rb
99
101
  - features/support/env.rb
100
102
  - lib/vagrant-pirate.rb
103
+ - lib/vagrant-pirate/command/fleet.rb
101
104
  - lib/vagrant-pirate/command/pirate.rb
102
- - lib/vagrant-pirate/command/pirate_ship.rb
103
- - lib/vagrant-pirate/command/pirate_update.rb
105
+ - lib/vagrant-pirate/command/ship.rb
104
106
  - lib/vagrant-pirate/config/pirate.rb
105
107
  - lib/vagrant-pirate/errors.rb
108
+ - lib/vagrant-pirate/pirate.rb
106
109
  - lib/vagrant-pirate/plugin.rb
107
- - lib/vagrant-pirate/vagrant-pirate.rb
108
110
  - lib/vagrant-pirate/version.rb
109
111
  - locales/en.yml
110
112
  - tasks/cucumber.rake
111
- - templates/Vagrantfile.erb
112
- - templates/default.yaml.erb
113
+ - templates/Piratefile.erb
114
+ - templates/Vagrantfile_fleet.erb
115
+ - templates/Vagrantfile_ship.erb
113
116
  - templates/local.yaml.erb
114
117
  - vagrant-pirate.gemspec
115
118
  homepage: https://github.com/PraxisLabs/vagrant-pirate
@@ -1,77 +0,0 @@
1
- require 'optparse'
2
- require 'vagrant/util/template_renderer'
3
-
4
- module VagrantPlugins
5
- module VagrantPirate
6
- module Command
7
- class PirateUpdate < Vagrant.plugin("2", :command)
8
- def self.synopsis
9
- "Updates a YAML-based Vagrant environment."
10
- end
11
-
12
- def execute
13
- options = {}
14
-
15
- # Boolean whether we should actually go through with the update
16
- # or not. This is true only if the "--force" flag is set or if the
17
- # user confirms it.
18
- do_update = false
19
-
20
- opts = OptionParser.new do |opts|
21
- opts.banner = "Usage: vagrant pirate update"
22
-
23
- opts.on("-f", "--force", "Update without confirmation.") do |f|
24
- options[:force] = f
25
- end
26
- end
27
-
28
- # Parse the options
29
- argv = parse_options(opts)
30
- return if !argv
31
-
32
- if options[:force]
33
- do_update = true
34
- else
35
- choice = nil
36
- begin
37
- choice = @env.ui.ask(I18n.t("vagrant.plugins.pirate.commands.update.confirmation"))
38
-
39
- rescue Errors::UIExpectsTTY
40
- # We raise a more specific error but one which basically
41
- # means the same thing.
42
- raise Errors::UpdateRequiresForce
43
- end
44
- do_update = choice.upcase == "Y"
45
- end
46
-
47
- if do_update
48
- @logger.info("Updating project with latest Vagrantfile from vagrant-pirate.")
49
- update
50
- else
51
- @logger.info("Not updating project since confirmation was declined.")
52
- @env.ui.success(I18n.t("vagrant.plugins.pirate.commands.update.will_not_update"),
53
- :prefix => false)
54
- end
55
- end
56
-
57
- def update
58
- save_path = @env.cwd.join("Vagrantfile")
59
-
60
- template_path = ::VagrantPirate.source_root.join("templates/Vagrantfile")
61
- contents = Vagrant::Util::TemplateRenderer.render(template_path)
62
-
63
- # Write out the contents
64
- save_path.open("w+") do |f|
65
- f.write(contents)
66
- end
67
-
68
- @env.ui.info(I18n.t("vagrant.plugins.pirate.commands.update.success"),
69
- :prefix => false)
70
-
71
- # Success, exit status 0
72
- 0
73
- end
74
- end
75
- end
76
- end
77
- end