vagrant-persistent-storage 0.0.26 → 0.0.27
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -4
- data/lib/vagrant-persistent-storage/config.rb +38 -22
- data/lib/vagrant-persistent-storage/manage_storage.rb +12 -5
- data/lib/vagrant-persistent-storage/version.rb +1 -1
- data/locales/en.yml +4 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c5cb664b3afdb9c69f0edbac2f802170c976a53
|
4
|
+
data.tar.gz: 0b638147e494cf69fbd22e3be9cee7115f2d7b69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29768973693d388e28076d0e4553201843085a44c957225d2e4b46049fecc5a009b11a11284aea1fa27b85bb592f7af42c09e68cbeb6d65412bae41c719ea021
|
7
|
+
data.tar.gz: 789a035b9d325f30b0b0eb79a88cc2d2307af0e90c0353ff00d6b0a9b0a28759d50724b8f57ada8425501aafa38d50281bdf5f7555932bacf450ebba4cf27968
|
data/README.md
CHANGED
@@ -34,29 +34,46 @@ config.persistent_storage.mountoptions = ['defaults', 'prjquota']
|
|
34
34
|
```
|
35
35
|
|
36
36
|
Device defaults to `/dev/sdb`. For boxes with multiple disks, make sure you increment the drive:
|
37
|
-
```
|
37
|
+
```ruby
|
38
38
|
config.persistent_storage.diskdevice = '/dev/sdc'
|
39
39
|
```
|
40
40
|
|
41
|
+
If you are using LVM and you would prefer to use the disk rather than a partition, you can set the following configuration:
|
42
|
+
```ruby
|
43
|
+
config.persistent_storage.partition = false
|
44
|
+
```
|
45
|
+
|
41
46
|
Every `vagrant up` will attach this file as hard disk to the guest machine.
|
42
|
-
|
47
|
+
A `vagrant destroy` will detach the storage to avoid deletion of the storage by vagrant.
|
43
48
|
A `vagrant destroy` generally destroys all attached drives. See [VBoxMange unregistervm --delete option][vboxmanage_delete].
|
44
49
|
|
45
50
|
The disk is initialized and added to it's own volume group as specfied in the config;
|
46
51
|
this defaults to 'vagrant'. An ext4 filesystem is created and the disk mounted appropriately,
|
47
|
-
with entries added to fstab ... subsequent runs will mount this disk with the options specified
|
52
|
+
with entries added to fstab ... subsequent runs will mount this disk with the options specified.
|
48
53
|
|
49
54
|
## Windows Guests
|
50
55
|
|
51
56
|
Windows Guests must use the WinRM communicator by setting `vm.communicator = 'winrm'`. An additional option is provided to
|
52
57
|
allow you to set the drive letter using:
|
53
58
|
|
54
|
-
```
|
59
|
+
```ruby
|
55
60
|
config.persistent_storage.drive_letter = 'Z'
|
56
61
|
```
|
57
62
|
|
58
63
|
Options that are irrelevent to Windows are ignored, such as `mountname`, `filesystem`, `mountpoint` and `volgroupname`.
|
59
64
|
|
65
|
+
## How Is The Storage Created?
|
66
|
+
|
67
|
+
Based on the configuration provided, during a `vagrant up` a bash script is generated and uploaded to `/tmp/disk_operations_#{mnt_name}.sh` (Linux) or `disk_operations_#{mnt_name}.ps1` (Windows). If the box has not been previously provisioned the script is executed on a `vagrant up`. To force the scrip to be executed again you can run `vagrant provision` or if you have halted the box, `vagrant up --provision`.
|
68
|
+
|
69
|
+
The outcome of the script being run is placed in the home drive of the vagrant user in a file called `disk_operation_log.txt`.
|
70
|
+
|
71
|
+
## Optional settings
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
config.persistent_storage.part_type_code = '82'
|
75
|
+
```
|
76
|
+
|
60
77
|
## Troubleshooting
|
61
78
|
|
62
79
|
If your box are not using LVM you must set `config.persistent_storage.use_lvm = false`.
|
@@ -82,6 +99,8 @@ If your box are not using LVM you must set `config.persistent_storage.use_lvm =
|
|
82
99
|
* [Chen Yu Pao](https://github.com/windperson)
|
83
100
|
* [Kris Reese](https://github.com/ktreese)
|
84
101
|
* [Henry N.](https://github.com/HenryNe)
|
102
|
+
* [fredleger](https://github.com/fredleger)
|
103
|
+
* [Sebastian Wendel](https://github.com/sourceindex)
|
85
104
|
|
86
105
|
## TODO
|
87
106
|
|
@@ -15,16 +15,19 @@ module VagrantPlugins
|
|
15
15
|
attr_accessor :mountname
|
16
16
|
attr_accessor :mountpoint
|
17
17
|
attr_accessor :mountoptions
|
18
|
+
attr_accessor :partition
|
18
19
|
attr_accessor :diskdevice
|
19
20
|
attr_accessor :filesystem
|
20
21
|
attr_accessor :volgroupname
|
21
|
-
|
22
|
+
attr_accessor :drive_letter
|
23
|
+
attr_accessor :part_type_code
|
22
24
|
|
23
25
|
alias_method :create?, :create
|
24
26
|
alias_method :mount?, :mount
|
25
27
|
alias_method :manage?, :manage
|
26
28
|
alias_method :format?, :format
|
27
29
|
alias_method :use_lvm?, :use_lvm
|
30
|
+
alias_method :partition?, :partition
|
28
31
|
alias_method :enabled?, :enabled
|
29
32
|
|
30
33
|
def initialize
|
@@ -35,6 +38,7 @@ module VagrantPlugins
|
|
35
38
|
@format = true
|
36
39
|
@use_lvm = true
|
37
40
|
@enabled = false
|
41
|
+
@partition = true
|
38
42
|
@location = UNSET_VALUE
|
39
43
|
@mountname = UNSET_VALUE
|
40
44
|
@mountpoint = UNSET_VALUE
|
@@ -42,7 +46,8 @@ module VagrantPlugins
|
|
42
46
|
@diskdevice = UNSET_VALUE
|
43
47
|
@filesystem = UNSET_VALUE
|
44
48
|
@volgroupname = UNSET_VALUE
|
45
|
-
|
49
|
+
@drive_letter = UNSET_VALUE
|
50
|
+
@part_type_code = UNSET_VALUE
|
46
51
|
end
|
47
52
|
|
48
53
|
def finalize!
|
@@ -52,30 +57,33 @@ module VagrantPlugins
|
|
52
57
|
@manage = true if @manage == UNSET_VALUE
|
53
58
|
@format = true if @format == UNSET_VALUE
|
54
59
|
@use_lvm = true if @use_lvm == UNSET_VALUE
|
60
|
+
@partition = true if @partition == UNSET_VALUE
|
55
61
|
@enabled = false if @enabled == UNSET_VALUE
|
56
|
-
@location =
|
57
|
-
@mountname =
|
58
|
-
@mountpoint =
|
59
|
-
@mountoptions =
|
60
|
-
@diskdevice =
|
61
|
-
@filesystem =
|
62
|
-
@volgroupname =
|
63
|
-
|
62
|
+
@location = "" if @location == UNSET_VALUE
|
63
|
+
@mountname = "" if @mountname == UNSET_VALUE
|
64
|
+
@mountpoint = "" if @mountpoint == UNSET_VALUE
|
65
|
+
@mountoptions = [] if @mountoptions == UNSET_VALUE
|
66
|
+
@diskdevice = "" if @diskdevice == UNSET_VALUE
|
67
|
+
@filesystem = "" if @filesystem == UNSET_VALUE
|
68
|
+
@volgroupname = "" if @volgroupname == UNSET_VALUE
|
69
|
+
@drive_letter = 0 if @drive_letter == UNSET_VALUE
|
70
|
+
@part_type_code = "8e" if @part_type_code == UNSET_VALUE
|
64
71
|
end
|
65
72
|
|
66
73
|
def validate(machine)
|
67
|
-
errors =
|
74
|
+
errors = _detected_errors
|
68
75
|
|
69
76
|
errors << validate_bool('persistent_storage.create', @create)
|
70
77
|
errors << validate_bool('persistent_storage.mount', @mount)
|
71
|
-
errors << validate_bool('persistent_storage.
|
72
|
-
errors << validate_bool('persistent_storage.
|
73
|
-
errors << validate_bool('persistent_storage.
|
74
|
-
errors << validate_bool('persistent_storage.
|
78
|
+
errors << validate_bool('persistent_storage.manage', @manage)
|
79
|
+
errors << validate_bool('persistent_storage.format', @format)
|
80
|
+
errors << validate_bool('persistent_storage.use_lvm', @use_lvm)
|
81
|
+
errors << validate_bool('persistent_storage.enabled', @enabled)
|
82
|
+
errors << validate_bool('persistent_storage.partition', @partition)
|
75
83
|
errors.compact!
|
76
84
|
|
77
|
-
if !machine.config.persistent_storage.size.kind_of?(
|
78
|
-
errors << I18n.t('vagrant_persistent_storage.config.
|
85
|
+
if !machine.config.persistent_storage.size.kind_of?(Fixnum)
|
86
|
+
errors << I18n.t('vagrant_persistent_storage.config.not_a_number', {
|
79
87
|
:config_key => 'persistent_storage.size',
|
80
88
|
:is_class => size.class.to_s,
|
81
89
|
})
|
@@ -110,6 +118,12 @@ module VagrantPlugins
|
|
110
118
|
:is_class => filesystem.class.to_s,
|
111
119
|
})
|
112
120
|
end
|
121
|
+
if !machine.config.persistent_storage.volgroupname.part_type_code?(String)
|
122
|
+
errors << I18n.t('vagrant_persistent_storage.config.not_a_string', {
|
123
|
+
:config_key => 'persistent_storage.part_type_code',
|
124
|
+
:is_class => volgroupname.class.to_s,
|
125
|
+
})
|
126
|
+
end
|
113
127
|
if !machine.config.persistent_storage.volgroupname.kind_of?(String)
|
114
128
|
errors << I18n.t('vagrant_persistent_storage.config.not_a_string', {
|
115
129
|
:config_key => 'persistent_storage.volgroupname',
|
@@ -118,19 +132,21 @@ module VagrantPlugins
|
|
118
132
|
end
|
119
133
|
|
120
134
|
mount_point_path = Pathname.new("#{machine.config.persistent_storage.location}")
|
121
|
-
if ! mount_point_path.absolute?
|
135
|
+
if ! (mount_point_path.absolute? || mount_point_path.relative?)
|
122
136
|
errors << I18n.t('vagrant_persistent_storage.config.not_a_path', {
|
123
137
|
:config_key => 'persistent_storage.location',
|
124
138
|
:is_path => location.class.to_s,
|
125
139
|
})
|
126
140
|
end
|
127
141
|
|
128
|
-
{ 'Persistent Storage configuration' => errors }
|
129
|
-
|
130
142
|
if ! File.exists?@location.to_s and ! @create == "true"
|
131
|
-
|
143
|
+
errors << I18n.t('vagrant_persistent_storage.config.no_create_and_missing', {
|
144
|
+
:config_key => 'persistent_storage.create',
|
145
|
+
:is_path => location.class.to_s,
|
146
|
+
})
|
132
147
|
end
|
133
|
-
|
148
|
+
|
149
|
+
{ 'Persistent Storage configuration' => errors }
|
134
150
|
end
|
135
151
|
|
136
152
|
private
|
@@ -14,8 +14,10 @@ module VagrantPlugins
|
|
14
14
|
fs_type = m.config.persistent_storage.filesystem
|
15
15
|
manage = m.config.persistent_storage.manage
|
16
16
|
use_lvm = m.config.persistent_storage.use_lvm
|
17
|
+
partition = m.config.persistent_storage.partition
|
17
18
|
mount = m.config.persistent_storage.mount
|
18
19
|
format = m.config.persistent_storage.format
|
20
|
+
part_type_code = m.config.persistent_storage.part_type_code
|
19
21
|
|
20
22
|
## windows filesystem options
|
21
23
|
drive_letter = m.config.persistent_storage.drive_letter
|
@@ -45,6 +47,7 @@ module VagrantPlugins
|
|
45
47
|
if os == "windows"
|
46
48
|
## shell script for windows to create NTFS partition and assign drive letter
|
47
49
|
disk_operations_template = ERB.new <<-EOF
|
50
|
+
<% if partition == true %>
|
48
51
|
<% if format == true %>
|
49
52
|
foreach ($disk in get-wmiobject Win32_DiskDrive -Filter "Partitions = 0"){
|
50
53
|
$disk.DeviceID
|
@@ -52,26 +55,30 @@ module VagrantPlugins
|
|
52
55
|
"select disk "+$disk.Index+"`r clean`r create partition primary`r format fs=ntfs unit=65536 quick`r active`r assign #{drive_letter}" | diskpart >> disk_operation_log.txt
|
53
56
|
}
|
54
57
|
<% end %>
|
58
|
+
<% end %>
|
55
59
|
EOF
|
56
60
|
else
|
57
61
|
## shell script to format disk, create/manage LVM, mount disk
|
58
62
|
disk_operations_template = ERB.new <<-EOF
|
59
63
|
#!/bin/bash
|
64
|
+
<% if partition == true %>
|
60
65
|
# fdisk the disk if it's not a block device already:
|
61
66
|
re='[0-9][.][0-9.]*[0-9.]*'; [[ $(sfdisk --version) =~ $re ]] && version="${BASH_REMATCH}"
|
62
67
|
if ! awk -v ver="$version" 'BEGIN { if (ver < 2.26 ) exit 1; }'; then
|
63
|
-
[ -b #{disk_dev}1 ] || echo 0
|
68
|
+
[ -b #{disk_dev}1 ] || echo 0,,#{part_type_code} | sfdisk #{disk_dev}
|
64
69
|
else
|
65
|
-
[ -b #{disk_dev}1 ] || echo
|
70
|
+
[ -b #{disk_dev}1 ] || echo ,,#{part_type_code} | sfdisk #{disk_dev}
|
66
71
|
fi
|
67
72
|
echo "fdisk returned: $?" >> disk_operation_log.txt
|
73
|
+
disk_dev=#{disk_dev}1
|
74
|
+
<% end %>
|
68
75
|
|
69
76
|
<% if use_lvm == true %>
|
70
77
|
# Create the physical volume if it doesn't already exist:
|
71
|
-
[[ `pvs #{disk_dev}
|
78
|
+
[[ `pvs #{disk_dev}` ]] || pvcreate #{disk_dev}
|
72
79
|
echo "pvcreate returned: $?" >> disk_operation_log.txt
|
73
80
|
# Create the volume group if it doesn't already exist:
|
74
|
-
[[ `vgs #{vg_name}` ]] || vgcreate #{vg_name} #{disk_dev}
|
81
|
+
[[ `vgs #{vg_name}` ]] || vgcreate #{vg_name} #{disk_dev}
|
75
82
|
echo "vgcreate returned: $?" >> disk_operation_log.txt
|
76
83
|
# Create the logical volume if it doesn't already exist:
|
77
84
|
[[ `lvs #{vg_name} | grep #{mnt_name}` ]] || lvcreate -l 100%FREE -n #{mnt_name} #{vg_name}
|
@@ -83,7 +90,7 @@ echo "vg activation returned: $?" >> disk_operation_log.txt
|
|
83
90
|
|
84
91
|
<% if format == true %>
|
85
92
|
# Create the filesytem if it doesn't already exist
|
86
|
-
MNT_NAME=#{mnt_name}
|
93
|
+
MNT_NAME=#{vg_name}-#{mnt_name}
|
87
94
|
[[ `blkid | grep ${MNT_NAME:0:16} | grep #{fs_type}` ]] || mkfs.#{fs_type} -L #{mnt_name} #{device}
|
88
95
|
echo "#{fs_type} creation return: $?" >> disk_operation_log.txt
|
89
96
|
<% if mount == true %>
|
data/locales/en.yml
CHANGED
@@ -9,4 +9,7 @@ en:
|
|
9
9
|
manage_storage: "** Managing persistent storage **"
|
10
10
|
config:
|
11
11
|
not_a_bool: "A value for %{config_key} can only be true or false, not type '%{value}'"
|
12
|
-
not_an_array_or_string: "A value for %{config_key} must be an Array or String, not type '%{
|
12
|
+
not_an_array_or_string: "A value for %{config_key} must be an Array or String, not type '%{value}'"
|
13
|
+
not_a_string: "A value for %{config_key} must be a String, not type '%{value}'"
|
14
|
+
not_a_path: "A value for %{config_key} must be resolveable as a path"
|
15
|
+
not_a_number: "A value for %{config_key} must be a number, not type '%{value}'"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-persistent-storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Kusnier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
91
|
rubyforge_project:
|
92
|
-
rubygems_version: 2.
|
92
|
+
rubygems_version: 2.6.12
|
93
93
|
signing_key:
|
94
94
|
specification_version: 4
|
95
95
|
summary: A Vagrant plugin that creates a persistent storage and attaches it to guest
|