shu-san-scripts 0.0.2 → 0.1.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.
data/Gemfile CHANGED
@@ -13,6 +13,12 @@ source "http://rubygems.org"
13
13
  # Command Line Interface Library
14
14
  gem "cri", "~> 2.0.2"
15
15
 
16
+ # Library extensions
17
+ gem "facets", ">= 2.4"
18
+
19
+ # GUID library
20
+ gem "uuidtools", "~> 2.1.2"
21
+
16
22
  ###
17
23
  ### Development Gems. All _additional_ gems required by development (as opposed to
18
24
  ### production environments). If it is required at run-time, it
data/Gemfile.lock CHANGED
@@ -14,6 +14,7 @@ GEM
14
14
  riot (0.12.5)
15
15
  rr
16
16
  rr (1.0.4)
17
+ uuidtools (2.1.2)
17
18
  vclog (1.8.1)
18
19
  ansi (>= 1.2)
19
20
  facets (>= 2.4)
@@ -25,8 +26,10 @@ PLATFORMS
25
26
  DEPENDENCIES
26
27
  bundler (~> 1.0.0)
27
28
  cri (~> 2.0.2)
29
+ facets (>= 2.4)
28
30
  jeweler (~> 1.6.0)
29
31
  minitest
30
32
  riot
33
+ uuidtools (~> 2.1.2)
31
34
  vclog (~> 1.8.1)
32
35
  yard (~> 0.6.0)
data/HISTORY CHANGED
@@ -17,13 +17,25 @@ Changes:
17
17
  * Version bump to 0.0.2. Added infrastructure needed for minimally working version
18
18
 
19
19
 
20
- HEAD / 2011-09-24
20
+ HEAD / 2011-09-25
21
21
 
22
22
  Current Development (David Love)
23
23
 
24
24
  Changes:
25
25
 
26
- * 1 General Enhancements
26
+ * 3 General Enhancements
27
27
 
28
+ * Version bump to 0.0.3
29
+ * Regenerate gemspec for version 0.0.2
28
30
  * Regenerate gemspec for version 0.0.2
29
31
 
32
+ * 1 Bug Fixes
33
+
34
+ * Format options as well as the text description
35
+
36
+ * 3 Patch Enhancements
37
+
38
+ * Add ability to generate the correct ZFS commands. Don't actually act on them yet
39
+ * Added support for sequential UUID's
40
+ * Require the Facets library in the main gem as well
41
+
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = SHU SAN Scripts
2
2
 
3
- Together these scripts define a ''store'' command, used to simplify the
3
+ Together these scripts define a +store+ command, used to simplify the
4
4
  task of creating iSCSI targets on OpenSolaris (Solaris > 11) based
5
5
  hosts. It has been tested on Nexenta NCP and Open Indiana, but with some
6
6
  modification it could be made to work on FreeBSD as well.
@@ -25,16 +25,16 @@ available can be obtained by
25
25
 
26
26
  once everything has been installed.
27
27
 
28
- **Note:** The scripts assume they are running (or at least have access to)
29
- the ''root'' user role, as they will manipulate your ZFS volumes. You
28
+ *Note:* The scripts assume they are running (or at least have access to)
29
+ the +root+ user role, as they will manipulate your ZFS volumes. You
30
30
  can either install them with the appropriate privileges, or install the
31
- ''sudo'' command to make life easier. With ''sudo''
31
+ +sudo+ command to make life easier. With +sudo+
32
32
 
33
33
  sudo store --help
34
34
 
35
35
  should get you started.
36
36
 
37
- **Warning:** We use these scripts in a *teaching* environment, and so we
37
+ *Warning:* We use these scripts in a _teaching_ environment, and so we
38
38
  assume the host they are running on is somewhat disposable. Your needs
39
39
  may differ...
40
40
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
@@ -51,7 +51,7 @@ module SANStore::CLI
51
51
  add_command(self.help_command)
52
52
 
53
53
  # Add other commands
54
- #add_command(SANStore::CLI::Commands::NewVol.new)
54
+ add_command(SANStore::CLI::Commands::NewVol.new)
55
55
  #add_command(SANStore::CLI::Commands::ListVols.new)
56
56
  end
57
57
 
@@ -26,5 +26,5 @@ end
26
26
 
27
27
  require 'SANStore/cli/commands/help'
28
28
 
