stoarray 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -0
- data/README.md +2 -2
- data/lib/arraycalls.rb +67 -62
- data/lib/stoarray.rb +1 -3
- data/lib/stoarray/version.rb +1 -1
- data/stoarray.gemspec +2 -0
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54621ac991e320be941167c659727b3b74612451
|
4
|
+
data.tar.gz: 3fb264dd34728b63ab4bf0878cd49ac7c8df4686
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da928a8f35f7b7a0bb2b98429cf197ccc23f4f4fea05c7a3190b9feda5be45e3549551b12e0f2ea6de50db64a39872c92b32d20f2d7459ae14e6650d57edd04f
|
7
|
+
data.tar.gz: 74ad7745fb5cc5d4da4af6bec87a94f8e2227376fbbf689f25fe9f85e3ee03924da807d246c6dab026a59b3a0c29b33b17e7446537daea32384fe35eca7ab31d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# CHANGELOG for stoarray
|
2
|
+
|
3
|
+
This file is used to list changes made to the stoarray gem.
|
4
|
+
|
5
|
+
## 03172016
|
6
|
+
|
7
|
+
* All code should have test coverage now!
|
8
|
+
* Conversion to rest-client complete. Removed getty, del33t, verbal_gerbil.
|
9
|
+
* make_call - (previously cally) Added rescue so I can return error messages.
|
10
|
+
* cookie - Removed "testy" stuff & added break on failure (raise).
|
11
|
+
* Consistent success messages for both Pure and Xtremio clone refreshes.
|
12
|
+
|
13
|
+
## 03152016
|
14
|
+
|
15
|
+
* Add Mark Gibbon's line to generate an error if a valid cookie is not received.
|
16
|
+
* All code should be covered now except the cookie block!
|
17
|
+
|
18
|
+
## 03142016
|
19
|
+
|
20
|
+
* Additional tests using mockable.io: Refresh and flippy covered now.
|
21
|
+
* New delete method using rest-client. Needs work! (handling params).
|
22
|
+
|
23
|
+
## 03112016
|
24
|
+
|
25
|
+
* Using mockable.io for API call testing, updating rspec tests.
|
26
|
+
|
27
|
+
## 03102016
|
28
|
+
|
29
|
+
* Added new array method for gathering stats from the arrays.
|
30
|
+
|
31
|
+
## 03092016
|
32
|
+
|
33
|
+
* Break call setup out of initialize and into new methods.
|
34
|
+
* Update dependent methods to use new call methods.
|
35
|
+
* Add rest-client gem to resolve issue with GETs on Xtremio.
|
36
|
+
|
37
|
+
- - -
|
38
|
+
Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
|
39
|
+
|
40
|
+
The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.
|
data/README.md
CHANGED
@@ -35,8 +35,8 @@ It is very easy to then build from there.
|
|
35
35
|
###First the json configuration file:
|
36
36
|
|
37
37
|
{
|
38
|
-
"authorization":"123li123o90yourapitoken2h1hi3",
|
39
|
-
"base_url":"https
|
38
|
+
"authorization": "123li123o90yourapitoken2h1hi3",
|
39
|
+
"base_url": "https://purearray01.something.net/api/1.4/",
|
40
40
|
"headers": { "Content-Type": "application/json" },
|
41
41
|
"params_snap_u23": {
|
42
42
|
"snap_pairs": {
|
data/lib/arraycalls.rb
CHANGED
@@ -1,37 +1,48 @@
|
|
1
1
|
class Stoarray
|
2
2
|
|
3
3
|
VERBS = {
|
4
|
-
'
|
5
|
-
'
|
6
|
-
'
|
7
|
-
'
|
4
|
+
'delete' => :Delete,
|
5
|
+
'get' => :Get,
|
6
|
+
'post' => :Post,
|
7
|
+
'put' => :Put
|
8
8
|
}
|
9
9
|
|
10
10
|
def initialize(headers: {}, meth: 'Get', params: {}, url: 'https://array/')
|
11
|
-
@url = URI.parse(url) # URL of the call
|
12
11
|
@headers = headers
|
13
|
-
@
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@request.read_timeout = 30
|
17
|
-
@request.use_ssl = true if @url.to_s =~ /https/
|
18
|
-
@request.verify_mode = OpenSSL::SSL::VERIFY_NONE # parameterize?
|
12
|
+
@meth = meth
|
13
|
+
@params = params
|
14
|
+
@url = url
|
19
15
|
end
|
20
16
|
|
21
|
-
def
|
22
|
-
if @url.to_s =~ /
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
17
|
+
def array
|
18
|
+
if @url.to_s =~ /array/
|
19
|
+
responder(make_call)
|
20
|
+
else
|
21
|
+
error_text("array", @url.to_s, "array")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def make_call
|
26
|
+
@params = @params.to_json unless @meth.downcase == 'get' || @meth.downcase == 'delete'
|
27
|
+
begin
|
28
|
+
response = RestClient::Request.execute(headers: @headers,
|
29
|
+
method: VERBS[@meth.downcase],
|
30
|
+
payload: @params,
|
31
|
+
timeout: 30,
|
32
|
+
url: @url,
|
33
|
+
verify_ssl: false)
|
34
|
+
rescue => e
|
35
|
+
e.response
|
36
|
+
else
|
37
|
+
response
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def cookie
|
42
|
+
if @url =~ /auth\/session/
|
43
|
+
response = make_call
|
44
|
+
raise 'There was an issue getting a cookie!' unless response.code == 200
|
45
|
+
cookie = (response.cookies.map{|key,val| key + '=' + val})[0]
|
35
46
|
else
|
36
47
|
error_text("cookie", @url.to_s, 'auth/session')
|
37
48
|
end
|
@@ -47,19 +58,12 @@ class Stoarray
|
|
47
58
|
}
|
48
59
|
end
|
49
60
|
|
50
|
-
def flippy(temp_hash
|
61
|
+
def flippy(temp_hash)
|
62
|
+
# This method is to get around a "feature" of Xtremio where it renames the
|
63
|
+
# target snapshot set. We flip between name and name_347. Comprende?
|
51
64
|
flippy = temp_hash['to-snapshot-set-id'] + '_347'
|
52
|
-
url = 'https://' + @url.host + '/api/json/v2/types/snapshot-sets'
|
53
|
-
|
54
|
-
when false
|
55
|
-
x = Stoarray.new(headers: @headers, meth: 'Get', params: {}, url: url).snap
|
56
|
-
when true
|
57
|
-
x = {
|
58
|
-
"response" => {
|
59
|
-
"snapshot-sets" => [ { "name" => flippy } ]
|
60
|
-
}
|
61
|
-
}
|
62
|
-
end
|
65
|
+
url = 'https://' + URI.parse(@url).host + '/api/json/v2/types/snapshot-sets'
|
66
|
+
x = Stoarray.new(headers: @headers, meth: 'Get', params: {}, url: url).snap
|
63
67
|
if x['response']['snapshot-sets'].any? { |y| y['name'].include?(flippy) }
|
64
68
|
temp_hash['snapshot-set-name'] = temp_hash['to-snapshot-set-id']
|
65
69
|
temp_hash['to-snapshot-set-id'] = flippy
|
@@ -72,8 +76,7 @@ class Stoarray
|
|
72
76
|
|
73
77
|
def host
|
74
78
|
if @url.to_s =~ /host/
|
75
|
-
|
76
|
-
responder(response)
|
79
|
+
responder(make_call)
|
77
80
|
else
|
78
81
|
error_text("host", @url.to_s, "host")
|
79
82
|
end
|
@@ -81,8 +84,7 @@ class Stoarray
|
|
81
84
|
|
82
85
|
def pgroup
|
83
86
|
if @url.to_s =~ /pgroup/
|
84
|
-
|
85
|
-
responder(response)
|
87
|
+
responder(make_call)
|
86
88
|
else
|
87
89
|
error_text("pgroup", @url.to_s, "pgroup")
|
88
90
|
end
|
@@ -91,14 +93,22 @@ class Stoarray
|
|
91
93
|
def refresh
|
92
94
|
case @url.to_s
|
93
95
|
when /snapshot/ # Xtremio
|
94
|
-
|
95
|
-
|
96
|
-
|
96
|
+
tgt = @params['to-snapshot-set-id']
|
97
|
+
@params = flippy(@params)
|
98
|
+
src = @params['from-consistency-group-id']
|
99
|
+
cln = responder(make_call)
|
100
|
+
if cln['status'] == 201
|
101
|
+
cln['response'] = 'SUCCESS: Xtremio refresh completed from consistency group ' \
|
102
|
+
+ src + ' to snapshot set ' + tgt + '.'
|
103
|
+
cln
|
104
|
+
else
|
105
|
+
cln
|
106
|
+
end
|
97
107
|
when /1.4/ # Pure, handle the interim snap automagically
|
98
108
|
error_state = false
|
99
|
-
url = 'https://' + @url.host + '/api/1.4/pgroup'
|
100
|
-
source =
|
101
|
-
suffix =
|
109
|
+
url = 'https://' + URI.parse(@url).host + '/api/1.4/pgroup'
|
110
|
+
source = @params['source']
|
111
|
+
suffix = 'interim'
|
102
112
|
pam = { :snap => true, :source => source, :suffix => suffix }
|
103
113
|
snap = Stoarray.new(headers: @headers, meth: 'Post', params: pam, url: url).pgroup
|
104
114
|
respond = {
|
@@ -114,12 +124,11 @@ class Stoarray
|
|
114
124
|
}
|
115
125
|
}
|
116
126
|
if snap['status'] >= 200 && snap['status'] <= 299
|
117
|
-
|
118
|
-
|
119
|
-
tgt = 'clone_' + val
|
127
|
+
@params['snap_pairs'].each do |key, val|
|
128
|
+
tgt = 'clone_' + val # used only for logging!
|
120
129
|
src = source[0] + '.' + suffix + '.' + key
|
121
130
|
pam = { :overwrite => true, :source => src }
|
122
|
-
url = 'https://' + @url.host + '/api/1.4/volume/' + val
|
131
|
+
url = 'https://' + URI.parse(@url).host + '/api/1.4/volume/' + val
|
123
132
|
clone = Stoarray.new(headers: @headers, meth: 'Post', params: pam, url: url).volume
|
124
133
|
respond['response'][tgt] = {
|
125
134
|
"response" => clone['response']
|
@@ -128,7 +137,7 @@ class Stoarray
|
|
128
137
|
"status" => clone['status']
|
129
138
|
}
|
130
139
|
end
|
131
|
-
url = 'https://' + @url.host + '/api/1.4/pgroup/' + source[0] + '.' + suffix
|
140
|
+
url = 'https://' + URI.parse(@url).host + '/api/1.4/pgroup/' + source[0] + '.' + suffix
|
132
141
|
zappy = Stoarray.new(headers: @headers, meth: 'Delete', params: {}, url: url).pgroup
|
133
142
|
respond['response']['destroy'] = {
|
134
143
|
"response" => zappy['response']
|
@@ -136,16 +145,14 @@ class Stoarray
|
|
136
145
|
respond['status']['destroy'] = {
|
137
146
|
"status" => zappy['status']
|
138
147
|
}
|
139
|
-
|
140
|
-
disintegrate = Stoarray.new(headers: @headers, meth: 'Delete', params:
|
148
|
+
url = url + '?eradicate=true'
|
149
|
+
disintegrate = Stoarray.new(headers: @headers, meth: 'Delete', params: {}, url: url).pgroup
|
141
150
|
respond['response']['eradicate'] = {
|
142
151
|
"response" => disintegrate['response']
|
143
152
|
}
|
144
153
|
respond['status']['eradicate'] = {
|
145
154
|
"status" => disintegrate['status']
|
146
155
|
}
|
147
|
-
else
|
148
|
-
respond
|
149
156
|
end
|
150
157
|
respond['status'].each do |key, val|
|
151
158
|
error_state = true if val.any? { |status, code| code.to_i < 200 || code.to_i > 299 }
|
@@ -155,7 +162,7 @@ class Stoarray
|
|
155
162
|
else
|
156
163
|
response = {
|
157
164
|
"response" =>
|
158
|
-
"SUCCESS:
|
165
|
+
"SUCCESS: Pure refresh completed from #{source[0]} protection group.\n",
|
159
166
|
"status" => 201
|
160
167
|
}
|
161
168
|
end
|
@@ -164,7 +171,7 @@ class Stoarray
|
|
164
171
|
end
|
165
172
|
end
|
166
173
|
|
167
|
-
def responder(response)
|
174
|
+
def responder(response)
|
168
175
|
response = {
|
169
176
|
"response" => JSON.parse(response.body),
|
170
177
|
"status" => response.code.to_i
|
@@ -173,8 +180,7 @@ class Stoarray
|
|
173
180
|
|
174
181
|
def snap
|
175
182
|
if @url.to_s =~ /snapshot/
|
176
|
-
|
177
|
-
responder(response)
|
183
|
+
responder(make_call)
|
178
184
|
else
|
179
185
|
error_text("snap", @url.to_s, "snapshot")
|
180
186
|
end
|
@@ -182,8 +188,7 @@ class Stoarray
|
|
182
188
|
|
183
189
|
def volume
|
184
190
|
if @url.to_s =~ /volume/
|
185
|
-
|
186
|
-
responder(response)
|
191
|
+
responder(make_call)
|
187
192
|
else
|
188
193
|
error_text("volume", @url.to_s, "volume")
|
189
194
|
end
|
data/lib/stoarray.rb
CHANGED
data/lib/stoarray/version.rb
CHANGED
data/stoarray.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stoarray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kody Wilson
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rest-client
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
description: Interact with storage array api using Ruby
|
140
154
|
email:
|
141
155
|
- kodywilson@gmail.com
|
@@ -147,6 +161,7 @@ files:
|
|
147
161
|
- ".gitignore"
|
148
162
|
- ".rspec"
|
149
163
|
- ".travis.yml"
|
164
|
+
- CHANGELOG.md
|
150
165
|
- CODE_OF_CONDUCT.md
|
151
166
|
- Gemfile
|
152
167
|
- Guardfile
|