vipruby 0.1.4 → 0.1.6.1

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.yardoc/checksums +7 -0
  4. data/.yardoc/object_types +0 -0
  5. data/.yardoc/objects/root.dat +0 -0
  6. data/.yardoc/proxy_types +0 -0
  7. data/.yardopts +1 -0
  8. data/Gemfile +4 -0
  9. data/Gemfile.lock +22 -0
  10. data/LICENSE.txt +22 -0
  11. data/README.md +49 -0
  12. data/Rakefile +2 -0
  13. data/doc/Host.html +910 -0
  14. data/doc/Vipr.html +656 -0
  15. data/doc/ViprBase.html +928 -0
  16. data/doc/ViprHost.html +1952 -0
  17. data/doc/ViprStorageSystem.html +2695 -0
  18. data/doc/ViprVcenter.html +1540 -0
  19. data/doc/Vipruby.html +139 -0
  20. data/doc/Vipruby/Auth.html +745 -0
  21. data/doc/_index.html +135 -0
  22. data/doc/class_list.html +58 -0
  23. data/doc/css/common.css +1 -0
  24. data/doc/css/full_list.css +57 -0
  25. data/doc/css/style.css +339 -0
  26. data/doc/file.README.html +121 -0
  27. data/doc/file_list.html +60 -0
  28. data/doc/frames.html +26 -0
  29. data/doc/index.html +121 -0
  30. data/doc/js/app.js +219 -0
  31. data/doc/js/full_list.js +181 -0
  32. data/doc/js/jquery.js +4 -0
  33. data/doc/method_list.html +333 -0
  34. data/doc/top-level-namespace.html +114 -0
  35. data/lib/.yardoc/checksums +0 -0
  36. data/lib/.yardoc/object_types +0 -0
  37. data/lib/.yardoc/objects/root.dat +0 -0
  38. data/lib/.yardoc/proxy_types +0 -0
  39. data/lib/vipruby.rb +6 -426
  40. data/lib/vipruby/.yardoc/checksums +0 -0
  41. data/lib/vipruby/.yardoc/object_types +0 -0
  42. data/lib/vipruby/.yardoc/objects/root.dat +0 -0
  43. data/lib/vipruby/.yardoc/proxy_types +0 -0
  44. data/lib/vipruby/objects/host.rb +234 -0
  45. data/lib/vipruby/objects/storagesystem.rb +278 -0
  46. data/lib/vipruby/objects/vcenter.rb +162 -0
  47. data/lib/vipruby/version.rb +6 -0
  48. data/lib/vipruby/vipr.rb +45 -0
  49. data/lib/vipruby/viprbase.rb +84 -0
  50. data/vipruby.gemspec +29 -0
  51. metadata +100 -9
