vagrant-helpers 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []