icontrol_rest 2.3.0 → 3.0.0
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 +24 -0
- data/lib/icontrol_rest.rb +1 -1
- data/lib/icontrol_rest/client.rb +25 -23
- data/lib/icontrol_rest/utils/logging.rb +53 -0
- data/lib/icontrol_rest/version.rb +1 -1
- metadata +3 -3
- data/lib/icontrol_rest/logger.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99b9915fe47d60aefe4fe54e3a141b7286d01d59
|
4
|
+
data.tar.gz: 67dbe13f3596cd49ab55e38419e483c230260183
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 750301793adb19dbb71af14bce9129b959ad629338d5b8feb66d586bec70ae6f0dc027804863c850bc6aa9ae05faa07d70ce6242c4857b2232f623a7a0bc2c7f
|
7
|
+
data.tar.gz: 89c2e83e29f0392e8ae1d16ee4e409d62a09d4c499192daed864bbc8a834f440259b00bd807cc7bdf49306e446ae48993d16800304f21cc0c7753e9823031cde
|
data/README.md
CHANGED
@@ -47,6 +47,30 @@ api.get('/mgmt/tm/sys/dns')
|
|
47
47
|
"description"=>"configured-by-dhcp",
|
48
48
|
"nameServers"=>["1.2.3.72", "1.2.3.73"],
|
49
49
|
"search"=>["domain.com"]}
|
50
|
+
|
51
|
+
# post/put/patch will allow you to specify a body and header with your request
|
52
|
+
api.post_transaction(body: {})
|
53
|
+
# => {"transId"=>1526674837169915,
|
54
|
+
"state"=>"STARTED",
|
55
|
+
"timeoutSeconds"=>120,
|
56
|
+
"asyncExecution"=>false,
|
57
|
+
"validateOnly"=>false,
|
58
|
+
"executionTimeout"=>300,
|
59
|
+
"executionTime"=>0,
|
60
|
+
"failureReason"=>"",
|
61
|
+
"kind"=>"tm:transactionstate",
|
62
|
+
"selfLink"=>"https://localhost/mgmt/tm/transaction/1526674837169915?ver=12.1.2"}
|
63
|
+
|
64
|
+
api.put_sys_dns(body: { nameServers: ['1.2.3.69'] }, headers: { 'X-F5-REST-Coordination-Id' => '1526674837169915' })
|
65
|
+
# => {"method": "PUT",
|
66
|
+
"uri": "https://localhost/mgmt/tm/sys/dns",
|
67
|
+
"body": {
|
68
|
+
"nameServers": ["1.2.3.69"]
|
69
|
+
},
|
70
|
+
"evalOrder": 1,
|
71
|
+
"commandId": 1,
|
72
|
+
"kind": "tm:transaction:commandsstate",
|
73
|
+
"selfLink": "https://localhost/mgmt/tm/transaction/1526674837169915/commands/1?ver=12.1.2"
|
50
74
|
```
|
51
75
|
|
52
76
|
|
data/lib/icontrol_rest.rb
CHANGED
data/lib/icontrol_rest/client.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'json'
|
4
|
+
|
3
5
|
module IcontrolRest
|
4
6
|
# A iControl REST Client for retrieving data from F5s.
|
5
7
|
class Client
|
8
|
+
include Utils::Logging
|
6
9
|
include HTTParty
|
7
10
|
format :json
|
8
11
|
|
@@ -44,16 +47,12 @@ module IcontrolRest
|
|
44
47
|
end
|
45
48
|
# rubocop:enable Metrics/ParameterLists
|
46
49
|
|
47
|
-
# Public
|
48
|
-
def logger
|
49
|
-
@logger ||= IcontrolRest::Logging::NullLogger.new
|
50
|
-
end
|
51
|
-
|
52
|
-
# Public - Delete/Get request method.
|
50
|
+
# Public - Delete/Get request method.
|
53
51
|
#
|
54
|
-
# route
|
52
|
+
# route - URI to send to server as a string.
|
53
|
+
# headers - Hash of headers to pass with request.
|
55
54
|
#
|
56
|
-
# Returns
|
55
|
+
# Returns - response from the server as a hash.
|
57
56
|
#
|
58
57
|
# Examples
|
59
58
|
#
|
@@ -65,22 +64,21 @@ module IcontrolRest
|
|
65
64
|
# "search"=>["domain.com"]}
|
66
65
|
#
|
67
66
|
%w[delete get].each do |action|
|
68
|
-
define_method(action.to_s) do |route,
|
69
|
-
send_request
|
67
|
+
define_method(action.to_s) do |route, headers: {}|
|
68
|
+
send_request(action: action, route: route, headers: headers)
|
70
69
|
end
|
71
70
|
end
|
72
71
|
|
73
|
-
# Public
|
72
|
+
# Public - Post/Put/Patch request methods.
|
74
73
|
#
|
75
|
-
# route
|
76
|
-
#
|
74
|
+
# route - URI to send to server as a string.
|
75
|
+
# body - Hash representing the request body.
|
76
|
+
# headers - Hash of headers to pass with request.
|
77
77
|
#
|
78
|
-
# Returns
|
78
|
+
# Returns - response from the server as a hash.
|
79
79
|
%w[post put patch].each do |action|
|
80
|
-
define_method(action.to_s) do |route,
|
81
|
-
body
|
82
|
-
body[:body] = data.to_json
|
83
|
-
send_request { self.class.send(action, route, body.merge(@options)) }
|
80
|
+
define_method(action.to_s) do |route, body: {}, headers: {}|
|
81
|
+
send_request(action: action, route: route, body: body, headers: headers)
|
84
82
|
end
|
85
83
|
end
|
86
84
|
|
@@ -88,14 +86,18 @@ module IcontrolRest
|
|
88
86
|
|
89
87
|
# Private - Handles response and raises error if the response isn't a 200.
|
90
88
|
#
|
91
|
-
#
|
89
|
+
# action - The HTTP action being executed.
|
90
|
+
# route - The route to send the request to.
|
91
|
+
# headers - A Hash representing any headers to be passed with the request.
|
92
|
+
# body - A Hash representing the request body to be passed with the request.
|
92
93
|
#
|
93
94
|
# Returns - response from the server as a hash.
|
94
95
|
#
|
95
96
|
# Raises - RuntimeError when the server returns a response that isn't a 200
|
96
|
-
def send_request
|
97
|
+
def send_request(action:, route:, headers: {}, body: nil)
|
97
98
|
Retriable.retriable on_retry: @retry_handler, tries: @tries do
|
98
|
-
|
99
|
+
body = body.to_json unless body.nil?
|
100
|
+
response = self.class.send(action, route, @options.deep_merge(body: body, headers: headers))
|
99
101
|
sleep(@sleep) if @sleep.positive?
|
100
102
|
return response if response.code == 200
|
101
103
|
raise "#{response['code']}: #{response['message']}"
|
@@ -108,10 +110,10 @@ module IcontrolRest
|
|
108
110
|
# *args - An array of arguments passed with the method call.
|
109
111
|
#
|
110
112
|
# Returns - Response from the method called.
|
111
|
-
def method_missing(method_name,
|
113
|
+
def method_missing(method_name, **args)
|
112
114
|
super unless respond_to_missing?(method_name)
|
113
115
|
route_chain = method_name.to_s.split('_')
|
114
|
-
send(route_chain[0].downcase, route(route_chain), args
|
116
|
+
send(route_chain[0].downcase, route(route_chain), args)
|
115
117
|
end
|
116
118
|
|
117
119
|
# Private - Adds methods prefixed with delete/get/post/put/patch to object.
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module IcontrolRest
|
6
|
+
module Utils
|
7
|
+
# Module to handle all logging across this gem
|
8
|
+
module Logging
|
9
|
+
def self.included(klass)
|
10
|
+
klass.extend ClassMethods
|
11
|
+
klass.include InstanceMethods
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.logger
|
15
|
+
@logger ||= NullLogger.new
|
16
|
+
@logger.progname = 'IControlRest'
|
17
|
+
@logger
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.use_logger(logger)
|
21
|
+
@logger = logger
|
22
|
+
end
|
23
|
+
|
24
|
+
# Module for instance methods to be included when IcontrolRest::Utils::Logging is included by a class.
|
25
|
+
module InstanceMethods
|
26
|
+
def logger
|
27
|
+
IcontrolRest::Utils::Logging.logger
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Module for class methods to be extended when IcontrolRest::Utils::Logging is included by a class.
|
32
|
+
module ClassMethods
|
33
|
+
def logger
|
34
|
+
IcontrolRest::Utils::Logging.logger
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# A stand-in Logger that does nothing when it is written to.
|
39
|
+
#
|
40
|
+
# Examples
|
41
|
+
#
|
42
|
+
# null_logger = NullLogger.new(STDOUT)
|
43
|
+
# null_logger.info { 'This message will never get writen' }
|
44
|
+
class NullLogger < Logger
|
45
|
+
# Intentionally do nothing
|
46
|
+
def initialize(*_args); end
|
47
|
+
|
48
|
+
# Intentionally do nothing
|
49
|
+
def add(*_args, &_block); end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: icontrol_rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerrod Carpenter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -54,7 +54,7 @@ files:
|
|
54
54
|
- bin/setup
|
55
55
|
- lib/icontrol_rest.rb
|
56
56
|
- lib/icontrol_rest/client.rb
|
57
|
-
- lib/icontrol_rest/
|
57
|
+
- lib/icontrol_rest/utils/logging.rb
|
58
58
|
- lib/icontrol_rest/version.rb
|
59
59
|
homepage: https://github.com/cerner/icontrol_rest.git
|
60
60
|
licenses: []
|
data/lib/icontrol_rest/logger.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module IcontrolRest
|
4
|
-
# Module to handle all logging across our gem
|
5
|
-
module Logging
|
6
|
-
class << self
|
7
|
-
attr_writer :logger
|
8
|
-
end
|
9
|
-
|
10
|
-
# Default logger to be used if logging configuration is not supplied by the user.
|
11
|
-
class NullLogger < Logger
|
12
|
-
def initialize(*)
|
13
|
-
# Intentionally do nothing
|
14
|
-
end
|
15
|
-
|
16
|
-
def add(*)
|
17
|
-
# Intentionally do nothing
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.logger
|
22
|
-
@logger ||= NullLogger.new
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.use_logger(logger)
|
26
|
-
@logger = logger
|
27
|
-
end
|
28
|
-
|
29
|
-
def logger
|
30
|
-
Logging.logger
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|