vagrant-helpers 1.0.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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/vagrant-helpers.rb +170 -0
  3. metadata +72 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cd81617a53e41a08e2c32ac78d038fbad119efe8
4
+ data.tar.gz: 7099e2f502c6ecd129c97403ebfc787ce59264c2
5
+ SHA512:
6
+ metadata.gz: caf8cfba03e3554eeb40fcd73ee9aa4d5f6ef8b4b2fb58e9fb92d81146c669e02c2be8a7d517bd11f3e9b382dee80326cadcb7e40f8231455c52b971fb05a282
7
+ data.tar.gz: 09bd98544dd64a28f02917eefe8b225a2a4201dd01bf395c1970b5cee4afecf06fc769480ce07ffaeef90a91215b16d42466b4a96c6c1933072682e76dd2bb5c
@@ -0,0 +1,170 @@
1
+ require 'vagrant'
2
+ require 'yaml'
3
+
4
+ module VagrantPlugins
5
+ module Helpers
6
+ class MissingOptsFileError < ::Vagrant::Errors::VagrantError
7
+ def initialize(filename)
8
+ @filename = filename
9
+ super
10
+ end
11
+
12
+ def error_message
13
+ "Cannot find opts file `#{@filename}`!"
14
+ end
15
+ end
16
+
17
+ class MissingVMBoxOptionError < ::Vagrant::Errors::VagrantError
18
+ def error_message
19
+ "Missing vm.box option in `opts.yaml` file!"
20
+ end
21
+ end
22
+
23
+ class MissingVMNameOptionError < Vagrant::Errors::VagrantError
24
+ def error_message
25
+ "Missing vm.name option in `opts.yaml` file!"
26
+ end
27
+ end
28
+
29
+ def self.get_opts(dir)
30
+ filename = ::File.join dir, 'opts.yaml'
31
+ if ::File.exists? filename
32
+ ::YAML.load ::File.open filename
33
+ else
34
+ raise MissingOptsFileError.new filename
35
+ end
36
+ end
37
+
38
+ def self.set_vm_box(config, opts)
39
+ vm_box = opts.fetch('vm', {}).fetch('box', nil)
40
+ if vm_box.nil?
41
+ raise MissingVMBoxOptionError.new
42
+ end
43
+
44
+ config.vm.box = vm_box
45
+ end
46
+
47
+ def self.set_vm_name(config, opts)
48
+ vm_name = opts.fetch('vm', {}).fetch('name', nil)
49
+ if vm_name.nil?
50
+ raise MissingVMNameOptionError.new
51
+ end
52
+
53
+ config.vm.provider :virtualbox do |v|
54
+ v.name = vm_name
55
+ end
56
+ end
57
+
58
+ def self.set_vm_memory(config, opts)
59
+ vm_memory = opts.fetch('vm', {}).fetch('memory', 512)
60
+
61
+ config.vm.provider :virtualbox do |v|
62
+ v.memory = vm_memory
63
+ end
64
+ end
65
+
66
+ def self.set_vm_cpus(config, opts)
67
+ vm_cpus = opts.fetch('vm', {}).fetch('cpus', 1)
68
+
69
+ config.vm.provider :virtualbox do |v|
70
+ v.cpus = vm_cpus
71
+ end
72
+ end
73
+
74
+ def self.set_vm_hostname(config, opts)
75
+ vm_hostname = opts.fetch('vm', {}).fetch('hostname', nil)
76
+
77
+ unless vm_hostname.nil?
78
+ config.vm.hostname = vm_hostname
79
+ end
80
+ end
81
+
82
+ def self.set_vm_forwarded_ports(config, opts)
83
+ vm_forwarded_ports = opts.fetch('vm', {}).fetch('network', {}).fetch('forwarded_ports', [])
84
+
85
+ vm_forwarded_ports.each do |options|
86
+ prepared_options = ::Hash[options.map { |(k, v)| [k.to_sym, v] }]
87
+ config.vm.network :forwarded_port, **prepared_options
88
+ end
89
+ end
90
+
91
+ def self.set_vm_public_networks(config, opts)
92
+ vm_public_networks = opts.fetch('vm', {}).fetch('network', {}).fetch('public', [])
93
+
94
+ vm_public_networks.each do |options|
95
+ prepared_options = ::Hash[options.map { |(k, v)| [k.to_sym, v] }]
96
+ config.vm.network :public_network, **prepared_options
97
+ end
98
+ end
99
+
100
+ def self.set_vm_private_networks(config, opts)
101
+ vm_private_networks = opts.fetch('vm', {}).fetch('network', {}).fetch('private', [])
102
+
103
+ vm_private_networks.each do |options|
104
+ prepared_options = ::Hash[options.map { |(k, v)| [k.to_sym, v] }]
105
+ config.vm.network :private_network, **prepared_options
106
+ end
107
+ end
108
+
109
+ def self.set_vm_synced_folders(config, opts)
110
+ vm_synced_folders = opts.fetch('vm', {}).fetch('synced_folders', [])
111
+
112
+ vm_synced_folders.each do |entry|
113
+ prepared_options = ::Hash[entry.fetch('opts', {}).map { |(k,v)| [k.to_sym, v] }]
114
+ config.vm.synced_folder entry['host'], entry['guest'], **prepared_options
115
+ end
116
+ end
117
+
118
+ def self.set_vm_extra_storage(config, opts)
119
+ vm_storage_drives = opts.fetch('vm', {}).fetch('storage', [])
120
+
121
+ config.vm.provider :virtualbox do |v|
122
+ vm_storage_drives.each_with_index do |entry, ndx|
123
+ unless ::File.exists? entry['filename']
124
+ # create hdd
125
+ v.customize [
126
+ 'createhd',
127
+ '--filename',
128
+ entry['filename'],
129
+ '--size',
130
+ entry['size']
131
+ ]
132
+ end
133
+
134
+ # attach hdd
135
+ v.customize [
136
+ 'storageattach',
137
+ :id,
138
+ '--storagectl',
139
+ 'SATAController',
140
+ '--port',
141
+ ndx + 1,
142
+ '--device',
143
+ 0,
144
+ '--type',
145
+ 'hdd',
146
+ '--medium',
147
+ entry['filename']
148
+ ]
149
+ end
150
+ end
151
+ end
152
+
153
+ def self.setup(dir)
154
+ ::Vagrant.configure(2) do |config|
155
+ opts = get_opts dir
156
+
157
+ set_vm_box config, opts
158
+ set_vm_name config, opts
159
+ set_vm_memory config, opts
160
+ set_vm_cpus config, opts
161
+ set_vm_hostname config, opts
162
+ set_vm_forwarded_ports config, opts
163
+ set_vm_public_networks config, opts
164
+ set_vm_private_networks config, opts
165
+ set_vm_synced_folders config, opts
166
+ set_vm_extra_storage config, opts
167
+ end
168
+ end
169
+ end
170
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-helpers
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Pyatkin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Vagrant helpers plugin
42
+ email: aspyatkin@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/vagrant-helpers.rb
48
+ homepage: http://github.com/aspyatkin/vagrant-helpers
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.4.5.1
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Vagrant helpers
72
+ test_files: []