splunk-sdk-ruby 0.1.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.
Files changed (81) hide show
  1. data/CHANGELOG.md +160 -0
  2. data/Gemfile +8 -0
  3. data/LICENSE +177 -0
  4. data/README.md +310 -0
  5. data/Rakefile +40 -0
  6. data/examples/1_connect.rb +51 -0
  7. data/examples/2_manage.rb +103 -0
  8. data/examples/3_blocking_searches.rb +82 -0
  9. data/examples/4_asynchronous_searches.rb +79 -0
  10. data/examples/5_stream_data_to_splunk.rb +79 -0
  11. data/lib/splunk-sdk-ruby.rb +47 -0
  12. data/lib/splunk-sdk-ruby/ambiguous_entity_reference.rb +28 -0
  13. data/lib/splunk-sdk-ruby/atomfeed.rb +323 -0
  14. data/lib/splunk-sdk-ruby/collection.rb +417 -0
  15. data/lib/splunk-sdk-ruby/collection/apps.rb +35 -0
  16. data/lib/splunk-sdk-ruby/collection/case_insensitive_collection.rb +58 -0
  17. data/lib/splunk-sdk-ruby/collection/configuration_file.rb +50 -0
  18. data/lib/splunk-sdk-ruby/collection/configurations.rb +80 -0
  19. data/lib/splunk-sdk-ruby/collection/jobs.rb +136 -0
  20. data/lib/splunk-sdk-ruby/collection/messages.rb +51 -0
  21. data/lib/splunk-sdk-ruby/context.rb +522 -0
  22. data/lib/splunk-sdk-ruby/entity.rb +260 -0
  23. data/lib/splunk-sdk-ruby/entity/index.rb +191 -0
  24. data/lib/splunk-sdk-ruby/entity/job.rb +339 -0
  25. data/lib/splunk-sdk-ruby/entity/message.rb +36 -0
  26. data/lib/splunk-sdk-ruby/entity/saved_search.rb +71 -0
  27. data/lib/splunk-sdk-ruby/entity/stanza.rb +45 -0
  28. data/lib/splunk-sdk-ruby/entity_not_ready.rb +26 -0
  29. data/lib/splunk-sdk-ruby/illegal_operation.rb +27 -0
  30. data/lib/splunk-sdk-ruby/namespace.rb +239 -0
  31. data/lib/splunk-sdk-ruby/resultsreader.rb +716 -0
  32. data/lib/splunk-sdk-ruby/service.rb +339 -0
  33. data/lib/splunk-sdk-ruby/splunk_http_error.rb +49 -0
  34. data/lib/splunk-sdk-ruby/synonyms.rb +50 -0
  35. data/lib/splunk-sdk-ruby/version.rb +27 -0
  36. data/lib/splunk-sdk-ruby/xml_shim.rb +117 -0
  37. data/splunk-sdk-ruby.gemspec +27 -0
  38. data/test/atom_test_data.rb +472 -0
  39. data/test/data/atom/atom_feed_with_message.xml +19 -0
  40. data/test/data/atom/atom_with_feed.xml +99 -0
  41. data/test/data/atom/atom_with_several_entries.xml +101 -0
  42. data/test/data/atom/atom_with_simple_entries.xml +30 -0
  43. data/test/data/atom/atom_without_feed.xml +248 -0
  44. data/test/data/export/4.2.5/export_results.xml +88 -0
  45. data/test/data/export/4.3.5/export_results.xml +87 -0
  46. data/test/data/export/5.0.1/export_results.xml +78 -0
  47. data/test/data/export/5.0.1/nonreporting.xml +232 -0
  48. data/test/data/results/4.2.5/results-empty.xml +0 -0
  49. data/test/data/results/4.2.5/results-preview.xml +255 -0
  50. data/test/data/results/4.2.5/results.xml +336 -0
  51. data/test/data/results/4.3.5/results-empty.xml +0 -0
  52. data/test/data/results/4.3.5/results-preview.xml +1057 -0
  53. data/test/data/results/4.3.5/results.xml +626 -0
  54. data/test/data/results/5.0.2/results-empty.xml +1 -0
  55. data/test/data/results/5.0.2/results-empty_preview.xml +1 -0
  56. data/test/data/results/5.0.2/results-preview.xml +448 -0
  57. data/test/data/results/5.0.2/results.xml +501 -0
  58. data/test/export_test_data.json +360 -0
  59. data/test/resultsreader_test_data.json +1119 -0
  60. data/test/services.server.info.xml +43 -0
  61. data/test/services.xml +111 -0
  62. data/test/test_atomfeed.rb +71 -0
  63. data/test/test_collection.rb +278 -0
  64. data/test/test_configuration_file.rb +124 -0
  65. data/test/test_context.rb +119 -0
  66. data/test/test_entity.rb +95 -0
  67. data/test/test_helper.rb +250 -0
  68. data/test/test_http_error.rb +52 -0
  69. data/test/test_index.rb +91 -0
  70. data/test/test_jobs.rb +319 -0
  71. data/test/test_messages.rb +17 -0
  72. data/test/test_namespace.rb +188 -0
  73. data/test/test_restarts.rb +49 -0
  74. data/test/test_resultsreader.rb +106 -0
  75. data/test/test_roles.rb +41 -0
  76. data/test/test_saved_searches.rb +119 -0
  77. data/test/test_service.rb +65 -0
  78. data/test/test_users.rb +33 -0
  79. data/test/test_xml_shim.rb +28 -0
  80. data/test/testfile.txt +1 -0
  81. metadata +200 -0
