vbuilder 0.1.2 → 0.1.3

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: cb2c096d5809db31685967a6564081324d2e9385
4
- data.tar.gz: 5d6c805ab4932507b407d7ae87de1339b15f1488
3
+ metadata.gz: e7cb201309103e4e38714ff8e06ab7dea0c80af4
4
+ data.tar.gz: a42ee5e45c572d8e94ce1532f8053590574a6d14
5
5
  SHA512:
6
- metadata.gz: 37b772fd5210010754c130cf83d9d8466acdeba458e9a9a7ee88892927919f5b0f563f6bcbbadc81166069e647d3b4fc54c8c0e8c4fc9bd48db7ea37d7ee60eb
7
- data.tar.gz: 8fa1124db62621a2b5c05a4837d3ab73fc1b49c2c1f9b37299ee0885d5d1815994d0eb88827c7e6f34d9d9db766bd247f4b0242b5796148ab3f47c0b15356ed1
6
+ metadata.gz: 9b4040f6c70c0f480f32eb2fc9762a76d1fd23f3e7c0f44c52e250d546202d3152990fc0dd751a3a4c8d9ee7761f9ba06181c17b3cc692cea44e36ad6a5b8e76
7
+ data.tar.gz: 540d3353eb8955a185ceaf127ccc99d6ea3811aeaa08ad3189da813698da9577c05410bc68398e478c548ffeb7ce629ccecf3b0627ad918eb1d52bd636132a0c
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in vbuilder.gemspec
4
4
  gemspec
5
+
6
+ gem "highline"
@@ -0,0 +1,67 @@
1
+ require 'helper'
2
+ require 'highline'
3
+
4
+ class Vbuilder
5
+ class Helper
6
+ module Utility
7
+
8
+ def self.get_provider_list
9
+ attributes_dir = "../vbuilder/generator/attributes"
10
+ attributes_dir = File.expand_path(attributes_dir, __FILE__)
11
+
12
+ provider_files = Dir.entries(attributes_dir)
13
+ provider_files = provider_files - ["..", "."]
14
+
15
+ # return an array of all the providers
16
+ provider_files.map { |item| item.gsub(".yaml", "") }
17
+ end
18
+
19
+ def self.get_provider_attrs(provider)
20
+ begin
21
+ attrs_file = "../vbuilder/generator/attributes/#{provider}.yaml"
22
+ attrs_file = File.expand_path(attrs_file, __FILE__)
23
+
24
+ YAML.load(File.read(attrs_file))
25
+ rescue
26
+ # rescue and print out cause
27
+ puts "Provider '#{provider}' not valid. Vagrantfile will not be generated."
28
+ puts "Valid providers:"
29
+ self.get_provider_list.each { |item| puts " - #{item}" }
30
+ exit 1
31
+ end
32
+ end
33
+
34
+ def self.get_template_file
35
+ template_file = "../vbuilder/templates/master.erb"
36
+ template_file = File.expand_path(template_file, __FILE__)
37
+
38
+ File.read(template_file)
39
+ end
40
+ end
41
+
42
+ module Cli
43
+
44
+ def self.start_cli(attributes)
45
+ cli = HighLine.new
46
+ attributes.each do |key, value|
47
+ if key != "dependencies" && key != "provider"
48
+ case attributes[key]
49
+ when Array
50
+ attributes[key] = cli.ask("#{key} - (comma sep list) :", lambda { |val|val.split(/,\s*/) })
51
+ when String
52
+ attributes[key] = cli.ask("#{key}: ")
53
+ when Fixnum
54
+ attributes[key] = cli.ask("#{key}: ", Integer)
55
+ when Float
56
+ attributes[key] = cli.ask("#{key}: ", Float)
57
+ else
58
+ puts attributes[key].class
59
+ end
60
+ end
61
+ end
62
+
63
+ attributes
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,4 +1,5 @@
1
1
  require 'vbuilder/version'
2
+ require 'helper'
2
3
  require 'pathname'
3
4
  require 'yaml'
4
5
  require 'erb'
@@ -17,10 +18,21 @@ class Vbuilder
17
18
  end
18
19
 
19
20
  def run
20
- provider_attrs = get_provider_attrs
21
+ # get provider attributes from correct yaml file
22
+ provider_attrs = Vbuilder::Helper::Utility.get_provider_attrs(@provider)
23
+
24
+ if @options[:interactive]
25
+ provider_attrs = Vbuilder::Helper::Cli.start_cli(provider_attrs)
26
+ end
27
+
28
+ # create new provider based on provider attributes
21
29
  provider = Vbuilder::Generator::Provider.new(provider_attrs)
22
30
 
23
- template_file = get_template_file
31
+ # check provider dependencies before moving on
32
+ # gem execution will exit if unmet
33
+ provider.check_dependencies
34
+
35
+ template_file = Vbuilder::Helper::Utility.get_template_file
24
36
 
25
37
  renderer = ERB.new(template_file).result(provider.get_binding)
26
38
 
