Class: ToolsNet
Class Method Summary collapse
-
.doreq(restclient_obj, path, method, method_opts: {}, validate_opts: {}, retry_opts: {}, show_progress: false) ⇒ Object
Do the request, validate and decode response and do the retries if needed.
- .get_current_ip ⇒ Object
-
.is_backend?(original_addr) ⇒ Boolean
Validate.: ip number is a backend?.
- .ping?(host) ⇒ Boolean
-
.resolv_dns(domain) ⇒ String
Resolv a dns to a ip.
-
.resolv_ip_name(ip) ⇒ String
Resolv a ip to a dns.
- .valid_ip?(original_addr) ⇒ Boolean
-
.valid_network?(original_addr) ⇒ Boolean
Validate.: ip number is avalid network.
-
.valid_port?(port) ⇒ Boolean
Validate.: port number between valid range?.
-
.validate_decode_response(response, request, result, validate_opts) ⇒ Object type
Return a valid decode response.
-
.validate_ipaddress(that) ⇒ Hash
Validate.: ip number or mask are valids?.
Class Method Details
.doreq(restclient_obj, path, method, method_opts: {}, validate_opts: {}, retry_opts: {}, show_progress: false) ⇒ Object
Do the request, validate and decode response and do the retries if needed
- restclient_obj: initialized RestClient object
- path: URL path to request
- method: symbol for HTTP Method to request
- method_opts: options as passed to a RestClient call
- validate_opts: options for response validation as used with validate_decode_response()
- retry_opts: when_res: [nil, [], {}, 'str'], when_code: [404, 500], conditionals to retry even if no exceptions were catched
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/lib/net.rb', line 79 def self.doreq( restclient_obj, path, method, method_opts: {},validate_opts: {}, retry_opts: {}, show_progress: false) res = nil code = nil data = method_opts.fetch(:data, nil) method_opts.delete(:data) # Retry loop due to: # - 404 from Router API right after applying patch over a target # - Intermittent connection reset from Manager API (HTTPS) retries = retry_opts.fetch(:attempts, 10) 1.upto(retries) do |try| flag_error = false # The request begin restclient_obj[path].send(method, *data, **method_opts) do |response, request, result| res = validate_decode_response(response, request, result, validate_opts) code = result.code.to_i end rescue Exception => error flag_error = true end # Other conditionals to retry unless retry_opts.empty? if retry_opts.has_key?(:when_res) flag_error = true if retry_opts[:when_res].include?(res) end if retry_opts.has_key?(:when_code) flag_error = true if retry_opts[:when_code].include?(code) end end return res unless flag_error # got response, break the loop doReqMSG = sprintf "%d/%d", try, retries if show_progress ap doReqMSG end if try >= retries ap doreq_code return nil else sleep 1 # wait before next end end end |
.get_current_ip ⇒ Object
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/lib/net.rb', line 9 def self.get_current_ip # begin # ip = Socket::getaddrinfo(Socket.gethostname, "echo", Socket::AF_INET)[0][3] # return ip if IPAddress.valid?(ip) # rescue Exception => e # end ip = `ifconfig | grep -E '10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{print $2}'` ip = ip.split("\n").first if ip.include? "\n" return ip if IPAddress.valid?(ip) end |
.is_backend?(original_addr) ⇒ Boolean
Validate.: ip number is a backend?.
226 227 228 229 |
# File 'lib/lib/net.rb', line 226 def self.is_backend? original_addr glbbackend = NetAddr::CIDR.create('10.0.0.0/8') return glbbackend.contains? original_addr end |
.ping?(host) ⇒ Boolean
5 6 7 |
# File 'lib/lib/net.rb', line 5 def self.ping? host return Net::Ping::External.new(host || '0.0.0.1000', timeout=1).ping? end |
.resolv_dns(domain) ⇒ String
Resolv a dns to a ip.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/lib/net.rb', line 46 def self.resolv_dns domain begin dns = Dnsruby::DNS.new() ret = dns.getaddress(domain).to_s rescue Exception => e case e. when "Dnsruby::NXDomain" return nil else return e. end end return ret end |
.resolv_ip_name(ip) ⇒ String
Resolv a ip to a dns.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/lib/net.rb', line 25 def self.resolv_ip_name ip s = '' begin ret = Resolv.new.getname(ip) return ret.instance_variable_get('@labels').join('.') rescue Exception => e case e. when "Dnsruby::NXDomain" return nil else return e. end end return s.strip end |
.valid_ip?(original_addr) ⇒ Boolean
231 232 233 234 235 236 237 238 |
# File 'lib/lib/net.rb', line 231 def self.valid_ip? original_addr status = false begin status = IPAddress.valid?(original_addr) rescue end return status end |
.valid_network?(original_addr) ⇒ Boolean
Validate.: ip number is avalid network.
244 245 246 247 248 249 250 251 252 |
# File 'lib/lib/net.rb', line 244 def self.valid_network? original_addr status = false begin ip = IPAddress original_addr status = true if ip.network? rescue end return status end |
.valid_port?(port) ⇒ Boolean
Validate.: port number between valid range?.
162 163 164 165 166 167 168 169 170 |
# File 'lib/lib/net.rb', line 162 def self.valid_port? port if port.to_s.strip.match(/^\d{1,5}(?!\d)$/).nil? return false end unless port.to_i.between?(1, 65535) return false end return true end |
.validate_decode_response(response, request, result, validate_opts) ⇒ Object type
Return a valid decode response.
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/lib/net.rb', line 130 def self.validate_decode_response response, request, result, validate_opts if validate_opts.has_key? :expected expected = validate_opts[:expected] case expected.class.name when 'Array' if validate_opts[:expected].include? response return true else return false end when 'Proc' response = expected.call(response, request, result) return response when 'String' return result if validate_opts[:expected].eql? 'result' return request if validate_opts[:expected].eql? 'request' return response if validate_opts[:expected].eql? 'response' else ap expected.class.name return response end else return response end return true end |
.validate_ipaddress(that) ⇒ Hash
Validate.: ip number or mask are valids?.
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/lib/net.rb', line 178 def self.validate_ipaddress that result = {} result[:status] = false result[:type] = '' result[:msg] = '' result[:address] = that result[:resolv] = '' if IPAddress::valid_ipv4? that begin ip = IPAddress::valid_ipv4? that result[:status] = true result[:type] = 'ip' result[:oct1] = that.split('.')[0] result[:oct2] = that.split('.')[1] result[:oct3] = that.split('.')[2] result[:oct4] = that.split('.')[3] rescue Exception => e result[:msg] = e.to_s return end else begin net = NetAddr::CIDR.create that result[:type] = 'mask' result[:status] = true rescue Exception => e ip = resolv_dns that if IPAddress::valid_ipv4? ip result[:status] = true result[:type] = 'ip' result[:oct1] = ip.split('.')[0] result[:oct2] = ip.split('.')[1] result[:oct3] = ip.split('.')[2] result[:oct4] = ip.split('.')[3] else result[:msg] = e.to_s end end end return result end |