diff --git a/lib/datadog_api_client/api_client.rb b/lib/datadog_api_client/api_client.rb index c8b7c698f6d1..0e018768fb62 100644 --- a/lib/datadog_api_client/api_client.rb +++ b/lib/datadog_api_client/api_client.rb @@ -43,6 +43,7 @@ def initialize(config = Configuration.default) 'User-Agent' => @user_agent } @default_headers['Accept-Encoding'] = 'gzip' if @config.compress + @default_headers['X-Datadog-Managed-By'] = 'iac' if @config.is_iac end def self.default diff --git a/lib/datadog_api_client/configuration.rb b/lib/datadog_api_client/configuration.rb index bc8d4bb1fd96..9d84b93b789b 100644 --- a/lib/datadog_api_client/configuration.rb +++ b/lib/datadog_api_client/configuration.rb @@ -97,6 +97,13 @@ class Configuration # Keep track of the unstable operations, and if they have been enabled attr_accessor :unstable_operations + # Set this to true to mark requests as originating from infrastructure-as-code (IaC) tooling. + # When enabled, the `X-Datadog-Managed-By: iac` header is sent with every request. + # Default to false. + # + # @return [true, false] + attr_accessor :is_iac + ### TLS/SSL setting # Set this to false to skip verifying SSL certificate when calling API from https server. # Default to true. @@ -180,6 +187,7 @@ def initialize @cert_file = nil @key_file = nil @debugging = false + @is_iac = false @inject_format = false @force_ending_format = false @compress = true diff --git a/spec/api_client_spec.rb b/spec/api_client_spec.rb index de7c20b03911..f70e8a60b967 100644 --- a/spec/api_client_spec.rb +++ b/spec/api_client_spec.rb @@ -73,6 +73,23 @@ end end + describe 'is_iac header in #build_request' do + let(:config) { DatadogAPIClient::Configuration.new } + + it 'is not sent by default' do + api_client = DatadogAPIClient::APIClient.new(config) + request = api_client.build_request(Net::HTTP::Get, '/test') + expect(request.options[:headers]).not_to have_key('X-Datadog-Managed-By') + end + + it 'is sent when is_iac is enabled on the configuration' do + config.is_iac = true + api_client = DatadogAPIClient::APIClient.new(config) + request = api_client.build_request(Net::HTTP::Get, '/test') + expect(request.options[:headers]['X-Datadog-Managed-By']).to eq('iac') + end + end + describe '#deserialize' do it "handles Array" do api_client = DatadogAPIClient::APIClient.new