@@ -28,21 +40,5 @@ class Vbuilder
28
40
  f.write(renderer)
29
41
  end
30
42
  end
31
-
32
- # Helper functions
33
- # TODO: Move these functions to lib/helpers.rb
34
- def get_provider_attrs
35
- attrs_file = "../generator/attributes/#{@provider}.yaml"
36
- attrs_file = File.expand_path(attrs_file, __FILE__)
37
-
38
- YAML.load(File.read(attrs_file))
39
- end
40
-
41
- def get_template_file
42
- template_file = "../templates/master.erb"
43
- template_file = File.expand_path(template_file, __FILE__)
44
-
45
- File.read(template_file)
46
- end
47
43
  end
48
44
  end
@@ -1,13 +1,14 @@
1
1
  # YAML Containing attributes to build basic Vagrantfile with aws as provider
2
2
 
3
+ dependencies: ["vagrant-aws"]
3
4
  provider: aws
4
- access_key_id:
5
- secret_access_key:
6
- session_token:
7
- keypair_name:
8
- ami:
9
- instance_type:
5
+ access_key_id: ""
6
+ secret_access_key: ""
7
+ session_token: ""
8
+ keypair_name: ""
9
+ ami: ""
10
+ instance_type: ""
10
11
  security_groups: []
11
- iam_instance_profile_name:
12
+ iam_instance_profile_name: ""
12
13
  ebs_volume_size: 8
13
14
  tags: []
@@ -0,0 +1,14 @@
1
+ # YAML Containing attributes to build basic Vagrantfile with aws as provider
2
+
3
+ dependencies: ["vagrant-aws"]
4
+ provider: aws
5
+ access_key_id:
6
+ secret_access_key:
7
+ session_token:
8
+ keypair_name:
9
+ ami:
10
+ instance_type:
11
+ security_groups: []
12
+ iam_instance_profile_name:
13
+ ebs_volume_size: 8
14
+ tags: []
@@ -1,3 +1,6 @@
1
+ require 'optparse'
2
+ require 'helper'
3
+
1
4
  class Vbuilder
2
5
  class Generator
3
6
  class Options < Hash
@@ -8,16 +11,33 @@ class Vbuilder
8
11
 
9
12
  @orig_args = args.clone
10
13
 
11
- require 'optparse'
12
14
  @opts = OptionParser.new do |o|
13
15
  o.banner = "Usage: #{File.basename($0)} [options]\ne.g. #{File.basename($0)} --provider aws"
14
16
 
17
+ o.on('-v', '--version', 'show ruby gem version') do |ver|
18
+ puts "Version: #{Vbuilder::Version.version}"
19
+ exit
20
+ end
21
+
22
+ o.on('-P', '--providers', 'see the list of valid providers') do
23
+ puts "Valid providers:"
24
+ Vbuilder::Helper::Utility.get_provider_list.each do |provider|
25
+ puts " - #{provider}"
26
+ end
27
+
28
+ exit
29
+ end
30
+
15
31
  o.on('-i', '--interactive', 'choose to interactively fill these config attributes out on the CLI') do
16
32
  self[:interactive] = true
17
33
  end
18
34
 
19
- o.on('--provider [PROVIDER]', 'specify the provider to use in the building of your Vagrantfile') do |provider|
20
- self[:provider] = provider
35
+ o.on('-p', '--provider [PROVIDER]', 'specify the provider to use in the building of your Vagrantfile') do |provider|
36
+ unless provider.nil?
37
+ self[:provider] = provider
38
+ else
39
+ self[:invalid_argument] = "please specify a provider"
40
+ end
21
41
  end
22
42
 
23
43
  o.separator ""
@@ -19,8 +19,20 @@ class Vbuilder
19
19
  file = File.expand_path(template_file, __FILE__)
20
20
  content = File.read(file)
21
21
  t = ERB.new(content)
22
+
22
23
  t.result(binding)
23
24
  end
25
+
26
+ def check_dependencies
27
+ installed = `vagrant plugin list`
28
+ @dependencies.each do |dependency|
29
+ if !installed.include? dependency
30
+ puts "Unmet dependency"
31
+ puts "Missing plugin '#{dependency}'"
32
+ exit 1
33
+ end
34
+ end
35
+ end
24
36
  end
25
37
  end
26
38
  end
@@ -2,7 +2,7 @@ class Vbuilder
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 2
5
+ PATCH = 3
6
6
  BUILD = nil
7
7
 
8
8
  def self.version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian DesJardins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-14 00:00:00.000000000 Z
11
+ date: 2016-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -75,6 +75,7 @@ files:
75
75
  - lib/vbuilder/generator.rb
76
76
  - lib/vbuilder/generator/application.rb
77
77
  - lib/vbuilder/generator/attributes/aws.yaml
78
+ - lib/vbuilder/generator/attributes/virtualbox.yaml
78
79
  - lib/vbuilder/generator/options.rb
79
80
  - lib/vbuilder/generator/provider.rb
80
81
  - lib/vbuilder/templates/master.erb