Class: Puppet::Util::NetworkDevice::Transport::Netscaler

Inherits:
Base
  • Object
show all
Defined in:
lib/puppet/util/network_device/transport/netscaler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, _options = {}) ⇒ Netscaler

Returns a new instance of Netscaler.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 8

def initialize(url, _options = {})
  require 'uri'
  require 'faraday'
  require 'puppet/util/network_device/transport/do_not_encoder'
  @connection = Faraday.new({:url => url, :ssl => { :verify => false }}) do |builder|
    builder.request :retry, {
      :max                 => 10,
      :interval            => 0.05,
      :interval_randomness => 0.5,
      :backoff_factor      => 2,
      :exceptions          => [
        Faraday::Error::TimeoutError,
        Faraday::ConnectionFailed,
        Errno::ETIMEDOUT,
        'Timeout::Error',
      ],
    }
    builder.adapter :net_http
    builder.options.params_encoder = Puppet::Util::NetworkDevice::Transport::DoNotEncoder
  end
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



6
7
8
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 6

def connection
  @connection
end

Instance Method Details

#call(url = nil, args = {}) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 30

def call(url=nil, args={})
  url = URI.escape(url) if url
  result = connection.get("/nitro/v1#{url}", args)
  type = url.split('/')[1]
  output = JSON.parse(result.body)
  if url.split('/')[2]
    output[url.split('/')[2]]
  elsif output["#{type}objects"]
    output["#{type}objects"]['objects']
  end
rescue JSON::ParserError
  return nil
end

#delete(url, args = {}) ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 82

def delete(url,args={})
  url = URI.escape(url) if url
  result = connection.delete do |req|
    # https://github.com/lostisland/faraday/issues/465
    #req.options.params_encoder = Puppet::Util::NetworkDevice::Transport::DoNotEncoder
    req.url "/nitro/v1#{url}", args
  end
  failure?(result)
  return result
end

#failure?(result) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
48
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 44

def failure?(result)
  unless result.status == 200 or result.status == 201
    fail("REST failure: HTTP status code #{result.status} detected.  Body of failure is: #{result.body}")
  end
end

#post(url, json, args = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 50

def post(url, json, args={})
  url = URI.escape(url) if url
  resource_type = url.split('/')[2]
  if valid_json?(json)
    result = connection.post do |req|
      req.url "/nitro/v1#{url}", args
      req.headers['Content-Type'] = "application/vnd.com.citrix.netscaler.#{resource_type}+json"
      req.body = json
    end
    failure?(result)
    return result
  else
    fail('Invalid JSON detected.')
  end
end

#put(url, json) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 66

def put(url, json)
  url = URI.escape(url) if url
  resource_type = url.split('/')[2]
  if valid_json?(json)
    result = connection.put do |req|
      req.url "/nitro/v1#{url}"
      req.headers['Content-Type'] = "application/vnd.com.citrix.netscaler.#{resource_type}+json"
      req.body = json
    end
    failure?(result)
    return result
  else
    fail('Invalid JSON detected.')
  end
end

#valid_json?(json) ⇒ Boolean

Returns:

  • (Boolean)


93
94
95
96
97
98
# File 'lib/puppet/util/network_device/transport/netscaler.rb', line 93

def valid_json?(json)
  JSON.parse(json)
  return true
rescue
  return false
end