29
- #require 'SANStore/cli/commands/new_vol'
29
+ require 'SANStore/cli/commands/new_vol'
30
30
  #require 'SANStore/cli/commands/list_vols'
@@ -12,90 +12,106 @@
12
12
  # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
13
  # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
14
 
15
+ # Volume names are based on RFC 4122 UUIDs
16
+ require "uuidtools"
15
17
 
16
- module WhiteCloth::CLI::Commands
18
+ # Use the ZFS library
19
+ require "SANStore/zfs/zfs"
20
+
21
+ # Use the COMStar iSCSI library
22
+ require "SANStore/iSCSI/comstar.rb"
23
+
24
+ module SANStore::CLI::Commands
17
25
 
18
26
  # @author David Love
19
27
  #
20
- # The +bootstrap+ command prepared the basic WhiteCloth realms (if
21
- # needed), and then links the current host to those realms. The basic
22
- # realms consists of
23
- #
24
- # +Realm 0+: *Namespace*. All the named realms stored in this domain.
25
- #
26
- # +Realm 1+: *Realm Handlers*. The basic gateways needed to create/store/update
27
- # other realms.
28
- #
29
- # +Realm 5+: *Realm Code*. Libraries and other code which the realm handlers
30
- # should use by preference when conducting operations on the realms.
31
- #
32
- # If the IP address of a server (or a server name) is given to as an argument
33
- # to this command, then we will use that IP address (name) for as the WhiteCloth
34
- # realm server to contact. Otherwise we will look for the same data from the file
35
- # +/etc/whitecloth.conf+: aborting if the file cannot be found.
36
- #
37
- # Once we have made contact with the server, we look at the basic realms listed
38
- # above, and attempt to ensure they can be found. If not, an attempt is made to
39
- # create the basic realms: aborting if this attempt fails.
40
- #
41
- # Finally, once everything has been set-up, we upload the core realm code (or
42
- # update the existing code)
43
- class Bootstrap < Cri::Command
28
+ # The +new_vol+ command adds a new ZFS volume to the specified volume
29
+ # store, and sets it up as an iSCSI target. Defaults are supplied to
30
+ # all arguments, but can be overridden by the user for slightly
31
+ # customised set-up of the volume store. However, the user interface
32
+ # should be kept as simple as possible.
33
+ class NewVol < Cri::Command
44
34
 
45
35
  # The name of the sub-command (as it appears in the command line app)
46
36
  def name
47
- 'bootstrap'
37
+ 'new_vol'
48
38
  end
49
39
 
50
40
  # The aliases this sub-command is known by
51
41
  def aliases
52
- []
42
+ [
43
+ "new", "add", "add_vol"
44
+ ]
53
45
  end
54
46
 
55
47
  # A short help text describing the purpose of this command
56
48
  def short_desc
57
- 'Create a link between this host and the whitecloth servers.'
49
+ 'Create a new iSCSI volume in the SAN volume store.'
58
50
  end
59
51
 
60
52
  # A longer description, detailing both the purpose and the
61
53
  # use of this command
62
54
  def long_desc
63
- 'Look for the specified server, adding the data required to link the ' +
64
- 'current host to that server. If the found server has not been set-up ' +
65
- 'then this command also performs the setup of the base realms as well. '
55
+ 'By default, this command creates a 20G ZFS volume, and marks it for ' +
56
+ 'sharing as an iSCSI target on the local network.' + "\n\n" +
57
+ 'Warning: By default this commands sets up the iSCSI target with NO ' +
58
+ 'security. This is fine for testing and use in the labs, but obviously ' +
59
+ 'is not ideal if you care about the data stored on this new volume...'
66
60
  end
67
61
 
68
62
  # Show the user the basic syntax of this command
69
63
  def usage
70
- "whitecloth bootstrap [-s server]"
64
+ "store new_volume [--volume-store ZFS_PATH][--name GUID] [--size INTEGER]"
71
65
  end
72
66
 
73
67
  # Define the options for this command
74
68
  def option_definitions
