delphix_rb 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/delphix_rb.gemspec +7 -3
- data/lib/delphix.rb +6 -1
- data/lib/delphix/base.rb +5 -3
- data/lib/delphix/database.rb +18 -6
- data/lib/delphix/environment.rb +82 -15
- data/lib/delphix/group.rb +1 -5
- data/lib/delphix/job.rb +61 -0
- data/lib/delphix/repository.rb +0 -4
- data/lib/delphix/response.rb +42 -0
- data/lib/delphix/source.rb +49 -0
- data/lib/delphix/sourceconfig.rb +30 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b610f70f46c2543a921ad3cdfbf9b0ca02ec27ff
|
4
|
+
data.tar.gz: 3bd756ab20fdcb7a4bd9ec15801e9815972e2901
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c16f33eb586f3be717ecebd85ad1c4bf3202976d75ac33c6e25dfcac162b542926aea08a43e613b375f60a4f6f4d66b7414970f8120f3574f6f9f17f00bed8d
|
7
|
+
data.tar.gz: 897fceae8b65006b2db1463ab4b567c410b7cd205a15f721aaf8adb424459f51c103ff83517258b897e967e67796e9274043030b9f17a77ebed30e2e1e0595ba
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
data/delphix_rb.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: delphix_rb 1.
|
5
|
+
# stub: delphix_rb 1.1.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "delphix_rb"
|
9
|
-
s.version = "1.
|
9
|
+
s.version = "1.1.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Michael Kuehl"]
|
14
|
-
s.date = "2016-02-
|
14
|
+
s.date = "2016-02-16"
|
15
15
|
s.description = "Delphix Engine REST API"
|
16
16
|
s.email = "michael.kuehl@delphix.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -36,7 +36,11 @@ Gem::Specification.new do |s|
|
|
36
36
|
"lib/delphix/environment.rb",
|
37
37
|
"lib/delphix/error.rb",
|
38
38
|
"lib/delphix/group.rb",
|
39
|
+
"lib/delphix/job.rb",
|
39
40
|
"lib/delphix/repository.rb",
|
41
|
+
"lib/delphix/response.rb",
|
42
|
+
"lib/delphix/source.rb",
|
43
|
+
"lib/delphix/sourceconfig.rb",
|
40
44
|
"lib/delphix/util.rb"
|
41
45
|
]
|
42
46
|
s.homepage = "http://github.com/mickuehl/delphix_rb"
|
data/lib/delphix.rb
CHANGED
@@ -9,11 +9,16 @@ module Delphix
|
|
9
9
|
require 'delphix/connection'
|
10
10
|
require 'delphix/base'
|
11
11
|
require 'delphix/base_array'
|
12
|
+
require 'delphix/response'
|
13
|
+
|
12
14
|
require 'delphix/environment'
|
13
15
|
require 'delphix/group'
|
14
16
|
require 'delphix/repository'
|
15
17
|
require 'delphix/database'
|
16
|
-
|
18
|
+
require 'delphix/source'
|
19
|
+
require 'delphix/sourceconfig'
|
20
|
+
require 'delphix/job'
|
21
|
+
|
17
22
|
def authenticate!(username,password)
|
18
23
|
|
19
24
|
case
|
data/lib/delphix/base.rb
CHANGED
@@ -4,8 +4,9 @@ module Delphix::Base
|
|
4
4
|
|
5
5
|
attr_accessor :details
|
6
6
|
|
7
|
-
# The private new method accepts a
|
7
|
+
# The private new method accepts a reference string and a hash
|
8
8
|
def initialize(reference=nil, details=nil)
|
9
|
+
# FIXME change this, passing the reference does not make sense !!!
|
9
10
|
if details == nil
|
10
11
|
@details = { 'reference' => reference }
|
11
12
|
else
|
@@ -31,7 +32,8 @@ module Delphix::Base
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def refresh_details
|
34
|
-
#
|
35
|
+
# TODO Subclasses should override this if needed
|
36
|
+
@details = Delphix.get("#{base_endpoint}/#{reference}")['result']
|
35
37
|
end
|
36
38
|
|
37
39
|
def base_endpoint
|
@@ -41,5 +43,5 @@ module Delphix::Base
|
|
41
43
|
def to_s
|
42
44
|
"#{self.class.name}[#{type}, #{name}, #{reference}]"
|
43
45
|
end
|
44
|
-
|
46
|
+
|
45
47
|
end
|
data/lib/delphix/database.rb
CHANGED
@@ -9,17 +9,21 @@ class Delphix::Database
|
|
9
9
|
# basic operations
|
10
10
|
|
11
11
|
def delete
|
12
|
-
Delphix.delete("#{base_endpoint}/#{reference}")
|
12
|
+
Delphix::Response.new( Delphix.delete("#{base_endpoint}/#{reference}"))
|
13
13
|
end
|
14
14
|
|
15
15
|
# specific operations
|
16
16
|
|
17
|
-
|
17
|
+
def start
|
18
|
+
Delphix::Response.new( Delphix.post("/resources/json/delphix/source/#{lookup_source_ref}/start"))
|
19
|
+
end
|
18
20
|
|
19
|
-
def
|
20
|
-
|
21
|
+
def stop
|
22
|
+
Delphix::Response.new( Delphix.post("/resources/json/delphix/source/#{lookup_source_ref}/stop"))
|
21
23
|
end
|
22
24
|
|
25
|
+
# inherited operations
|
26
|
+
|
23
27
|
def base_endpoint
|
24
28
|
'/resources/json/delphix/database'
|
25
29
|
end
|
@@ -63,8 +67,16 @@ class Delphix::Database
|
|
63
67
|
}
|
64
68
|
}
|
65
69
|
|
66
|
-
|
67
|
-
|
70
|
+
Delphix::Response.new( Delphix.post('/resources/json/delphix/database/provision', body.to_json))
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def lookup_source_ref
|
77
|
+
sources = Delphix::Source.list
|
78
|
+
source = sources.filter_by 'container', reference
|
79
|
+
source[0].reference # FIXME assumes there is only one ...
|
68
80
|
end
|
69
81
|
|
70
82
|
end
|
data/lib/delphix/environment.rb
CHANGED
@@ -12,25 +12,53 @@ class Delphix::Environment
|
|
12
12
|
# basic operations
|
13
13
|
|
14
14
|
def delete
|
15
|
-
Delphix.delete("#{base_endpoint}/#{reference}")
|
15
|
+
Delphix::Response.new( Delphix.delete("#{base_endpoint}/#{reference}"))
|
16
16
|
end
|
17
17
|
|
18
18
|
# specific operations
|
19
19
|
|
20
|
-
def enable
|
21
|
-
Delphix.post("#{base_endpoint}/#{reference}/enable")
|
22
|
-
|
20
|
+
def enable(enable_all_sources=false)
|
21
|
+
resp = Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/enable"))
|
22
|
+
return resp if !enable_all_sources
|
23
|
+
|
24
|
+
resp.wait_for_completion
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
+
# enable all sources on this environment
|
27
|
+
sources = lookup_sources
|
28
|
+
if sources != nil
|
29
|
+
sources.each do |src|
|
30
|
+
src.enable.wait_for_completion
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
resp
|
26
35
|
end
|
27
36
|
|
28
|
-
|
37
|
+
def disable(disable_all_sources=true)
|
38
|
+
|
39
|
+
if disable_all_sources
|
40
|
+
# stop and disable all sources on this environment
|
41
|
+
sources = lookup_sources
|
42
|
+
if sources != nil
|
43
|
+
sources.each do |src|
|
44
|
+
if src.virtual?
|
45
|
+
src.stop.wait_for_completion
|
46
|
+
end
|
47
|
+
src.disable.wait_for_completion
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# now disable the environment itself
|
53
|
+
Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/disable"))
|
54
|
+
end
|
29
55
|
|
30
|
-
def
|
31
|
-
|
56
|
+
def refresh
|
57
|
+
Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/refresh"))
|
32
58
|
end
|
33
59
|
|
60
|
+
# inherited operations
|
61
|
+
|
34
62
|
def base_endpoint
|
35
63
|
'/resources/json/delphix/environment'
|
36
64
|
end
|
@@ -62,15 +90,17 @@ class Delphix::Environment
|
|
62
90
|
}
|
63
91
|
}
|
64
92
|
}
|
65
|
-
response = Delphix.post('/resources/json/delphix/environment', body.to_json)
|
66
93
|
|
67
|
-
|
68
|
-
|
94
|
+
# create the environment
|
95
|
+
resp = Delphix::Response.new( Delphix.post('/resources/json/delphix/environment', body.to_json))
|
96
|
+
return nil if resp.is_error?
|
69
97
|
|
70
|
-
#
|
71
|
-
|
98
|
+
# wait until the environment has been created
|
99
|
+
resp.job.wait_for_completion
|
72
100
|
|
73
|
-
#
|
101
|
+
# create a new skeleton environment object
|
102
|
+
env = Delphix::Environment.new resp.details
|
103
|
+
# and refresh the object from the engine
|
74
104
|
env.refresh_details
|
75
105
|
|
76
106
|
env
|
@@ -85,4 +115,41 @@ class Delphix::Environment
|
|
85
115
|
envs
|
86
116
|
end
|
87
117
|
|
118
|
+
private
|
119
|
+
|
120
|
+
def lookup_sources
|
121
|
+
repos = Delphix::Repository.list
|
122
|
+
repos = repos.filter_by 'environment', reference
|
123
|
+
|
124
|
+
# lookup sourceconfigs that are related to this environment
|
125
|
+
configs = Delphix::SourceConfig.list
|
126
|
+
sourceconfigs = Delphix::BaseArray.new
|
127
|
+
repos.each do |repo|
|
128
|
+
result = configs.filter_by 'repository', repo.reference
|
129
|
+
if result != nil
|
130
|
+
result.each do |i|
|
131
|
+
sourceconfigs << i
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# find the matching sources
|
137
|
+
sources = Delphix::Source.list
|
138
|
+
|
139
|
+
# filter to match sourceconfigs
|
140
|
+
vdb_sources = Delphix::BaseArray.new
|
141
|
+
sourceconfigs.each do |conf|
|
142
|
+
result = sources.filter_by 'config', conf.reference
|
143
|
+
if result != nil
|
144
|
+
result.each do |i|
|
145
|
+
vdb_sources << i
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
return nil if vdb_sources.size == 0
|
151
|
+
vdb_sources
|
152
|
+
|
153
|
+
end
|
154
|
+
|
88
155
|
end
|
data/lib/delphix/group.rb
CHANGED
@@ -9,17 +9,13 @@ class Delphix::Group
|
|
9
9
|
# basic operations
|
10
10
|
|
11
11
|
def delete
|
12
|
-
Delphix.delete("#{base_endpoint}/#{reference}")
|
12
|
+
Delphix::Response.new( Delphix.delete("#{base_endpoint}/#{reference}"))
|
13
13
|
end
|
14
14
|
|
15
15
|
# specific operations
|
16
16
|
|
17
17
|
# inherited operations
|
18
18
|
|
19
|
-
def refresh_details
|
20
|
-
@details = Delphix.get("#{base_endpoint}/#{reference}")['result']
|
21
|
-
end
|
22
|
-
|
23
19
|
def base_endpoint
|
24
20
|
'/resources/json/delphix/group'
|
25
21
|
end
|
data/lib/delphix/job.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
class Delphix::Job
|
3
|
+
include Delphix::Base
|
4
|
+
|
5
|
+
def initialize(reference, details=nil)
|
6
|
+
super(reference, details)
|
7
|
+
end
|
8
|
+
|
9
|
+
# basic operations
|
10
|
+
|
11
|
+
# specific operations
|
12
|
+
|
13
|
+
def state
|
14
|
+
@details['jobState'] # RUNNING, SUSPENDED, CANCELED, COMPLETED, FAILED
|
15
|
+
end
|
16
|
+
|
17
|
+
def state?
|
18
|
+
refresh_details
|
19
|
+
state
|
20
|
+
end
|
21
|
+
|
22
|
+
def cancel!
|
23
|
+
Delphix.post("#{base_endpoint}/#{reference}/cancel")['result']
|
24
|
+
end
|
25
|
+
|
26
|
+
def suspend!
|
27
|
+
Delphix.post("#{base_endpoint}/#{reference}/suspend")['result']
|
28
|
+
end
|
29
|
+
|
30
|
+
def resume!
|
31
|
+
Delphix.post("#{base_endpoint}/#{reference}/resume")['result']
|
32
|
+
end
|
33
|
+
|
34
|
+
def wait_for_completion
|
35
|
+
begin
|
36
|
+
sleep 1
|
37
|
+
end while state? == 'RUNNING'
|
38
|
+
end
|
39
|
+
|
40
|
+
# inherited operations
|
41
|
+
|
42
|
+
def to_s
|
43
|
+
"#{self.class.name}[#{@details['actionType']}, #{reference}, #{@details['jobState']}]"
|
44
|
+
end
|
45
|
+
|
46
|
+
def base_endpoint
|
47
|
+
'/resources/json/delphix/job'
|
48
|
+
end
|
49
|
+
|
50
|
+
# class methods
|
51
|
+
|
52
|
+
def self.list
|
53
|
+
jobs = Delphix::BaseArray.new
|
54
|
+
result = Delphix.get('/resources/json/delphix/job')['result']
|
55
|
+
result.each do |job|
|
56
|
+
jobs << Delphix::Job.new(job['reference'],job)
|
57
|
+
end
|
58
|
+
jobs
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
data/lib/delphix/repository.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
class Delphix::Response
|
3
|
+
include Delphix::Error
|
4
|
+
|
5
|
+
attr_accessor :details
|
6
|
+
|
7
|
+
# The private new method accepts a reference string and a hash
|
8
|
+
def initialize(details={})
|
9
|
+
@details = details
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
@details['type'] || 'unknown'
|
14
|
+
end
|
15
|
+
|
16
|
+
def status
|
17
|
+
@details['status'] || 'unknown'
|
18
|
+
end
|
19
|
+
|
20
|
+
def details
|
21
|
+
@details['result'] || nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def is_error?
|
25
|
+
@details['type'] == 'ErrorResult'
|
26
|
+
end
|
27
|
+
|
28
|
+
def job
|
29
|
+
return nil if @details['job'] == nil
|
30
|
+
Delphix::Job.new( @details['job'])
|
31
|
+
end
|
32
|
+
|
33
|
+
def wait_for_completion
|
34
|
+
return if is_error?
|
35
|
+
job.wait_for_completion if job
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
"#{self.class.name}[#{type}, #{status}]"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
class Delphix::Source
|
3
|
+
include Delphix::Base
|
4
|
+
|
5
|
+
def initialize(reference, details=nil)
|
6
|
+
super(reference, details)
|
7
|
+
end
|
8
|
+
|
9
|
+
# basic operations
|
10
|
+
|
11
|
+
# specific operations
|
12
|
+
def start
|
13
|
+
Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/start"))
|
14
|
+
end
|
15
|
+
|
16
|
+
def stop
|
17
|
+
Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/stop"))
|
18
|
+
end
|
19
|
+
|
20
|
+
def enable
|
21
|
+
Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/enable"))
|
22
|
+
end
|
23
|
+
|
24
|
+
def disable
|
25
|
+
Delphix::Response.new( Delphix.post("#{base_endpoint}/#{reference}/disable"))
|
26
|
+
end
|
27
|
+
|
28
|
+
def virtual?
|
29
|
+
@details['virtual'] == true
|
30
|
+
end
|
31
|
+
|
32
|
+
# inherited operations
|
33
|
+
|
34
|
+
def base_endpoint
|
35
|
+
'/resources/json/delphix/source'
|
36
|
+
end
|
37
|
+
|
38
|
+
# class methods
|
39
|
+
|
40
|
+
def self.list
|
41
|
+
sources = Delphix::BaseArray.new
|
42
|
+
result = Delphix.get('/resources/json/delphix/source')['result']
|
43
|
+
result.each do |src|
|
44
|
+
sources << Delphix::Source.new(src['reference'],src)
|
45
|
+
end
|
46
|
+
sources
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
class Delphix::SourceConfig
|
3
|
+
include Delphix::Base
|
4
|
+
|
5
|
+
def initialize(reference, details=nil)
|
6
|
+
super(reference, details)
|
7
|
+
end
|
8
|
+
|
9
|
+
# basic operations
|
10
|
+
|
11
|
+
# specific operations
|
12
|
+
|
13
|
+
# inherited operations
|
14
|
+
|
15
|
+
def base_endpoint
|
16
|
+
'/resources/json/delphix/sourceconfig'
|
17
|
+
end
|
18
|
+
|
19
|
+
# class methods
|
20
|
+
|
21
|
+
def self.list
|
22
|
+
sources = Delphix::BaseArray.new
|
23
|
+
result = Delphix.get('/resources/json/delphix/sourceconfig')['result']
|
24
|
+
result.each do |src|
|
25
|
+
sources << Delphix::SourceConfig.new(src['reference'],src)
|
26
|
+
end
|
27
|
+
sources
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delphix_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Kuehl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shoulda
|
@@ -119,7 +119,11 @@ files:
|
|
119
119
|
- lib/delphix/environment.rb
|
120
120
|
- lib/delphix/error.rb
|
121
121
|
- lib/delphix/group.rb
|
122
|
+
- lib/delphix/job.rb
|
122
123
|
- lib/delphix/repository.rb
|
124
|
+
- lib/delphix/response.rb
|
125
|
+
- lib/delphix/source.rb
|
126
|
+
- lib/delphix/sourceconfig.rb
|
123
127
|
- lib/delphix/util.rb
|
124
128
|
homepage: http://github.com/mickuehl/delphix_rb
|
125
129
|
licenses:
|