Class: Puppet::Util::RepositoryManager

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/util/repository_manager.rb

Overview

GraphDB repository manager

Constant Summary collapse

DATA_TYPE_CONTENT_TYPE =
{ 'rdfxml' => 'application/rdf+xml; charset=utf-8',
'ntriples' => 'application/n-triples; charset=utf-8',
'turtle' => 'application/x-turtle; charset=utf-8',
'n3' => 'text/n3; charset=utf-8',
'trix' => 'application/trix; charset=utf-8',
'trig' => 'application/x-trig; charset=utf-8',
'binary' => 'application/x-binary-rdf; charset=utf-8',
'nquads' => 'application/n-quads; charset=utf-8',
'jsonld' => 'application/ld+json; charset=utf-8',
'rdfjson' => 'application/rdf+json; charset=utf-8',
'rdfa' => 'application/html; charset=utf-8' }.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint, repository_id) ⇒ RepositoryManager

Returns a new instance of RepositoryManager.



26
27
28
29
# File 'lib/puppet/util/repository_manager.rb', line 26

def initialize(endpoint, repository_id)
  @endpoint = endpoint
  @repository_id = repository_id
end

Instance Attribute Details

#endpointObject (readonly)

Returns the value of attribute endpoint.



23
24
25
# File 'lib/puppet/util/repository_manager.rb', line 23

def endpoint
  @endpoint
end

#repository_idObject (readonly)

Returns the value of attribute repository_id.



24
25
26
# File 'lib/puppet/util/repository_manager.rb', line 24

def repository_id
  @repository_id
end

Instance Method Details

#ask(query, expected_response, timeout) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/puppet/util/repository_manager.rb', line 127

def ask(query, expected_response, timeout)
  uri = endpoint.dup
  uri.path = "/repositories/#{repository_id}"

  Puppet.debug "Trying to ask repository [#{endpoint}/#{repository_id}]"
  Puppet::Util::RequestManager.perform_http_request(uri, { method: :get,
                                                           params: { 'query' => query },
                                                           content_type: 'application/x-www-form-urlencoded',
                                                           accept_type: 'text/boolean' },
                                                    { messages: [expected_response.to_s], codes: [200] },
                                                    timeout)
end

#check_repository(timeout) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/puppet/util/repository_manager.rb', line 31

def check_repository(timeout)
  Puppet.debug "Checking repository [#{endpoint}/repositories/#{repository_id}]"
  unless repository_exists?
    raise Puppet::Exceptions::RequestFailError,
          "Repository [#{endpoint}/repositories/#{repository_id}] doesn't exists"
  end
  repository_up?(timeout)
end

#create_repository(repository_template, repository_context, timeout) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/puppet/util/repository_manager.rb', line 61

def create_repository(repository_template, repository_context, timeout)
  Puppet.debug "Trying to create repository [#{endpoint}/repositories/#{repository_id}]"
  uri = endpoint.dup
  uri.path = '/repositories/SYSTEM/rdf-graphs/service'

  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :post,
                                                      params: { 'graph' => repository_context },
                                                      body_data: repository_template,
                                                      content_type: 'application/x-turtle' },
                                                    { codes: [204] },
                                                    timeout)
  Puppet.notice("Repository [#{endpoint}/repositories/#{repository_id}] creation passed.")
end

#define_node_id(node_id) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/puppet/util/repository_manager.rb', line 76

def define_node_id(node_id)
  Puppet.debug "Trying to set node id [#{endpoint}/repositories/#{repository_id}] to [#{node_id}]"
  uri = endpoint.dup
  uri.path = '/jolokia'
  body = {
    'type' => 'write',
    'mbean' => "ReplicationCluster:name=ClusterInfo/#{repository_id}",
    'attribute' => 'NodeID',
    'value' => node_id
  }

  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :post,
                                                      content_type: 'application/json',
                                                      body_data: body.to_json },
                                                    { codes: [200] }, 0)

  Puppet.notice("Repository [#{endpoint}/repositories/#{repository_id}] node id set to [#{node_id}].")
end

#define_repository_replication_port(replication_port) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/puppet/util/repository_manager.rb', line 96

def define_repository_replication_port(replication_port)
  Puppet.debug "Trying to set repository replication port [#{endpoint}/repositories/#{repository_id}] to [#{replication_port}]"
  uri = endpoint.dup
  uri.path = '/jolokia'
  body = {
    'type' => 'write',
    'mbean' => "ReplicationCluster:name=ClusterInfo/#{repository_id}",
    'attribute' => 'MasterReplicationPort',
    'value' => replication_port
  }

  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :post,
                                                      content_type: 'application/json',
                                                      body_data: body.to_json },
                                                    { codes: [200] }, 0)

  Puppet.notice("Repository [#{endpoint}/repositories/#{repository_id}] replication port set to [#{replication_port}].")
end

#delete_repository(timeout) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'lib/puppet/util/repository_manager.rb', line 116

def delete_repository(timeout)
  uri = endpoint.dup
  uri.path = "/repositories/#{repository_id}"

  Puppet.debug "Trying to delete repository [#{endpoint}/repositories/#{repository_id}]"
  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :delete, content_type: 'application/x-turtle' },
                                                    { codes: [204] },
                                                    timeout)
end

#load_data(data, data_format, data_context, overwrite, timeout) ⇒ Object



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/puppet/util/repository_manager.rb', line 153

def load_data(data, data_format, data_context, overwrite, timeout)
  method = overwrite == true ? :put : :post
  uri = endpoint.dup
  uri.path = "/repositories/#{repository_id}/statements"

  context = data_context.nil? ? 'null' : data_context

  Puppet.debug "Trying to load data into repository [#{endpoint}/#{repository_id}]"
  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: method,
                                                      params: { 'context' => context },
                                                      body_data: data,
                                                      content_type: resolve_content_type(data_format) },
                                                    { codes: [204] },
                                                    timeout)
end

#repository_exists?Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
46
47
48
49
50
# File 'lib/puppet/util/repository_manager.rb', line 40

def repository_exists?
  uri = endpoint.dup
  uri.path = "/repositories/#{repository_id}/size"
  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :get },
                                                    { codes: [404] },
                                                    0)
  false
rescue
  true
end

#repository_up?(timeout) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
56
57
58
59
# File 'lib/puppet/util/repository_manager.rb', line 52

def repository_up?(timeout)
  uri = endpoint.dup
  uri.path = "/repositories/#{repository_id}/size"
  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :get },
                                                    { messages: ['No workers configured', '\d+'],
                                                      codes: [200, 500] }, timeout)
end

#resolve_content_type(data_format) ⇒ Object

Raises:

  • (ArgumentError)


170
171
172
173
174
# File 'lib/puppet/util/repository_manager.rb', line 170

def resolve_content_type(data_format)
  return DATA_TYPE_CONTENT_TYPE[data_format] if DATA_TYPE_CONTENT_TYPE.key?(data_format)

  raise ArgumentError, "Unknown data format [#{data_format}], please check"
end

#update_query(query, timeout) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/puppet/util/repository_manager.rb', line 140

def update_query(query, timeout)
  uri = endpoint.dup
  uri.path = "/repositories/#{repository_id}/statements"

  Puppet.debug "Trying to post update query to repository [#{endpoint}/#{repository_id}]"
  Puppet::Util::RequestManager.perform_http_request(uri,
                                                    { method: :post,
                                                      body_params: { 'update' => query },
                                                      content_type: 'application/x-www-form-urlencoded' },
                                                    { codes: [204] },
                                                    timeout)
end