75
69
  [
76
- { :short => 's', :long => 'server', :argument => :optional }
70
+ { :short => 'v', :long => 'volume_store', :argument => :optional,
71
+ :desc => 'specifify the ZFS root of the new iSCSI volume. Defaults to "store/volumes".'
72
+ },
73
+ { :short => 'n', :long => 'name', :argument => :optional,
74
+ :desc => 'the name of the new volume. This must be a valid ZFS volume name, and defaults to ' +
75
+ 'an RFC 4122 GUID.'
76
+ },
77
+ { :short => 's', :long => 'size', :argument => :optional,
78
+ :desc => 'the size of the new iSCSI volume. Note that while ZFS allows you to change the size ' +
79
+ 'of the new volume relatively easily, because the iSCSI initiator sees this volume as a raw ' +
80
+ 'device changing the size later may be very easy or very difficult depending on the initiators ' +
81
+ 'operating system (and the specific file system being used). In other words, choose with care: ' +
82
+ 'by default this command uses a size of 20G, which should be enough for most tasks in the labs.'
83
+ },
77
84
  ]
78
85
  end
79
86
 
80
87
  # Execute the command
81
88
  def run(options, arguments)
89
+
90
+ # Look at the options, and if we don't find any (or some are
91
+ # missing), set them to the default values
92
+ if options[:volume_store].nil? or options[:volume_store].empty? then
93
+ volume_store = "store/volumes"
94
+ options[:volume_store] = volume_store
95
+ end
82
96
 
83
- # The first thing we need to do is to find the relevant server. So we
84
- # check the options and see if they can help
85
- unless options[:server].nil? or options[:server].empty? then
86
- #
87
- else
97
+ if options[:name].nil? or options[:name].empty? then
98
+ name = UUIDTools::UUID.timestamp_create
99
+ options[:name] = name.to_s
100
+ end
88
101
 
89
- # The user has not specified a server, so we will attempt to get one
90
- # from the system configuration
91
- if File.exists?("/etc/whitecloth.conf") then
92
- #
93
-
94
- # Everything has failed, so we abort
95
- else
96
- WhiteCloth::CLI::Logger.instance.log_level(:high, :error, "Cannot locate a WhiteCloth server. Either specify the server to connect to using the 'server' option, or create an appropriate configuration file.")
97
- end
98
- end
102
+ if options[:size].nil? or options[:size].empty? then
103
+ size = "20G"
104
+ options[:size] = size
105
+ end
106
+
107
+ # Ask for a new volume
108
+ ZFS.new_volume(options[:volume_store] + "/" + options[:name], options[:size])
109
+
110
+ # Set the volume up as an iSCSI target
111
+ target_name = COMStar.new_target(options[:volume_store] + "/" + options[:name])
112
+
113
+ # Tell the caller what the new volume name is
114
+ puts target_name
99
115
  end
100
116
 
101
117
  end
@@ -86,7 +86,7 @@ module Cri
86
86
  text << "options:\n"
87
87
  text << "\n"
88
88
  option_definitions.sort { |x,y| x[:long] <=> y[:long] }.each do |opt_def|
89
- text << sprintf(" -%1s --%-10s %s\n", opt_def[:short], opt_def[:long], opt_def[:desc])
89
+ text << sprintf(" -%1s --%-10s %s\n\n", opt_def[:short], opt_def[:long], opt_def[:desc].wrap_and_indent(78, 20).lstrip)
90
90
  end
91
91
  end
92
92
 
