dapi-client 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/lib/dapi/client.rb +54 -18
- data/lib/dapi/client/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9475f64c82e86742b38333c59b329a2a2f0873920cfa99a46f2ef0b099ea176
|
4
|
+
data.tar.gz: 7fcd29bf890170ba4f7f42b17849cb36538b1e43d81dfd8122978dcdb0dd79aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0253ccf3080e0b77b994b9d5035193ac7f04e2df77be52c6679a47e9f9e8b6d4a8716f50bc0c03ea52f8ac552c04822ebd7759ac14ccfe1cd9fc58185b4f004a
|
7
|
+
data.tar.gz: 51ef22b2d7a6619130382a25c176499d5ead0768541d75516d999de9c6a854f00017cbc2d455457f35ac6c74fd7c394bf821d2ff961ecad24a3177a63782779c
|
data/lib/dapi/client.rb
CHANGED
@@ -5,8 +5,8 @@ module Dapi
|
|
5
5
|
|
6
6
|
class Client
|
7
7
|
|
8
|
-
OPTIMISTIC_LOCKING_CHECK_WAIT =
|
9
|
-
OPTIMISTIC_LOCKING_RETRIES =
|
8
|
+
OPTIMISTIC_LOCKING_CHECK_WAIT = 3.0 unless defined?(OPTIMISTIC_LOCKING_CHECK_WAIT)
|
9
|
+
OPTIMISTIC_LOCKING_RETRIES = 5 unless defined?(OPTIMISTIC_LOCKING_RETRIES)
|
10
10
|
|
11
11
|
def initialize(url:, token:, http: HTTP)
|
12
12
|
@url = url
|
@@ -14,23 +14,21 @@ module Dapi
|
|
14
14
|
@token = token
|
15
15
|
end
|
16
16
|
|
17
|
+
def delete_record(zone_name, lvalue, type)
|
18
|
+
with_optimistic_locking { delete_record!(zone_name, lvalue, type) }
|
19
|
+
end
|
20
|
+
|
17
21
|
def get_zone(zone_name)
|
18
22
|
unwrap { http.get(@url + "zone/" + zone_name) }
|
19
23
|
end
|
20
24
|
|
25
|
+
# Useful for test suites, and staging domains
|
26
|
+
def truncate_zone(zone_name)
|
27
|
+
with_optimistic_locking { truncate_zone!(zone_name) }
|
28
|
+
end
|
29
|
+
|
21
30
|
def upsert_record(zone_name, lvalue, type, rvalue, ttl)
|
22
|
-
|
23
|
-
begin
|
24
|
-
upsert_record!(zone_name, lvalue, type, rvalue, ttl)
|
25
|
-
rescue Dapi::Client::OptimisticLockFailure
|
26
|
-
if retries > 0
|
27
|
-
retries -= 1
|
28
|
-
sleep(0.1)
|
29
|
-
retry
|
30
|
-
else
|
31
|
-
raise
|
32
|
-
end
|
33
|
-
end
|
31
|
+
with_optimistic_locking { upsert_record!(zone_name, lvalue, type, rvalue, ttl) }
|
34
32
|
end
|
35
33
|
|
36
34
|
private
|
@@ -57,19 +55,57 @@ module Dapi
|
|
57
55
|
raise Dapi::Client::Error, "error parsing server response (JSON)"
|
58
56
|
end
|
59
57
|
|
58
|
+
def delete_record!(zone_name, lvalue, type)
|
59
|
+
zone = get_zone(zone_name)
|
60
|
+
zone["records"].reject! { |r| r["name"] == lvalue && r["type"] == type }
|
61
|
+
unwrap { http.post(@url + "zone/" + zone_name, json: {data: zone}) }
|
62
|
+
optimistic_lock_check(zone_name) do |check|
|
63
|
+
not check["records"].detect { |r| r["name"] == lvalue && r["type"] == type }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def truncate_zone!(zone_name)
|
68
|
+
zone = get_zone(zone_name)
|
69
|
+
zone["records"].reject! { |r| r["type"] == "A" && r["name"] != "@" }
|
70
|
+
unwrap { http.post(@url + "zone/" + zone_name, json: {data: zone}) }
|
71
|
+
optimistic_lock_check(zone_name) do |check|
|
72
|
+
not check["records"].detect { |r| r["type"] == "A" && r["name"] != "@" }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
60
76
|
def upsert_record!(zone_name, lvalue, type, rvalue, ttl)
|
61
77
|
zone = get_zone(zone_name)
|
62
78
|
zone["records"].reject! { |r| r["name"] == lvalue && r["type"] == type }
|
63
79
|
zone["records"] << {"name" => lvalue, "type" => type, "value" => rvalue, "ttl" => ttl}
|
64
80
|
unwrap { http.post(@url + "zone/" + zone_name, json: {data: zone}) }
|
81
|
+
optimistic_lock_check(zone_name) do |check|
|
82
|
+
check["records"].detect { |r| r["name"] == lvalue && r["type"] == type && r["value"] == rvalue && r["ttl"] == ttl }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def optimistic_lock_check(zone_name, &block)
|
65
87
|
sleep(OPTIMISTIC_LOCKING_CHECK_WAIT)
|
66
|
-
|
67
|
-
|
68
|
-
|
88
|
+
get_zone(zone_name).tap do |zone|
|
89
|
+
raise Dapi::Client::OptimisticLockFailure, "upsert_record: optimistic locking failed" unless block.call(zone)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def with_optimistic_locking(&block)
|
94
|
+
retries = OPTIMISTIC_LOCKING_RETRIES
|
95
|
+
begin
|
96
|
+
block.call
|
97
|
+
rescue Dapi::Client::OptimisticLockFailure
|
98
|
+
if retries > 0
|
99
|
+
retries -= 1
|
100
|
+
sleep(0.1)
|
101
|
+
retry
|
102
|
+
else
|
103
|
+
raise
|
104
|
+
end
|
69
105
|
end
|
70
|
-
zone
|
71
106
|
end
|
72
107
|
|
108
|
+
|
73
109
|
end
|
74
110
|
|
75
111
|
end
|
data/lib/dapi/client/version.rb
CHANGED