Class: Puppet::Provider::Rbac_api

Inherits:
Puppet::Provider
  • Object
show all
Defined in:
lib/puppet/provider/rbac_api.rb

Constant Summary collapse

CONFIGFILE =
"#{Puppet.settings[:confdir]}/classifier.yaml"

Class Method Summary collapse

Class Method Details

.build_auth(uri) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/puppet/provider/rbac_api.rb', line 16

def self.build_auth(uri)
  https = Net::HTTP.new(uri.host, uri.port)
  https.use_ssl = true
  https.ssl_version = :TLSv1
  https.ca_file = Puppet.settings[:localcacert]
  https.key = OpenSSL::PKey::RSA.new(File.read(Puppet.settings[:hostprivkey]))
  https.cert = OpenSSL::X509::Certificate.new(File.read(Puppet.settings[:hostcert]))
  https.verify_mode = OpenSSL::SSL::VERIFY_PEER
  https
end

.delete_response(endpoint) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/puppet/provider/rbac_api.rb', line 70

def self.delete_response(endpoint)
  uri   = make_uri(endpoint)
  https = build_auth(uri)
  Puppet.debug "RBAC API: DELETE #{uri.request_uri}"

  request = Net::HTTP::Delete.new(uri.request_uri)
  request['Content-Type'] = "application/json"
  res = https.request(request)

  if res.code != "200"
    raise Puppet::Error, "An RBAC API error occured: HTTP #{res.code}, #{res.body}"
  end
end

.fetch_redirect(uri_str, limit = 10) ⇒ Object

Raises:

  • (ArgumentError)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/puppet/provider/rbac_api.rb', line 32

def self.fetch_redirect(uri_str, limit = 10)
  raise ArgumentError, 'HTTP redirection has reached the limit beyond 10' if limit == 0

  uri   = make_uri(uri_str, nil)
  https = build_auth(uri)
  Puppet.debug "RBAC API: REDIRECT #{uri.request_uri}"

  request = Net::HTTP::Get.new(uri.request_uri)
  res = https.request(request)

  case res
  when Net::HTTPSuccess then
    res
  when Net::HTTPRedirection then
    fetch_redirect(res['location'], limit - 1)
  else
    raise Puppet::Error, "An RBAC API error occured: HTTP #{res.code}, #{res.to_hash.inspect}"
  end
end

.get_response(endpoint) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/puppet/provider/rbac_api.rb', line 52

def self.get_response(endpoint)
  uri   = make_uri(endpoint)
  https = build_auth(uri)
  Puppet.debug "RBAC API: GET #{uri.request_uri}"


  request = Net::HTTP::Get.new(uri.request_uri)
  request['Content-Type'] = "application/json"
  res = https.request(request)

  if res.code != "200"
    raise Puppet::Error, "An RBAC API error occured: HTTP #{res.code}, #{res.body}"
  end
  res_body = JSON.parse(res.body)

  res_body
end

.make_uri(path, prefix = '/rbac-api/v1') ⇒ Object



27
28
29
30
# File 'lib/puppet/provider/rbac_api.rb', line 27

def self.make_uri(path, prefix = '/rbac-api/v1')
  uri = URI.parse("https://#{@config['server']}:#{@config['port']}#{prefix}#{path}")
  uri
end

.post_response(endpoint, request_body) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/puppet/provider/rbac_api.rb', line 99

def self.post_response(endpoint, request_body)
  limit = 10
  uri   = make_uri(endpoint)
  https = build_auth(uri)
  Puppet.debug "RBAC API: POST #{uri.request_uri}"

  request = Net::HTTP::Post.new(uri.request_uri)
  request['Content-Type'] = "application/json"
  request.body = request_body.to_json
  res = https.request(request)
  case res
  when Net::HTTPSuccess then
    res
  when Net::HTTPRedirection then
    fetch_redirect(res['location'], limit - 1)
  else
    raise Puppet::Error, "An RBAC API error occured: HTTP #{res.code}, #{res.to_hash.inspect}"
  end
end

.put_response(endpoint, request_body) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/puppet/provider/rbac_api.rb', line 84

def self.put_response(endpoint, request_body)
  uri   = make_uri(endpoint)
  https = build_auth(uri)
  Puppet.debug "RBAC API: PUT #{uri.request_uri}"

  request = Net::HTTP::Put.new(uri.request_uri)
  request['Content-Type'] = "application/json"
  request.body = request_body.to_json
  res = https.request(request)

  if res.code != "200"
    raise Puppet::Error, "An RBAC API error occured: HTTP #{res.code}, #{res.body}"
  end
end