@@ -0,0 +1,35 @@
1
+ # Copyright (c) 2010-2011 David Love
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for
4
+ # any purpose with or without fee is hereby granted, provided that the
5
+ # above copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+ #
15
+
16
+ # @author David Love
17
+
18
+ require "uuidtools"
19
+
20
+ # Extendes the {UUIDTools::UUID} class, adding the ability to
21
+ # generate sequential UUID's
22
+ class UUIDTools::UUID
23
+
24
+ # Increments the internal UUID representation, returning a
25
+ # new UUID that is different from, but greater, than the
26
+ # current sequence number
27
+ def next
28
+ next_uuid = self.to_i
29
+ next_uuid += 1
30
+
31
+ # Return the newly created UUID
32
+ return UUIDTools::UUID::parse_int(next_uuid)
33
+ end
34
+
35
+ end
@@ -0,0 +1,45 @@
1
+ # Copyright (c) 2010-2011 David Love
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for
4
+ # any purpose with or without fee is hereby granted, provided that the
5
+ # above copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+ #
15
+
16
+ # @author David Love
17
+
18
+ # Defines a class capable of creating iSCSI shares using the new
19
+ # COMStar framework. This classes uses the various command line tools,
20
+ # not the C API.
21
+ class COMStar
22
+
23
+ # Create a new, ready to use, iSCSI target. Functionally this is command
24
+ # is equivalent to the old "shareiscsi=on" ZFS volume property.
25
+ def self.new_target(volume_path)
26
+
27
+ # Create a new disk target for the ZFS volume
28
+ disk_target = %x[sbdadm create-lu /dev/zvol/rdsk/#{volume_path}]
29
+
30
+ # Get the GUID of the new disk target from the output of the
31
+ # target creation command
32
+ guid = disk_target.split(/$/)[4].split[0]
33
+
34
+ # Link the new disk target to the iSCSI framework
35
+ vol_frame = %x[stmfadm add-view #{guid}]
36
+
37
+ # Finally create the target...
38
+ target = %x[itadm create-target]
39
+
40
+ #... and return the name to the caller
41
+ target_name = target.split[1]
42
+ end
43
+
44
+ end
45
+
@@ -0,0 +1,36 @@
1
+ # Copyright (c) 2010-2011 David Love
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for
4
+ # any purpose with or without fee is hereby granted, provided that the
5
+ # above copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+ #
15
+
16
+ # @author David Love
17
+
18
+ # Defines a class capable of manipulating ZFS volumes. This classes uses
19
+ # the standard command line tools (+zfs+ and +zpool+), not the C API.
20
+ class ZFS
21
+
22
+ # Create a new volume, at the specified location and of the specified
23
+ # size.
24
+ #
25
+ # NOTE: This command currently only supports the creation of sparse
26
+ # volumes. If you really need pre-allocated volumes for some reason,
27
+ # this command needs to be extended
28
+ def self.new_volume(volume_path, volume_size)
29
+
30
+ # Create the volume
31
+ cmd = %x[zfs create -s -V #{volume_size} #{volume_path}]
32
+
33
+ end
34
+
35
+ end
36
+
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{shu-san-scripts}
8
- s.version = "0.0.2"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{David Love}]
12
- s.date = %q{2011-09-23}
12
+ s.date = %q{2011-09-24}
13
13
  s.description = %q{See the README file.}
14
14
  s.email = %q{david@homeunix.org.uk}
15
15
  s.executables = [%q{store}]
@@ -42,6 +42,9 @@ Gem::Specification.new do |s|
42
42
  "lib/SANStore/cri/core_ext.rb",
43
43
  "lib/SANStore/cri/core_ext/string.rb",
44
44
  "lib/SANStore/cri/option_parser.rb",
45
+ "lib/SANStore/helpers/uuid.rb",
46
+ "lib/SANStore/iSCSI/comstar.rb",
47
+ "lib/SANStore/zfs/zfs.rb",
45
48
  "shu-san-scripts.gemspec",
46
49
  "test/helper.rb",
47
50
  "test/test_shu-san-scripts.rb"
@@ -57,6 +60,8 @@ Gem::Specification.new do |s|
57
60
 
58
61
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
59
62
  s.add_runtime_dependency(%q<cri>, ["~> 2.0.2"])
63
+ s.add_runtime_dependency(%q<facets>, [">= 2.4"])
64
+ s.add_runtime_dependency(%q<uuidtools>, ["~> 2.1.2"])
60
65
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
61
66
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
62
67
  s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
@@ -65,6 +70,8 @@ Gem::Specification.new do |s|
65
70
  s.add_development_dependency(%q<riot>, [">= 0"])
66
71
  else
67
72
  s.add_dependency(%q<cri>, ["~> 2.0.2"])
73
+ s.add_dependency(%q<facets>, [">= 2.4"])
74
+ s.add_dependency(%q<uuidtools>, ["~> 2.1.2"])
68
75
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
69
76
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
70
77
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
@@ -74,6 +81,8 @@ Gem::Specification.new do |s|
74
81
  end
75
82
  else
76
83
  s.add_dependency(%q<cri>, ["~> 2.0.2"])
84
+ s.add_dependency(%q<facets>, [">= 2.4"])
85
+ s.add_dependency(%q<uuidtools>, ["~> 2.1.2"])
77
86
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
78
87
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
79
88
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 0.0.2
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Love
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-23 00:00:00 Z
18
+ date: 2011-09-24 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :runtime
@@ -34,8 +34,39 @@ dependencies:
34
34
  name: cri
35
35
  prerelease: false
36
36
  - !ruby/object:Gem::Dependency
37
- type: :development
37
+ type: :runtime
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 11
44
+ segments:
45
+ - 2
46
+ - 4
47
+ version: "2.4"
48
+ version_requirements: *id002
49
+ name: facets
50
+ prerelease: false
51
+ - !ruby/object:Gem::Dependency
52
+ type: :runtime
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 15
59
+ segments:
60
+ - 2
61
+ - 1
62
+ - 2
63
+ version: 2.1.2
64
+ version_requirements: *id003
65
+ name: uuidtools
66
+ prerelease: false
67
+ - !ruby/object:Gem::Dependency
68
+ type: :development
69
+ requirement: &id004 !ruby/object:Gem::Requirement
39
70
  none: false
40
71
  requirements:
41
72
  - - ~>
@@ -46,12 +77,12 @@ dependencies:
46
77
  - 0
47
78
  - 0
48
79
  version: 1.0.0
49
- version_requirements: *id002
80
+ version_requirements: *id004
50
81
  name: bundler
51
82
  prerelease: false
52
83
  - !ruby/object:Gem::Dependency
53
84
  type: :development
54
- requirement: &id003 !ruby/object:Gem::Requirement
85
+ requirement: &id005 !ruby/object:Gem::Requirement
55
86
  none: false
56
87
  requirements:
57
88
  - - ~>
@@ -62,12 +93,12 @@ dependencies:
62
93
  - 6
63
94
  - 0
64
95
  version: 1.6.0
65
- version_requirements: *id003
96
+ version_requirements: *id005
66
97
  name: jeweler
67
98
  prerelease: false
68
99
  - !ruby/object:Gem::Dependency
69
100
  type: :development
70
- requirement: &id004 !ruby/object:Gem::Requirement
101
+ requirement: &id006 !ruby/object:Gem::Requirement
71
102
  none: false
72
103
  requirements:
73
104
  - - ~>
@@ -78,12 +109,12 @@ dependencies:
78
109
  - 6
79
110
  - 0
80
111
  version: 0.6.0
81
- version_requirements: *id004
112
+ version_requirements: *id006
82
113
  name: yard
83
114
  prerelease: false
84
115
  - !ruby/object:Gem::Dependency
85
116
  type: :development
86
- requirement: &id005 !ruby/object:Gem::Requirement
117
+ requirement: &id007 !ruby/object:Gem::Requirement
87
118
  none: false
88
119
  requirements:
89
120
  - - ~>
@@ -94,12 +125,12 @@ dependencies:
94
125
  - 8
95
126
  - 1
96
127
  version: 1.8.1
97
- version_requirements: *id005
128
+ version_requirements: *id007
98
129
  name: vclog
99
130
  prerelease: false
100
131
  - !ruby/object:Gem::Dependency
101
132
  type: :development
102
- requirement: &id006 !ruby/object:Gem::Requirement
133
+ requirement: &id008 !ruby/object:Gem::Requirement
103
134
  none: false
104
135
  requirements:
105
136
  - - ">="
@@ -108,12 +139,12 @@ dependencies:
108
139
  segments:
109
140
  - 0
110
141
  version: "0"
111
- version_requirements: *id006
142
+ version_requirements: *id008
112
143
  name: minitest
113
144
  prerelease: false
114
145
  - !ruby/object:Gem::Dependency
115
146
  type: :development
116
- requirement: &id007 !ruby/object:Gem::Requirement
147
+ requirement: &id009 !ruby/object:Gem::Requirement
117
148
  none: false
118
149
  requirements:
119
150
  - - ">="
@@ -122,7 +153,7 @@ dependencies:
122
153
  segments:
123
154
  - 0
124
155
  version: "0"
125
- version_requirements: *id007
156
+ version_requirements: *id009
126
157
  name: riot
127
158
  prerelease: false
128
159
  description: See the README file.
@@ -159,6 +190,9 @@ files:
159
190
  - lib/SANStore/cri/core_ext.rb
160
191
  - lib/SANStore/cri/core_ext/string.rb
161
192
  - lib/SANStore/cri/option_parser.rb
193
+ - lib/SANStore/helpers/uuid.rb
194
+ - lib/SANStore/iSCSI/comstar.rb
195
+ - lib/SANStore/zfs/zfs.rb
162
196
  - shu-san-scripts.gemspec
163
197
  - test/helper.rb
164
198
  - test/test_shu-san-scripts.rb