orchestrator_client 0.3.1 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/orchestrator_client.rb +19 -29
- data/lib/orchestrator_client/config.rb +13 -2
- data/lib/orchestrator_client/error.rb +1 -1
- data/lib/orchestrator_client/job.rb +6 -4
- data/lib/orchestrator_client/version.rb +1 -1
- data/orchestrator_client.gemspec +3 -0
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edb40acfb0113456ba1b3999c6f9e093d0999501
|
4
|
+
data.tar.gz: 39980ed67308f0dd7c3ae9daf7f9636e78c4d22b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63087f62bdcfedbb2e49d3e6579d5f047fff242fbd1d8291b84e6efcfe398b3f7e82b72ccd05bac3f423c832dce0b99cbf040954b82b9f97d2d6d65665c1d95c
|
7
|
+
data.tar.gz: 784cf2dd3a28b00cd09b790e0b7a0ee9c70a433c98fc213c4647a706ccba09295b83ba767b4f74dac676cabefb2b6cb51081377987acfe0572547ea726722e87
|
data/README.md
CHANGED
@@ -26,6 +26,8 @@ expected to be at `~/.puppetlabs/token` which is the default location used by
|
|
26
26
|
* `token-file`- Path to a file with the RBAC token in it (defaults to `~/.puppetlabs/token`)
|
27
27
|
* `token` - Pass directly the RBAC token, if specified the token will be used instead of a token from file.
|
28
28
|
* `User-Agent`- Set `User-Agent` header for HTTP requests. Defaults to `OrchestratorRubyClient/[VERSION]`
|
29
|
+
* `job-poll-interval`- Set the default amount of time to sleep when polling in Orchestrator::Job#wait and #each\_event
|
30
|
+
* `job-poll-timeout`- Set the default maximum amount of time to wait in Orchestrator::Job#wait
|
29
31
|
|
30
32
|
### Example
|
31
33
|
|
data/lib/orchestrator_client.rb
CHANGED
@@ -2,6 +2,8 @@ require 'net/https'
|
|
2
2
|
require 'uri'
|
3
3
|
require 'json'
|
4
4
|
require 'openssl'
|
5
|
+
require 'faraday'
|
6
|
+
require 'net/http/persistent'
|
5
7
|
|
6
8
|
class OrchestratorClient
|
7
9
|
require 'orchestrator_client/error'
|
@@ -11,35 +13,31 @@ class OrchestratorClient
|
|
11
13
|
require 'orchestrator_client/config'
|
12
14
|
|
13
15
|
attr_accessor :config
|
16
|
+
attr_reader :http
|
14
17
|
|
15
18
|
def initialize(overrides, load_files=false)
|
16
19
|
@config = Config.new(overrides, load_files)
|
17
20
|
@config.validate
|
21
|
+
@http = create_http(config.root_url)
|
18
22
|
end
|
19
23
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
def create_http(root_url)
|
25
|
+
Faraday.new(url: root_url) do |f|
|
26
|
+
f.headers['Content-Type'] = 'application/json'
|
27
|
+
f.headers['X-Authentication'] = config.token
|
28
|
+
f.headers['User-Agent'] = config['User-Agent']
|
29
|
+
f.ssl['ca_file'] = config['cacert']
|
30
|
+
f.ssl['version'] = :TLSv1_2
|
31
|
+
f.adapter :net_http_persistent, pool_size: 5 do |http|
|
32
|
+
http.idle_timeout = 30
|
33
|
+
end
|
34
|
+
end
|
31
35
|
end
|
32
36
|
|
33
37
|
def get(location)
|
34
|
-
|
35
|
-
https = create_http(uri)
|
36
|
-
req = Net::HTTP::Get.new(uri)
|
37
|
-
req['Content-Type'] = "application/json"
|
38
|
-
req['User-Agent'] = @config['User-Agent']
|
39
|
-
req.add_field('X-Authentication', @config.token)
|
40
|
-
res = https.request(req)
|
38
|
+
res = http.get(location)
|
41
39
|
|
42
|
-
if res.
|
40
|
+
if res.status != 200
|
43
41
|
raise OrchestratorClient::ApiError.make_error_from_response(res)
|
44
42
|
end
|
45
43
|
|
@@ -47,17 +45,9 @@ class OrchestratorClient
|
|
47
45
|
end
|
48
46
|
|
49
47
|
def post(location, body)
|
50
|
-
|
51
|
-
https = create_http(uri)
|
52
|
-
|
53
|
-
req = Net::HTTP::Post.new(uri)
|
54
|
-
req['Content-Type'] = "application/json"
|
55
|
-
req['User-Agent'] = @config['User-Agent']
|
56
|
-
req.add_field('X-Authentication', @config.token)
|
57
|
-
req.body = body.to_json
|
58
|
-
res = https.request(req)
|
48
|
+
res = http.post(location, body.to_json)
|
59
49
|
|
60
|
-
unless Set.new([
|
50
|
+
unless Set.new([202, 200]).include? res.status
|
61
51
|
raise OrchestratorClient::ApiError.make_error_from_response(res)
|
62
52
|
end
|
63
53
|
|
@@ -35,7 +35,9 @@ class OrchestratorClient::Config
|
|
35
35
|
def defaults
|
36
36
|
{ 'cacert' => cacert,
|
37
37
|
'token-file' => File.join(user_root, 'token'),
|
38
|
-
'User-Agent' => "OrchestratorRubyClient/#{OrchestratorClient::VERSION}"
|
38
|
+
'User-Agent' => "OrchestratorRubyClient/#{OrchestratorClient::VERSION}",
|
39
|
+
'job-poll-interval' => 1,
|
40
|
+
'job-poll-timeout' => 1000,
|
39
41
|
}
|
40
42
|
end
|
41
43
|
|
@@ -75,7 +77,16 @@ class OrchestratorClient::Config
|
|
75
77
|
end
|
76
78
|
|
77
79
|
def load_token
|
78
|
-
@config['token']
|
80
|
+
if @config['token']
|
81
|
+
@config['token']
|
82
|
+
else
|
83
|
+
token = File.open(config['token-file']) { |f| f.read.strip }
|
84
|
+
if token != URI.escape(token)
|
85
|
+
raise OrchestratorClient::ConfigError.new("'#{config['token-file']}' contains illegal characters")
|
86
|
+
end
|
87
|
+
@config['token'] = token
|
88
|
+
@config['token']
|
89
|
+
end
|
79
90
|
end
|
80
91
|
|
81
92
|
def token
|
@@ -17,7 +17,7 @@ class OrchestratorClient::ApiError < RuntimeError
|
|
17
17
|
rescue
|
18
18
|
return OrchestratorClient::BadResponse.new("Response body was not valid JSON: #{res.body}")
|
19
19
|
end
|
20
|
-
code = res.
|
20
|
+
code = res.status
|
21
21
|
|
22
22
|
case data['kind']
|
23
23
|
when 'puppetlabs.validators/validation-error'
|
@@ -16,6 +16,8 @@ class OrchestratorClient::Job
|
|
16
16
|
|
17
17
|
def initialize(client, options = {}, type=:deploy)
|
18
18
|
@client = client
|
19
|
+
@poll_interval = options.delete(:_poll_interval) || client.config['job-poll-interval']
|
20
|
+
@poll_timeout = options.delete(:_poll_timeout) || client.config['job-poll-timeout']
|
19
21
|
@options = options
|
20
22
|
@type = type
|
21
23
|
end
|
@@ -71,7 +73,7 @@ class OrchestratorClient::Job
|
|
71
73
|
events = @client.jobs.events(@job_name)
|
72
74
|
start = events['next-events']['event']
|
73
75
|
if events['items'].empty?
|
74
|
-
sleep
|
76
|
+
sleep @poll_interval
|
75
77
|
else
|
76
78
|
events['items'].each do |event|
|
77
79
|
finished = true if DONE_EVENTS.include?(event['type'])
|
@@ -81,15 +83,15 @@ class OrchestratorClient::Job
|
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
84
|
-
def wait(timeout
|
86
|
+
def wait(timeout=@poll_timeout)
|
85
87
|
counter = 0
|
86
88
|
while counter < timeout
|
87
89
|
get_details
|
88
90
|
if DONE_STATES.include?(details['state'])
|
89
91
|
return report
|
90
92
|
end
|
91
|
-
sleep
|
92
|
-
counter +=
|
93
|
+
sleep @poll_interval
|
94
|
+
counter += @poll_interval
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
data/orchestrator_client.gemspec
CHANGED
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orchestrator_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2019-03-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: net-http-persistent
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
description:
|
14
42
|
email: info@puppetlabs.com
|
15
43
|
executables: []
|