Skip to content

Commit 52753e1

Browse files
chef: support .NET zero config on linux (#4763)
1 parent 4787bda commit 52753e1

File tree

30 files changed

+528
-14
lines changed

30 files changed

+528
-14
lines changed

deployments/chef/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## chef-v0.14.0
4+
5+
- Initial support for [Splunk OpenTelemetry for .NET](https://github.com/signalfx/splunk-otel-dotnet) Auto
6+
Instrumentation on Linux (x86_64/amd64 only):
7+
- The .NET SDK is activated by default if the `with_auto_instrumentation` option is set to `true` and
8+
`auto_instrumentation_version` is `latest` or >= `0.99.0`.
9+
- To skip .NET auto instrumentation, configure the `with_auto_instrumentation_sdks` option without `dotnet`.
10+
311
## chef-v0.13.0
412

513
- Only copy the collector configuration file to `ProgramData` if the source exists.

deployments/chef/README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,12 @@ after installation/configuration in order for any change to take effect.
189189

190190
- `with_auto_instrumentation_sdks`: List of Splunk OpenTelemetry Auto
191191
Instrumentation SDKs to install, configure, and activate. (**default:**
192-
`%w(java nodejs)`)
192+
`%w(java nodejs dotnet)`)
193193

194194
Currently, the following values are supported:
195195
- `java`: [Splunk OpenTelemetry for Java](https://github.com/signalfx/splunk-otel-java)
196196
- `nodejs`: [Splunk OpenTelemetry for Node.js](https://github.com/signalfx/splunk-otel-js)
197+
- `dotnet`: [Splunk OpenTelemetry for .NET](https://github.com/signalfx/splunk-otel-dotnet) (x86_64/amd64 only)
197198

198199
**Note:** This recipe does not manage the installation/configuration of
199200
Node.js, `npm`, or Node.js applications. If `nodejs` is included in this
@@ -203,7 +204,8 @@ after installation/configuration in order for any change to take effect.
203204
- `auto_instrumentation_version`: Version of the
204205
`splunk-otel-auto-instrumentation` package to install, e.g. `0.50.0`. The
205206
minimum supported version is `0.48.0`. The minimum supported version for
206-
Node.js auto instrumentation is `0.87.0`. (**default:** `latest`)
207+
Node.js auto instrumentation is `0.87.0`. The minimum supported version for
208+
.NET auto instrumentation is `0.99.0`. (**default:** `latest`)
207209

208210
- `auto_instrumentation_systemd` (Linux only): By default, the
209211
`/etc/ld.so.preload` file on the node will be configured for the

deployments/chef/attributes/default.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,6 @@
100100
default['splunk_otel_collector']['auto_instrumentation_enable_profiler_memory'] = false
101101
default['splunk_otel_collector']['auto_instrumentation_enable_metrics'] = false
102102
default['splunk_otel_collector']['auto_instrumentation_otlp_endpoint'] = 'http://127.0.0.1:4317'
103-
default['splunk_otel_collector']['with_auto_instrumentation_sdks'] = %w(java nodejs)
103+
default['splunk_otel_collector']['with_auto_instrumentation_sdks'] = %w(java nodejs dotnet)
104104
default['splunk_otel_collector']['auto_instrumentation_npm_path'] = 'npm'
105105
end

deployments/chef/kitchen.windows.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ suites:
6565
remote_exec: true
6666
command: inspec exec custom_vars/test.rb
6767

68-
- name: with_default_dotnet_instrumentation
68+
- name: with_default_windows_dotnet_instrumentation
6969
run_list:
7070
- recipe[splunk_otel_collector]
7171
attributes:
@@ -76,9 +76,9 @@ suites:
7676
verifier:
7777
name: shell
7878
remote_exec: true
79-
command: inspec exec with_default_dotnet_instrumentation/test.rb
79+
command: inspec exec with_default_windows_dotnet_instrumentation/test.rb
8080

81-
- name: with_custom_dotnet_instrumentation
81+
- name: with_custom_windows_dotnet_instrumentation
8282
run_list:
8383
- recipe[splunk_otel_collector]
8484
attributes:
@@ -99,4 +99,4 @@ suites:
9999
verifier:
100100
name: shell
101101
remote_exec: true
102-
command: inspec exec with_custom_dotnet_instrumentation/test.rb
102+
command: inspec exec with_custom_windows_dotnet_instrumentation/test.rb

deployments/chef/kitchen.yml

+59
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,65 @@ suites:
380380
auto_instrumentation_enable_metrics: true
381381
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317
382382

383+
- name: with_default_preload_dotnet_instrumentation
384+
run_list:
385+
- recipe[splunk_otel_collector]
386+
attributes:
387+
splunk_otel_collector:
388+
splunk_access_token: testing123
389+
splunk_realm: test
390+
with_auto_instrumentation: true
391+
with_auto_instrumentation_sdks:
392+
- dotnet
393+
394+
- name: with_custom_preload_dotnet_instrumentation
395+
run_list:
396+
- recipe[splunk_otel_collector]
397+
attributes:
398+
splunk_otel_collector:
399+
splunk_access_token: testing123
400+
splunk_realm: test
401+
with_auto_instrumentation: true
402+
with_auto_instrumentation_sdks:
403+
- dotnet
404+
auto_instrumentation_ld_so_preload: "# my extra library"
405+
auto_instrumentation_resource_attributes: deployment.environment=test
406+
auto_instrumentation_service_name: test
407+
auto_instrumentation_enable_profiler: true
408+
auto_instrumentation_enable_profiler_memory: true
409+
auto_instrumentation_enable_metrics: true
410+
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317
411+
412+
- name: with_default_systemd_dotnet_instrumentation
413+
run_list:
414+
- recipe[splunk_otel_collector]
415+
attributes:
416+
splunk_otel_collector:
417+
splunk_access_token: testing123
418+
splunk_realm: test
419+
with_auto_instrumentation: true
420+
with_auto_instrumentation_sdks:
421+
- dotnet
422+
auto_instrumentation_systemd: true
423+
424+
- name: with_custom_systemd_dotnet_instrumentation
425+
run_list:
426+
- recipe[splunk_otel_collector]
427+
attributes:
428+
splunk_otel_collector:
429+
splunk_access_token: testing123
430+
splunk_realm: test
431+
with_auto_instrumentation: true
432+
with_auto_instrumentation_sdks:
433+
- dotnet
434+
auto_instrumentation_systemd: true
435+
auto_instrumentation_resource_attributes: deployment.environment=test
436+
auto_instrumentation_service_name: test
437+
auto_instrumentation_enable_profiler: true
438+
auto_instrumentation_enable_profiler_memory: true
439+
auto_instrumentation_enable_metrics: true
440+
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317
441+
383442
- name: with_default_preload_instrumentation_without_npm
384443
run_list:
385444
- recipe[splunk_otel_collector]

deployments/chef/metadata.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
maintainer_email '[email protected]'
44
license 'Apache-2.0'
55
description 'Install/Configure the Splunk OpenTelemetry Collector'
6-
version '0.13.0'
6+
version '0.14.0'
77
chef_version '>= 16.0'
88

99
supports 'amazon'

deployments/chef/recipes/auto_instrumentation.rb

+21-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
with_systemd = node['splunk_otel_collector']['auto_instrumentation_systemd'].to_s.downcase == 'true'
66
with_java = node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('java')
77
with_nodejs = node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('nodejs') && with_new_instrumentation
8+
dotnet_supported = %w(x86_64 amd64).include?(node['cpu']['architecture']) && (node['splunk_otel_collector']['auto_instrumentation_version'] == 'latest' || Gem::Version.new(node['splunk_otel_collector']['auto_instrumentation_version']) >= Gem::Version.new('0.99.0'))
9+
with_dotnet = node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('dotnet') && dotnet_supported
810
npm_path = node['splunk_otel_collector']['auto_instrumentation_npm_path']
911
lib_dir = '/usr/lib/splunk-instrumentation'
1012
splunk_otel_js_path = "#{lib_dir}/splunk-otel-js.tgz"
@@ -13,6 +15,7 @@
1315
zc_config_dir = '/etc/splunk/zeroconfig'
1416
java_config_file = "#{zc_config_dir}/java.conf"
1517
nodejs_config_file = "#{zc_config_dir}/node.conf"
18+
dotnet_config_file = "#{zc_config_dir}/dotnet.conf"
1619
old_config_file = "#{lib_dir}/instrumentation.conf"
1720
systemd_config_dir = '/usr/lib/systemd/system.conf.d'
1821
systemd_config_file = "#{systemd_config_dir}/00-splunk-otel-auto-instrumentation.conf"
@@ -66,7 +69,7 @@
6669
end
6770

6871
if with_systemd
69-
[java_config_file, nodejs_config_file, old_config_file].each do |config_file|
72+
[java_config_file, nodejs_config_file, dotnet_config_file, old_config_file].each do |config_file|
7073
file config_file do
7174
action :delete
7275
end
@@ -78,11 +81,12 @@
7881
variables(
7982
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] },
8083
with_java: lazy { with_java },
81-
with_nodejs: lazy { node.run_state[:with_nodejs] }
84+
with_nodejs: lazy { node.run_state[:with_nodejs] },
85+
with_dotnet: lazy { with_dotnet }
8286
)
8387
source '00-splunk-otel-auto-instrumentation.conf.erb'
8488
notifies :run, 'execute[reload systemd]', :delayed
85-
only_if { with_java || node.run_state[:with_nodejs] }
89+
only_if { with_java || node.run_state[:with_nodejs] || with_dotnet }
8690
end
8791
elsif with_new_instrumentation
8892
[old_config_file, systemd_config_file].each do |config_file|
@@ -98,6 +102,10 @@
98102
action :delete
99103
not_if { node.run_state[:with_nodejs] }
100104
end
105+
file dotnet_config_file do
106+
action :delete
107+
not_if { with_dotnet }
108+
end
101109
directory zc_config_dir do
102110
recursive true
103111
end
@@ -115,8 +123,15 @@
115123
source 'node.conf.erb'
116124
only_if { node.run_state[:with_nodejs] }
117125
end
126+
template dotnet_config_file do
127+
variables(
128+
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
129+
)
130+
source 'dotnet.conf.erb'
131+
only_if { with_dotnet }
132+
end
118133
else
119-
[java_config_file, nodejs_config_file, systemd_config_file].each do |config_file|
134+
[java_config_file, nodejs_config_file, dotnet_config_file, systemd_config_file].each do |config_file|
120135
file config_file do
121136
action :delete
122137
end
@@ -134,7 +149,8 @@
134149
variables(
135150
with_systemd: lazy { with_systemd },
136151
with_java: lazy { with_java },
137-
with_nodejs: lazy { node.run_state[:with_nodejs] }
152+
with_nodejs: lazy { node.run_state[:with_nodejs] },
153+
with_dotnet: lazy { with_dotnet }
138154
)
139155
source 'ld.so.preload.erb'
140156
end

deployments/chef/templates/00-splunk-otel-auto-instrumentation.conf.erb

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ DefaultEnvironment="JAVA_TOOL_OPTIONS=-javaagent:<%= node['splunk_otel_collector
55
<% if @with_nodejs -%>
66
DefaultEnvironment="NODE_OPTIONS=-r /usr/lib/splunk-instrumentation/splunk-otel-js/node_modules/@splunk/otel/instrument"
77
<% end -%>
8+
<% if @with_dotnet -%>
9+
DefaultEnvironment="CORECLR_ENABLE_PROFILING=1"
10+
DefaultEnvironment="CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}"
11+
DefaultEnvironment="CORECLR_PROFILER_PATH=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so"
12+
DefaultEnvironment="DOTNET_ADDITIONAL_DEPS=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/AdditionalDeps"
13+
DefaultEnvironment="DOTNET_SHARED_STORE=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/store"
14+
DefaultEnvironment="DOTNET_STARTUP_HOOKS=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll"
15+
DefaultEnvironment="OTEL_DOTNET_AUTO_HOME=/usr/lib/splunk-instrumentation/splunk-otel-dotnet"
16+
DefaultEnvironment="OTEL_DOTNET_AUTO_PLUGINS=Splunk.OpenTelemetry.AutoInstrumentation.Plugin,Splunk.OpenTelemetry.AutoInstrumentation"
17+
<% end -%>
818
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_resource_attributes']) && node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] != "" -%>
919
DefaultEnvironment="OTEL_RESOURCE_ATTRIBUTES=splunk.zc.method=splunk-otel-auto-instrumentation-<%= @installed_version %>-systemd,<%= node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] %>"
1020
<% else -%>
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
CORECLR_ENABLE_PROFILING=1
2+
CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
3+
CORECLR_PROFILER_PATH=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so
4+
DOTNET_ADDITIONAL_DEPS=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/AdditionalDeps
5+
DOTNET_SHARED_STORE=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/store
6+
DOTNET_STARTUP_HOOKS=/usr/lib/splunk-instrumentation/splunk-otel-dotnet/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll
7+
OTEL_DOTNET_AUTO_HOME=/usr/lib/splunk-instrumentation/splunk-otel-dotnet
8+
OTEL_DOTNET_AUTO_PLUGINS=Splunk.OpenTelemetry.AutoInstrumentation.Plugin,Splunk.OpenTelemetry.AutoInstrumentation
9+
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_resource_attributes']) && node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] != "" -%>
10+
OTEL_RESOURCE_ATTRIBUTES=splunk.zc.method=splunk-otel-auto-instrumentation-<%= @installed_version %>,<%= node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] %>
11+
<% else -%>
12+
OTEL_RESOURCE_ATTRIBUTES=splunk.zc.method=splunk-otel-auto-instrumentation-<%= @installed_version %>
13+
<% end -%>
14+
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_service_name']) && node['splunk_otel_collector']['auto_instrumentation_service_name'] != "" -%>
15+
OTEL_SERVICE_NAME=<%= node['splunk_otel_collector']['auto_instrumentation_service_name'] %>
16+
<% end -%>
17+
SPLUNK_PROFILER_ENABLED=<%= node['splunk_otel_collector']['auto_instrumentation_enable_profiler'].to_s.downcase %>
18+
SPLUNK_PROFILER_MEMORY_ENABLED=<%= node['splunk_otel_collector']['auto_instrumentation_enable_profiler_memory'].to_s.downcase %>
19+
SPLUNK_METRICS_ENABLED=<%= node['splunk_otel_collector']['auto_instrumentation_enable_metrics'].to_s.downcase %>
20+
OTEL_EXPORTER_OTLP_ENDPOINT=<%= node['splunk_otel_collector']['auto_instrumentation_otlp_endpoint'] %>

deployments/chef/templates/ld.so.preload.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<% if !@with_systemd && (@with_java || @with_nodejs) -%>
1+
<% if !@with_systemd && (@with_java || @with_nodejs || @with_dotnet) -%>
22
/usr/lib/splunk-instrumentation/libsplunk.so
33
<% end -%>
44
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_ld_so_preload']) && node['splunk_otel_collector']['auto_instrumentation_ld_so_preload'] != "" -%>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
libsplunk_path = '/usr/lib/splunk-instrumentation/libsplunk.so'
2+
resource_attributes = 'splunk.zc.method=splunk-otel-auto-instrumentation-\d+\.\d+\.\d+,deployment.environment=test'
3+
otlp_endpoint = 'http://0.0.0.0:4317'
4+
ld_preload_line = '# my extra library'
5+
dotnet_home = '/usr/lib/splunk-instrumentation/splunk-otel-dotnet'
6+
7+
describe package('splunk-otel-auto-instrumentation') do
8+
it { should be_installed }
9+
end
10+
11+
describe npm('@splunk/otel', path: '/usr/lib/splunk-instrumentation/splunk-otel-js') do
12+
it { should_not be_installed }
13+
end
14+
15+
describe file('/etc/ld.so.preload') do
16+
its('content') { should match /^#{libsplunk_path}$/ }
17+
its('content') { should match /^#{ld_preload_line}$/ }
18+
end
19+
20+
describe file('/usr/lib/systemd/system.conf.d/00-splunk-otel-auto-instrumentation.conf') do
21+
it { should_not exist }
22+
end
23+
24+
describe file('/etc/splunk/zeroconfig/java.conf') do
25+
it { should_not exist }
26+
end
27+
28+
describe file('/etc/splunk/zeroconfig/node.conf') do
29+
it { should_not exist }
30+
end
31+
32+
describe file('/usr/lib/splunk-instrumentation/instrumentation.conf') do
33+
it { should_not exist }
34+
end
35+
36+
describe file('/etc/splunk/zeroconfig/dotnet.conf') do
37+
its('content') { should match /^CORECLR_ENABLE_PROFILING=1$/ }
38+
its('content') { should match /^CORECLR_PROFILER=\{918728DD-259F-4A6A-AC2B-B85E1B658318\}$/ }
39+
its('content') { should match %r{^CORECLR_PROFILER_PATH=#{dotnet_home}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so$} }
40+
its('content') { should match %r{^DOTNET_ADDITIONAL_DEPS=#{dotnet_home}/AdditionalDeps$} }
41+
its('content') { should match %r{^DOTNET_SHARED_STORE=#{dotnet_home}/store$} }
42+
its('content') { should match %r{^DOTNET_STARTUP_HOOKS=#{dotnet_home}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll$} }
43+
its('content') { should match /^OTEL_DOTNET_AUTO_HOME=#{dotnet_home}$/ }
44+
its('content') { should match /^OTEL_DOTNET_AUTO_PLUGINS=Splunk.OpenTelemetry.AutoInstrumentation.Plugin,Splunk.OpenTelemetry.AutoInstrumentation$/ }
45+
its('content') { should match /^OTEL_RESOURCE_ATTRIBUTES=#{resource_attributes}$/ }
46+
its('content') { should match /^OTEL_SERVICE_NAME=test$/ }
47+
its('content') { should match /^SPLUNK_PROFILER_ENABLED=true$/ }
48+
its('content') { should match /^SPLUNK_PROFILER_MEMORY_ENABLED=true$/ }
49+
its('content') { should match /^SPLUNK_METRICS_ENABLED=true$/ }
50+
its('content') { should match /^OTEL_EXPORTER_OTLP_ENDPOINT=#{otlp_endpoint}$/ }
51+
end
52+
53+
describe service('splunk-otel-collector') do
54+
it { should be_enabled }
55+
it { should be_running }
56+
end
57+
58+
describe service('td-agent') do
59+
it { should_not be_enabled }
60+
it { should_not be_running }
61+
end

deployments/chef/test/integration/with_custom_preload_instrumentation/test.rb

+18
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
resource_attributes = 'splunk.zc.method=splunk-otel-auto-instrumentation-\d+\.\d+\.\d+,deployment.environment=test'
55
otlp_endpoint = 'http://0.0.0.0:4317'
66
ld_preload_line = '# my extra library'
7+
dotnet_home = '/usr/lib/splunk-instrumentation/splunk-otel-dotnet'
78

89
describe package('splunk-otel-auto-instrumentation') do
910
it { should be_installed }
@@ -46,6 +47,23 @@
4647
its('content') { should match /^OTEL_EXPORTER_OTLP_ENDPOINT=#{otlp_endpoint}$/ }
4748
end
4849

50+
describe file('/etc/splunk/zeroconfig/dotnet.conf') do
51+
its('content') { should match /^CORECLR_ENABLE_PROFILING=1$/ }
52+
its('content') { should match /^CORECLR_PROFILER=\{918728DD-259F-4A6A-AC2B-B85E1B658318\}$/ }
53+
its('content') { should match %r{^CORECLR_PROFILER_PATH=#{dotnet_home}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so$} }
54+
its('content') { should match %r{^DOTNET_ADDITIONAL_DEPS=#{dotnet_home}/AdditionalDeps$} }
55+
its('content') { should match %r{^DOTNET_SHARED_STORE=#{dotnet_home}/store$} }
56+
its('content') { should match %r{^DOTNET_STARTUP_HOOKS=#{dotnet_home}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll$} }
57+
its('content') { should match /^OTEL_DOTNET_AUTO_HOME=#{dotnet_home}$/ }
58+
its('content') { should match /^OTEL_DOTNET_AUTO_PLUGINS=Splunk.OpenTelemetry.AutoInstrumentation.Plugin,Splunk.OpenTelemetry.AutoInstrumentation$/ }
59+
its('content') { should match /^OTEL_RESOURCE_ATTRIBUTES=#{resource_attributes}$/ }
60+
its('content') { should match /^OTEL_SERVICE_NAME=test$/ }
61+
its('content') { should match /^SPLUNK_PROFILER_ENABLED=true$/ }
62+
its('content') { should match /^SPLUNK_PROFILER_MEMORY_ENABLED=true$/ }
63+
its('content') { should match /^SPLUNK_METRICS_ENABLED=true$/ }
64+
its('content') { should match /^OTEL_EXPORTER_OTLP_ENDPOINT=#{otlp_endpoint}$/ }
65+
end
66+
4967
describe service('splunk-otel-collector') do
5068
it { should be_enabled }
5169
it { should be_running }

deployments/chef/test/integration/with_custom_preload_java_instrumentation/test.rb

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
it { should_not exist }
2626
end
2727

28+
describe file('/etc/splunk/zeroconfig/dotnet.conf') do
29+
it { should_not exist }
30+
end
31+
2832
describe file('/usr/lib/splunk-instrumentation/instrumentation.conf') do
2933
it { should_not exist }
3034
end

deployments/chef/test/integration/with_custom_preload_node_instrumentation/test.rb

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
it { should_not exist }
2626
end
2727

28+
describe file('/etc/splunk/zeroconfig/dotnet.conf') do
29+
it { should_not exist }
30+
end
31+
2832
describe file('/usr/lib/splunk-instrumentation/instrumentation.conf') do
2933
it { should_not exist }
3034
end

0 commit comments

Comments
 (0)