@@ -0,0 +1,124 @@
1
+ require_relative 'test_helper'
2
+ require 'splunk-sdk-ruby'
3
+
4
+ include Splunk
5
+
6
+ class ConfigurationFileTestCase < TestCaseWithSplunkConnection
7
+ def setup
8
+ super
9
+ # We cannot delete configuration files from the REST API
10
+ # so we create a temporary application to do our manipulation
11
+ # in. When we delete it at the end of the test run, the
12
+ # configuration modifications will be deleted as well.
13
+ @container_app_name = temporary_name()
14
+ @service.apps.create(@container_app_name)
15
+
16
+ # Now reconnect in the test app context.
17
+ app_service_args = @splunkrc.clone()
18
+ app_service_args[:namespace] =
19
+ Splunk::namespace(:sharing => "app", :app => @container_app_name)
20
+ @app_service = Splunk::Service.new(app_service_args).login()
21
+ @confs = @app_service.confs
22
+ end
23
+
24
+ def teardown
25
+ if @service.server_requires_restart?
26
+ fail("Test left Splunk in a state requiring restart.")
27
+ end
28
+
29
+ @service.apps.delete(@container_app_name)
30
+ if @service.server_requires_restart?
31
+ clear_restart_message(@service)
32
+ end
33
+
34
+ super
35
+ end
36
+
37
+ def test_create_and_delete
38
+ file_name = temporary_name()
39
+ assert_false(@confs.has_key?(file_name))
40
+ assert_false(@confs.contains?(file_name))
41
+ assert_false(@confs.member?(file_name))
42
+ assert_false(@confs.key?(file_name))
43
+ assert_false(@confs.include?(file_name))
44
+
45
+ conf = @confs.create(file_name)
46
+ assert_equal(file_name, conf.name)
47
+ assert_equal(0, conf.length)
48
+
49
+ assert_true(@confs.has_key?(file_name))
50
+ assert_true(@confs.contains?(file_name))
51
+ assert_true(@confs.member?(file_name))
52
+ assert_true(@confs.key?(file_name))
53
+ assert_true(@confs.include?(file_name))
54
+
55
+ assert_raises(Splunk::IllegalOperation) { @confs.delete(file_name) }
56
+ end
57
+
58
+ def test_fetch
59
+ file_name = temporary_name()
60
+ created_conf = @confs.create(file_name)
61
+
62
+ fetched_conf = @confs.fetch(file_name)
63
+ assert_true(fetched_conf.is_a?(ConfigurationFile))
64
+ assert_equal(created_conf.name, fetched_conf.name)
65
+
66
+ bracket_fetched_conf = @confs[file_name]
67
+ assert_true(fetched_conf.is_a?(ConfigurationFile))
68
+ assert_equal(created_conf.name, bracket_fetched_conf.name)
69
+ end
70
+
71
+ def test_each_and_values
72
+ each_names = []
73
+ @confs.each() { |entity| each_names << entity.name }
74
+
75
+ values_names = @confs.values().map() { |e| e.name }
76
+
77
+ assert_false(each_names.empty?)
78
+ assert_equal(each_names, values_names)
79
+ end
80
+
81
+ def test_create_and_delete_stanzas
82
+ file_name = temporary_name()
83
+ conf = @confs.create(file_name)
84
+
85
+ assert_equal(0, conf.length())
86
+
87
+ n = 5 + rand(5)
88
+ stanza_names = []
89
+ (1..n).each() do
90
+ stanza_name = temporary_name()
91
+ stanza_names << stanza_name
92
+ conf.create(stanza_name)
93
+ end
94
+
95
+ assert_equal(n, conf.length())
96
+
97
+ stanza_names.each() do |name|
98
+ conf.delete(name)
99
+ n -= 1
100
+ assert_equal(n, conf.length())
101
+ end
102
+ end
103
+
104
+ def test_each
105
+ @confs.each() do |configuration_file|
106
+ assert_true(configuration_file.is_a?(ConfigurationFile))
107
+ end
108
+ end
109
+
110
+ def test_submit_to_stanza
111
+ file_name = temporary_name()
112
+ conf = @confs.create(file_name)
113
+
114
+ stanza_name = temporary_name()
115
+ stanza = conf.create(stanza_name)
116
+
117
+ assert_equal(0, stanza.length())
118
+ stanza.submit(:boris => "natasha", :hilda => "moose on the roof")
119
+ stanza.refresh()
120
+ assert_equal(2, stanza.length())
121
+ assert_equal("natasha", stanza["boris"])
122
+ assert_equal("moose on the roof", stanza["hilda"])
123
+ end
124
+ end
@@ -0,0 +1,119 @@
1
+ require_relative "test_helper"
2
+ require "splunk-sdk-ruby"
3
+
4
+ include Splunk
5
+
6
+ # Test the helper functions in test_helper.rb
7
+ class TestHelpers < TestCaseWithSplunkConnection
8
+ def test_temporary_name
9
+ assert_true(temporary_name().start_with?("delete-me"))
10
+ end
11
+
12
+ def test_set_and_clear_restart_messages()
13
+ service = Context.new(@splunkrc).login()
14
+ assert_false(service.server_requires_restart?)
15
+
16
+ set_restart_message(service)
17
+ assert_true(service.server_requires_restart?)
18
+
19
+ clear_restart_message(service)
20
+ assert_false(service.server_requires_restart?)
21
+ end
22
+ end
23
+
24
+ class TestContext < TestCaseWithSplunkConnection
25
+ def test_login()
26
+ service = Context.new(@splunkrc)
27
+ service.login()
28
+ assert_logged_in(service)
29
+ end
30
+
31
+ def test_login_with_encodings()
32
+ ["ASCII", "UTF-8"].each() do |encoding|
33
+ values = {}
34
+ @splunkrc.each() do |key, value|
35
+ if value.is_a?(String)
36
+ values[key] = value.clone().force_encoding(encoding)
37
+ else
38
+ values[key] = value
39
+ end
40
+ end
41
+ service = Context.new(values).login()
42
+ assert_logged_in(service)
43
+ end
44
+ end
45
+
46
+ def test_authenticate_with_token
47
+ service = Context.new(@splunkrc).login()
48
+ token = service.token
49
+
50
+ new_arguments = @splunkrc.clone
51
+ new_arguments.delete(:username)
52
+ new_arguments.delete(:password)
53
+ new_arguments[:token] = token
54
+
55
+ new_service = Context.new(new_arguments)
56
+ assert_not_nil(new_service.token)
57
+ assert_logged_in(new_service)
58
+ end
59
+
60
+ def test_failed_login()
61
+ args = @splunkrc.clone()
62
+ args[:username] = args[:username] + "-boris"
63
+ service = Context.new(args)
64
+
65
+ assert_raises(SplunkHTTPError) {service.login()}
66
+ end
67
+
68
+ def test_multiple_logins_are_nops()
69
+ service = Context.new(@splunkrc).login()
70
+ assert_logged_in(service)
71
+
72
+ assert_nothing_raised() {service.login()}
73
+ assert_logged_in(service)
74
+ end
75
+
76
+ def test_logout
77
+ service = Context.new(@splunkrc).login()
78
+ assert_logged_in(service)
79
+
80
+ service.logout()
81
+ assert_not_logged_in(service)
82
+
83
+ service.login()
84
+ assert_logged_in(service)
85
+ end
86
+
87
+ def test_connect()
88
+ service = Context.new(@splunkrc).login()
89
+ socket = service.connect()
90
+ # Send a manual HTTP request
91
+ socket.write("GET /services/data/indexes HTTP/1.1\r\n")
92
+ socket.write("Authorization: Splunk #{service.token}\r\n")
93
+ socket.write("\r\n")
94
+ response = socket.readlines()
95
+ assert_equal("HTTP/1.1 200 OK", response[0].strip)
96
+ end
97
+
98
+ def test_server_accepting_connections?
99
+ values = @splunkrc.clone()
100
+ values[:port] = 10253
101
+ service = Context.new(values)
102
+ assert_false(service.server_accepting_connections?)
103
+
104
+ service = Context.new(@splunkrc)
105
+ assert_true(service.server_accepting_connections?)
106
+ end
107
+
108
+ def test_info
109
+ assert_true(@service.info.has_key?("version"))
110
+ end
111
+
112
+ def test_splunk_version
113
+ version = @service.splunk_version
114
+ assert_true(version.is_a?(Array))
115
+ version.each() do |v|
116
+ assert_true(v.is_a?(Integer))
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,95 @@
1
+ require_relative 'test_helper'
2
+ require 'splunk-sdk-ruby'
3
+
4
+ include Splunk
5
+
6
+ class EntityTestCase < TestCaseWithSplunkConnection
7
+ def setup
8
+ super
9
+ @app_args = {
10
+ "author" => "Harry Belten",
11
+ "label" => "A random app",
12
+ "description" => "Sumer is icumen in",
13
+ }
14
+ @entity = @service.apps.create(temporary_name(), @app_args)
15
+ end
16
+
17
+ def teardown
18
+ @entity.delete()
19
+
20
+ if @service.splunk_version[0..1] != [4,2]
21
+ clear_restart_message(@service)
22
+ end
23
+
24
+ super
25
+ end
26
+
27
+ def test_fetch
28
+ @app_args.each() do |key, value|
29
+ assert_equal(value, @entity[key])
30
+ assert_equal(value, @entity.fetch(key))
31
+ end
32
+ end
33
+
34
+ def test_fetch_with_default
35
+ assert_equal("boris", @entity.fetch("nonexistant key", "boris"))
36
+ end
37
+
38
+ def test_update_and_refresh
39
+ @entity.update("label" => "This is a test")
40
+ assert_equal(@app_args["label"], @entity["label"])
41
+ @entity.refresh()
42
+ assert_equal("This is a test", @entity["label"])
43
+
44
+ @entity["label"] = "Oh the vogonity!"
45
+ assert_equal("This is a test", @entity["label"])
46
+ @entity.refresh()
47
+ assert_equal("Oh the vogonity!", @entity["label"])
48
+ end
49
+
50
+ def test_read
51
+ state = @entity.read()
52
+ assert_false(state.empty?)
53
+ state.each() do |key, value|
54
+ assert_equal(value, @entity[key])
55
+ end
56
+ state.each() do |key, value|
57
+ state[key] = "boris"
58
+ assert_not_equal("boris", value)
59
+ assert_equal(value, @entity[key])
60
+ end
61
+ end
62
+
63
+ def test_state_with_field_list
64
+ state = @entity.read("label", "description")
65
+ assert_false(state.empty?)
66
+ state.each() do |key, value|
67
+ assert_equal(value, @entity[key])
68
+ end
69
+ state.each() do |key, value|
70
+ state[key] = "boris"
71
+ assert_not_equal("boris", value)
72
+ assert_equal(value, @entity[key])
73
+ end
74
+
75
+ assert_equal(@entity.read("label", "description"),
76
+ @entity.read(["label", "description"]))
77
+ end
78
+
79
+ def test_disable_enable
80
+ # We have to refresh first, because apps on some versions of Splunk
81
+ # do not have all their keys (including "disabled") when first created.
82
+ @entity.refresh()
83
+
84
+ assert_equal('0', @entity["disabled"])
85
+
86
+ @entity.disable()
87
+ @entity.refresh()
88
+ assert_equal('1', @entity["disabled"])
89
+
90
+ @entity.enable()
91
+ @entity.refresh()
92
+ assert_equal('0', @entity["disabled"])
93
+ end
94
+
95
+ end
@@ -0,0 +1,250 @@
1
+ if ENV.has_key?("COVERAGE")
2
+ require "simplecov"
3
+ SimpleCov.start() do
4
+ add_filter("test")
5
+ end
6
+ end
7
+
8
+ # This line is required to let RubyMine run the test suite,
9
+ # since otherwise random packages load other random packages
10
+ # in random order and clobber RubyMine's configuration.
11
+ # See http://youtrack.jetbrains.com/issue/RUBY-11922
12
+ $:.unshift($:.select {|i| i.include? '/patch/'}).flatten!
13
+
14
+ require 'test-unit'
15
+
16
+ $:.unshift File.expand_path(File.join([File.dirname(__FILE__), "..", "lib"]))
17
+
18
+ def read_splunkrc
19
+ file = File.new(File.expand_path("~/.splunkrc"))
20
+ options = {
21
+ :host => 'localhost',
22
+ :port => 8089,
23
+ :username => 'admin',
24
+ :password => 'changeme',
25
+ :scheme => 'https',
26
+ :version => '5.0'
27
+ }
28
+ file.readlines.each do |raw_line|
29
+ line = raw_line.strip()
30
+ if line.start_with?("\#") or line.length == 0
31
+ next
32
+ else
33
+ raw_key, raw_value = line.split('=', limit=2)
34
+ key = raw_key.strip().intern
35
+ value = raw_value.strip()
36
+
37
+ if key == 'port'
38
+ value = Integer(value)
39
+ end
40
+
41
+ options[key] = value
42
+ end
43
+ end
44
+
45
+ options
46
+ end
47
+
48
+ def nokogiri_available?
49
+ begin
50
+ require 'nokogiri'
51
+ return true
52
+ rescue LoadError
53
+ return false
54
+ end
55
+ end
56
+
57
+ require 'securerandom'
58
+ def temporary_name
59
+ return "delete-me-" + SecureRandom.uuid()
60
+ end
61
+
62
+ DEFAULT_RESTART_TIMEOUT = 500 # seconds
63
+
64
+ class TestCaseWithSplunkConnection < Test::Unit::TestCase
65
+ def setup
66
+ super
67
+ @splunkrc = read_splunkrc()
68
+ @service = Splunk::Service.new(@splunkrc).login()
69
+ @installed_apps = []
70
+
71
+ if @service.server_requires_restart?
72
+ puts "Previous test left server in a state requiring a restart."
73
+ checked_restart(@service)
74
+ end
75
+ end
76
+
77
+ def teardown
78
+ if @service.server_requires_restart?()
79
+ fail("Test left server in a state requiring restart.")
80
+ end
81
+
82
+ if @service.splunk_version[0..1] != [4,2]
83
+ @installed_apps.each() do |app_name|
84
+ @service.apps.delete(app_name)
85
+ assert_eventually_true() do
86
+ !@service.apps.has_key?(app_name)
87
+ end
88
+ if @service.server_requires_restart?
89
+ clear_restart_message(@service)
90
+ end
91
+ end
92
+ end
93
+
94
+ @installed_apps.clear()
95
+
96
+ super
97
+ end
98
+
99
+ def assert_eventually_true(timeout=30, &block)
100
+ Timeout::timeout(timeout) do
101
+ while !block.call()
102
+ sleep(0.2)
103
+ end
104
+ end
105
+ end
106
+
107
+ def assert_logged_in(service)
108
+ assert_nothing_raised do
109
+ # A request to data/indexes requires you to be logged in.
110
+ service.request(:method=>:GET,
111
+ :resource=>["data", "indexes"])
112
+ end
113
+ end
114
+
115
+ def assert_not_logged_in(service)
116
+ begin
117
+ service.request(:method=>:GET,
118
+ :resource=>["data", "indexes"])
119
+ rescue SplunkHTTPError => err
120
+ assert_equal(401, err.code, "Expected HTTP status code 401, found: #{err.code}")
121
+ else
122
+ fail("Context is logged in.")
123
+ end
124
+ end
125
+
126
+ # Clear any restart messages on _service_.
127
+ #
128
+ # If there was no restart message, raises an error. (We want all the restarts
129
+ # and restart messages carefully controlled in the test suite.)
130
+ #
131
+ def clear_restart_message(service)
132
+ if !service.server_requires_restart?
133
+ raise StandardError.new("Tried to clear restart message " +
134
+ "when there was none.")
135
+ end
136
+ begin
137
+ service.request(:method => :DELETE,
138
+ :resource => ["messages", "restart_required"])
139
+ rescue SplunkHTTPError => err
140
+ if err.code != 404
141
+ raise err
142
+ end
143
+ end
144
+ end
145
+
146
+ def has_app_collection?(service)
147
+ collection_name = 'sdk-app-collection'
148
+ return service.apps.has_key?(collection_name)
149
+ end
150
+
151
+ def install_app_from_collection(name)
152
+ collection_name = 'sdk-app-collection'
153
+ if !@service.apps.has_key?(collection_name)
154
+ raise StandardError("#{collection_name} not installed in Splunk.")
155
+ end
156
+
157
+ app_path = path_in_app(collection_name, ["build", name+".tar"])
158
+ args = {"update" => 1, "name" => app_path}
159
+ begin
160
+ @service.request(:method => :POST,
161
+ :resource => ["apps", "appinstall"],
162
+ :body => args)
163
+ @installed_apps << name
164
+ rescue SplunkHTTPError => err
165
+ if err.code == 40
166
+ raise StandardError("App #{name} not found in app collection")
167
+ else
168
+ raise err
169
+ end
170
+ end
171
+ end
172
+
173
+ # Return a path to *path_components* in *app_name*.
174
+ #
175
+ # `path_in_app` is used to refer to files in applications installed with
176
+ # `install_app_from_collection`. For example, the app `file_to_upload` in
177
+ # the collection contains `log.txt`. To get the path to it, call::
178
+ #
179
+ # path_in_app('file_to_upload', ['log.txt'])
180
+ #
181
+ # The path to `setup.xml` in `has_setup_xml` would be fetched with::
182
+ #
183
+ # path_in_app('has_setup_xml', ['default', 'setup.xml'])
184
+ #
185
+ # path_in_app` figures out the correct separator to use (based on whether
186
+ # splunkd is running on Windows or Unix) and joins the elements in
187
+ # *path_components* into a path relative to the application specified by
188
+ # *app_name*.
189
+ #
190
+ # *path_components* should be a list of strings giving the components.
191
+ # This function will try to figure out the correct separator (/ or \)
192
+ # for the platform that splunkd is running on and construct the path
193
+ # as needed.
194
+ #
195
+ # :return: A string giving the path.
196
+ #
197
+ def path_in_app(app_name, path_components)
198
+ splunk_home = @service.settings["SPLUNK_HOME"]
199
+ if splunk_home.include?("\\")
200
+ # This clause must come first, since Windows machines may
201
+ # have mixed \ and / in their paths.
202
+ separator = "\\"
203
+ elsif splunk_home.include?("/")
204
+ separator = "/"
205
+ else
206
+ raise StandardError("No separators in $SPLUNK_HOME. Can't determine " +
207
+ "what file separator to use.")
208
+ end
209
+
210
+ app_path = ([splunk_home, "etc", "apps", app_name] + path_components).
211
+ join(separator)
212
+ return app_path
213
+ end
214
+
215
+
216
+ # Create a new restart message on _service_.
217
+ #
218
+ # Optionally you can specify a value for the restart message, or it will
219
+ # default to "Ruby SDK test suite asked for a restart."
220
+ #
221
+ def set_restart_message(service,
222
+ message="Ruby SDK test suite asked for a restart.")
223
+ service.request(:method => :POST,
224
+ :namespace => Splunk::namespace(:sharing => "default"),
225
+ :resource => ["messages"],
226
+ :body => {"name" => "restart_required",
227
+ "value" => "Message set by restart method" +
228
+ " of the Splunk Ruby SDK"})
229
+ end
230
+
231
+ # Restart Splunk and wait for it to come back up, but only if it needs it.
232
+ #
233
+ # Throws an error if this is called on a Splunk instance that does not
234
+ # need to be restarted.
235
+ #
236
+ def checked_restart(service)
237
+ if !service.server_requires_restart?
238
+ raise StandardError("Tried to restart a Splunk instance that" +
239
+ " does not need it.")
240
+ else
241
+ service.restart(DEFAULT_RESTART_TIMEOUT)
242
+ end
243
+ end
244
+
245
+ # Restarts a Splunk instance whether it needs it or not.
246
+ #
247
+ def unchecked_restart(service)
248
+ service.restart(DEFAULT_RESTART_TIMEOUT)
249
+ end
250
+ end