@@ -0,0 +1,162 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ # The Following vCenter calls will get vCenter information for all tenants
5
+ module ViprVcenter
6
+
7
+ # Retrive all vCenter Servers registered for all tenants
8
+ #
9
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
10
+ def get_all_vcenters(auth=nil, cert=nil)
11
+ rest_get("#{@base_url}/compute/vcenters/bulk", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
12
+ end
13
+
14
+ # Retrieve information for a single vCenter server using the uid
15
+ #
16
+ # @param vcenter_id [String] Requires the string of the vcenter uid
17
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
18
+ #
19
+ # @example
20
+ # x = vipr.get_all_vcenters['id'][0]
21
+ # vipr.get_vcenter(x)
22
+ def get_vcenter(vcenter_id=nil, auth=nil, cert=nil)
23
+ check_vcenter(vcenter_id)
24
+ rest_get("#{@base_url}/compute/vcenters/#{vcenter_id}", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
25
+ end
26
+
27
+ # Retrieve Host information for a single vCenter server using the uid
28
+ #
29
+ # @param vcenter_id [String] Requires the string of the vcenter uid
30
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
31
+ #
32
+ # @example
33
+ # x = vipr.get_all_vcenters['id'][0]
34
+ # vipr.get_vcenter_hosts(x)
35
+ def get_vcenter_hosts(vcenter_id=nil, auth=nil, cert=nil)
36
+ check_vcenter(vcenter_id)
37
+ rest_get("#{@base_url}/compute/vcenters/#{vcenter_id}/hosts", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
38
+ end
39
+
40
+ # Retrieve Cluster information for a single vCenter server using the uid
41
+ #
42
+ # @param vcenter_id [String] Requires the string of the vcenter uid
43
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
44
+ #
45
+ # @example
46
+ # x = vipr.get_all_vcenters['id'][0]
47
+ # vipr.get_vcenter_clusters(x)
48
+ def get_vcenter_clusters(vcenter_id=nil, auth=nil, cert=nil)
49
+ check_vcenter(vcenter_id)
50
+ rest_get("#{@base_url}/compute/vcenters/#{vcenter_id}/clusters", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
51
+ end
52
+
53
+ # Retrieve Datacenter information for a single vCenter server using the uid
54
+ #
55
+ # @param vcenter_id [String] Requires the string of the vcenter uid
56
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
57
+ #
58
+ # @example
59
+ # x = vipr.get_all_vcenters['id'][0]
60
+ # vipr.get_vcenter_datacenters(x)
61
+ def get_vcenter_datacenters(vcenter_id=nil, auth=nil, cert=nil)
62
+ check_vcenter(vcenter_id)
63
+ rest_get("#{@base_url}/compute/vcenters/#{vcenter_id}/vcenter-data-centers", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
64
+ end
65
+
66
+ # Search for vCenters matching a specific parameter
67
+ #
68
+ # @param vcenter_search_hash [String] String for searching
69
+ # @return [Hash] Will return any vCenter objects containing the search string. The object converted into Hash format and can be parsed with object[0] or object['id'] notation
70
+ #
71
+ # @example
72
+ # vipr.find_vcenter_object('demo')
73
+ def find_vcenter_object(vcenter_search_hash=nil, auth=nil, cert=nil)
74
+ check_vcenter_object_hash(vcenter_search_hash)
75
+ rest_get("#{@base_url}/compute/vcenters/search?name=#{vcenter_search_hash}", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
76
+ end
77
+
78
+ # Add a vCenters to a specified tenant
79
+ #
80
+ # @param fqdn_or_ip [String] FQDN or IP Address of the vCenter server to add. This is a required string.
81
+ # @param name [String] Name of the vCenter server. This name is arbitrary and only exists within ViPR. This is a required string.
82
+ # @param user_name [String] User Name that will be used for authenticating against the vCenter Server. This is a required string.
83
+ # @param password [String] Password for the user_name that will be used for authenticating against the vCenter Server. This is a required string.
84
+ # @param port [String] Port of the vCenter server. This is an optional parameter. If no parameter is present, the default port of '443' will be used. If registering to a different tenant than default, set this param to nil
85
+ # @param tenant [String] Specify a tenant_uid where the vCenter will be registered. By default it will be added to the tenant of the current logged in ViPR user. This string is optional.
86
+ # @return [Hash] The resulted post operation
87
+ #
88
+ # @example
89
+ # vipr.add_vcenter('vcenter1.mydomain.com', 'vCENTER1', 'DOMAIN\user', 'userpw')
90
+ # vipr.add_vcenter('vcenter2.mydomain.com', 'vCENTER2', 'DOMAIN\user', 'userpw', '1092')
91
+ # vipr.add_vcenter('vcenter3.mydomain.com', 'vCENTER3', 'DOMAIN\user', 'userpw', nil, 'diff_tenant_uid')
92
+ def add_vcenter(fqdn_or_ip=nil, name=nil, user_name=nil, password=nil, port=nil, tenant=nil, auth=nil, cert=nil)
93
+ check_vcenter_post(fqdn_or_ip, name, user_name, password)
94
+ port.nil? ? port = '443' : port = port
95
+ payload = {
96
+ ip_address: fqdn_or_ip,
97
+ name: name,
98
+ port_number: port,
99
+ user_name: user_name,
100
+ password: password
101
+ }.to_json
102
+ rest_post(payload, "#{@base_url}/tenants/#{@tenant_uid}/vcenters", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
103
+ end
104
+
105
+ # Delete a vCenter from any tenant based on vCenter ID
106
+ #
107
+ # @param vcenter_id [String] Requires the string of the vcenter uid
108
+ # @return [Hash] The resulted post operation
109
+ #
110
+ # @example
111
+ # x = vipr.get_all_vcenters['id'][0]
112
+ # vipr.delete_vcenter(x)
113
+ def delete_vcenter(vcenter_id=nil, auth=nil, cert=nil)
114
+ check_vcenter(vcenter_id)
115
+ payload = {
116
+ }.to_json
117
+ rest_post(payload, "#{@base_url}/compute/vcenters/#{vcenter_id}/deactivate", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
118
+ end
119
+
120
+
121
+ private
122
+
123
+ # Error Handling method to check for Missing vCenter ID param. If the pass fails, an error exception is raised
124
+ #
125
+ # @param vcenter_id [String] Requires the string of the vcenter uid
126
+ # @return [Boolean] True if pass, false if it fails
127
+ #
128
+ # @private
129
+ def check_vcenter(vcenter_id=nil)
130
+ if vcenter_id == nil
131
+ raise "Missing vCenter ID param (vcenter_id)"
132
+ end
133
+ end
134
+
135
+ # Error Handling method to check for Missing vCenter Object param. If the pass fails, an error exception is raised
136
+ #
137
+ # @param vcenter_search_hash [String] Requires the string of something to search
138
+ # @return [Boolean] True if pass, false if it fails
139
+ #
140
+ # @private
141
+ def check_vcenter_object_hash(vcenter_search_hash=nil)
142
+ if vcenter_search_hash == nil
143
+ raise "Missing vCenter Object to search as a param"
144
+ end
145
+ end
146
+
147
+ # Error Handling method to check for Missing Param. If the pass fails, an error exception is raised
148
+ #
149
+ # @param fqdn_or_ip [String] Requires the string of the vcenter FQDN or IP Address
150
+ # @param name [String] Requires the name of the vCenter
151
+ # @param user_name [String] Requires the User Name used for authentication to vCenter
152
+ # @param password [String] Requires the password of the User Name used for authentication to vCenter
153
+ # @return [Boolean] True if pass, false if it fails
154
+ #
155
+ # @private
156
+ def check_vcenter_post(fqdn_or_ip=nil, name=nil, user_name=nil, password=nil)
157
+ if fqdn_or_ip == nil || name == nil || user_name == nil || password == nil
158
+ raise "Missing a Required Param of fqdn_or_ip, name, port, user_name, or password"
159
+ end
160
+ end
161
+
162
+ end
@@ -0,0 +1,6 @@
1
+ # Get Version information for this Gem
2
+ module Vipruby
3
+
4
+ # Version of the Gem File
5
+ VERSION = "0.1.6.1"
6
+ end
@@ -0,0 +1,45 @@
1
+
2
+ require "vipruby/viprbase"
3
+ require "vipruby/objects/vcenter"
4
+ require 'vipruby/objects/storagesystem'
5
+ require 'vipruby/objects/host'
6
+
7
+ # The base class for the gem. Every subsequent method relies on creating an object from this class
8
+ class Vipr
9
+ include ViprBase
10
+ include ViprVcenter
11
+ include ViprStorageSystem
12
+ include ViprHost
13
+
14
+ # required params used for almost every single method
15
+ attr_accessor :tenant_uid, :auth_token, :base_url, :verify_cert
16
+
17
+ # Initializes a Vipr object that all methods can follow.
18
+ #
19
+ # @param base_url [String] The IP address or FQDN of the ViPR appliance. Do not include 'https' or port numbers
20
+ # @param user_name [String] Username used to log into ViPR
21
+ # @param password [String] Password used to log into ViPR
22
+ # @param verify_cert [Boolean] Should the cert be SSL verified? Setting it to false will work for development purposes. Should be set to true for production
23
+ # @return [Object] The Vipruby object that can be used with many different methods
24
+ #
25
+ # @note
26
+ # Every POST call requires a Tenant UID to create an object.
27
+ # This variable gets the current logged in tenant information.
28
+ # Nothing else needs to be done if there is a single tenant configured for ViPR
29
+ # If resources need to be added to specific tenants, this variable must be overwritten
30
+ # by specifying the tenant_uid
31
+ #
32
+ # @example New Vipruby Object
33
+ # base_url = 'vipr.mydomain.com'
34
+ # user_name = 'root'
35
+ # password = 'mypw'
36
+ # verify_cert = false
37
+ # vipr = Vipr.new(base_url,user_name,password,verify_cert)
38
+ def initialize(base_url,user_name,password,verify_cert)
39
+ @base_url = generate_base_url(base_url)
40
+ @verify_cert = to_boolean(verify_cert)
41
+ @auth_token = get_auth_token(user_name,password)
42
+ @tenant_uid = get_tenant_uid['id']
43
+ end
44
+
45
+ end
@@ -0,0 +1,84 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ #Base methods used for all operations such as logging in and performing API calls
5
+ module ViprBase
6
+
7
+ # Generic API post call
8
+ #
9
+ # @param payload [JSON] the JSON payload to be posted
10
+ # @param api_url [string] the full API URL path
11
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
12
+ def rest_post(payload, api_url, auth=nil, cert=nil)
13
+ JSON.parse(RestClient::Request.execute(method: :post,
14
+ url: api_url,
15
+ verify_ssl: cert.nil? ? @verify_cert : cert,
16
+ payload: payload,
17
+ headers: {
18
+ :'X-SDS-AUTH-TOKEN' => auth.nil? ? @auth_token : auth,
19
+ content_type: 'application/json',
20
+ accept: :json
21
+ }))
22
+ end
23
+
24
+ # Generic API get call
25
+ #
26
+ # @param api_url [string] the full API URL path
27
+ # @return [Hash] the object converted into Hash format and can be parsed with object[0] or object['id'] notation
28
+ def rest_get(api_url, auth=nil, cert=nil)
29
+ JSON.parse(RestClient::Request.execute(method: :get,
30
+ url: api_url,
31
+ verify_ssl: cert.nil? ? @verify_cert : cert,
32
+ headers: {
33
+ :'X-SDS-AUTH-TOKEN' => auth.nil? ? @auth_token : auth,
34
+ accept: :json
35
+ }))
36
+ end
37
+
38
+ # Get the current users Tenant UID
39
+ #
40
+ # @return [Hash] Hash return with the Tenant UID ['id'].
41
+ def get_tenant_uid(base=nil, auth=nil, cert=nil)
42
+ rest_get(base.nil? ? @base_url + "/tenant" : base + "/tenant", auth.nil? ? @auth_token : auth, cert.nil? ? @verify_cert : cert)
43
+ end
44
+
45
+ # Login to ViPR
46
+ #
47
+ # @param user_name [string] the username used to login
48
+ # @param password [string] the password for the username
49
+ # @return [HTML] returns token information in headers
50
+ def login(user_name, password, cert=nil, base=nil)
51
+ RestClient::Request.execute(method: :get,
52
+ url: base.nil? ? @base_url : base + "/login",
53
+ user: user_name,
54
+ password: password,
55
+ verify_ssl: cert.nil? ? @verify_cert : cert
56
+ )
57
+ end
58
+
59
+ # Generate the URL for standard ViPR instances using https: and port :443
60
+ #
61
+ # @param ip_or_fqdn [string] String representation of the IP Address or Fully Qualified Domain Name of the ViPR instance
62
+ # @return [strong] returns the full URL for API called
63
+ def generate_base_url(ip_or_fqdn)
64
+ return "https://#{ip_or_fqdn}:4443"
65
+ end
66
+
67
+ # Get User's Authentication Token
68
+ #
69
+ # @param user_name [string] the username used to login
70
+ # @param password [string] the password for the username
71
+ # @return [String] returns authentication token for the user
72
+ def get_auth_token(user_name,password, cert=nil, base=nil)
73
+ login(user_name, password, cert.nil? ? @verify_cert : cert, base.nil? ? @base_url : base).headers[:x_sds_auth_token]
74
+ end
75
+
76
+ # Ensure value is a boolean
77
+ #
78
+ # @param str [string, bool] the value to convert or verify
79
+ # @return [bool] returns True or False
80
+ def to_boolean(str)
81
+ str.to_s.downcase == "true"
82
+ end
83
+
84
+ end
data/vipruby.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'vipruby/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'vipruby'
7
+ s.version = Vipruby::VERSION
8
+ s.date = Date.today.to_s
9
+ s.summary = "A Ruby Library for EMC's ViPR"
10
+ s.description = "A Ruby implementation to add & gather information from Storage Arrays, vCenter, and Compute Hosts"
11
+ s.authors = ["Craig J Smith", "Kendrick Coleman"]
12
+ s.email = 'nctiggy@gmail.com'
13
+ s.require_paths = %w[lib]
14
+ s.files = `git ls-files`.split($/)
15
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
+ s.require_paths = ["lib"]
18
+ s.homepage =
19
+ 'https://github.com/nctiggy/Vipruby'
20
+ s.license = 'MIT'
21
+ s.add_runtime_dependency "json",
22
+ ["~> 1.8"]
23
+ s.add_runtime_dependency "rest-client",
24
+ ["= 1.7.2"]
25
+ s.add_development_dependency 'bundler', '~> 1.3'
26
+ s.add_development_dependency 'rake'
27
+ s.add_development_dependency 'rspec'
28
+ s.add_development_dependency 'yard'
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vipruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig J Smith
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-20 00:00:00.000000000 Z
12
+ date: 2014-12-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -40,27 +40,117 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.7.2
42
42
  - !ruby/object:Gem::Dependency
43
- name: nokogiri
43
+ name: bundler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.3'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
44
58
  requirement: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - ">="
47
61
  - !ruby/object:Gem::Version
48
- version: 1.6.0
49
- type: :runtime
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: yard
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
50
92
  prerelease: false
51
93
  version_requirements: !ruby/object:Gem::Requirement
52
94
  requirements:
53
95
  - - ">="
54
96
  - !ruby/object:Gem::Version
55
- version: 1.6.0
56
- description: Currently limited to host and initiator add functions along with vCenter
57
- and storage additions
97
+ version: '0'
98
+ description: A Ruby implementation to add & gather information from Storage Arrays,
99
+ vCenter, and Compute Hosts
58
100
  email: nctiggy@gmail.com
59
101
  executables: []
60
102
  extensions: []
61
103
  extra_rdoc_files: []
62
104
  files:
105
+ - ".gitignore"
106
+ - ".yardoc/checksums"
107
+ - ".yardoc/object_types"
108
+ - ".yardoc/objects/root.dat"
109
+ - ".yardoc/proxy_types"
110
+ - ".yardopts"
111
+ - Gemfile
112
+ - Gemfile.lock
113
+ - LICENSE.txt
114
+ - README.md
115
+ - Rakefile
116
+ - doc/Host.html
117
+ - doc/Vipr.html
118
+ - doc/ViprBase.html
119
+ - doc/ViprHost.html
120
+ - doc/ViprStorageSystem.html
121
+ - doc/ViprVcenter.html
122
+ - doc/Vipruby.html
123
+ - doc/Vipruby/Auth.html
124
+ - doc/_index.html
125
+ - doc/class_list.html
126
+ - doc/css/common.css
127
+ - doc/css/full_list.css
128
+ - doc/css/style.css
129
+ - doc/file.README.html
130
+ - doc/file_list.html
131
+ - doc/frames.html
132
+ - doc/index.html
133
+ - doc/js/app.js
134
+ - doc/js/full_list.js
135
+ - doc/js/jquery.js
136
+ - doc/method_list.html
137
+ - doc/top-level-namespace.html
138
+ - lib/.yardoc/checksums
139
+ - lib/.yardoc/object_types
140
+ - lib/.yardoc/objects/root.dat
141
+ - lib/.yardoc/proxy_types
63
142
  - lib/vipruby.rb
143
+ - lib/vipruby/.yardoc/checksums
144
+ - lib/vipruby/.yardoc/object_types
145
+ - lib/vipruby/.yardoc/objects/root.dat
146
+ - lib/vipruby/.yardoc/proxy_types
147
+ - lib/vipruby/objects/host.rb
148
+ - lib/vipruby/objects/storagesystem.rb
149
+ - lib/vipruby/objects/vcenter.rb
150
+ - lib/vipruby/version.rb
151
+ - lib/vipruby/vipr.rb
152
+ - lib/vipruby/viprbase.rb
153
+ - vipruby.gemspec
64
154
  homepage: https://github.com/nctiggy/Vipruby
65
155
  licenses:
66
156
  - MIT
@@ -81,8 +171,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
171
  version: '0'
82
172
  requirements: []
83
173
  rubyforge_project:
84
- rubygems_version: 2.4.1
174
+ rubygems_version: 2.2.2
85
175
  signing_key:
86
176
  specification_version: 4
87
177
  summary: A Ruby Library for EMC's ViPR
88
178
  test_files: []
179
+ has_rdoc: