diff --git a/.generator/src/generator/templates/api_client.j2 b/.generator/src/generator/templates/api_client.j2 index 9ac71ff36324..b423431810fa 100644 --- a/.generator/src/generator/templates/api_client.j2 +++ b/.generator/src/generator/templates/api_client.j2 @@ -32,6 +32,7 @@ module {{ module_name }} '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/.generator/src/generator/templates/configuration.j2 b/.generator/src/generator/templates/configuration.j2 index 6bfa8b2828b4..39ceb8e23e42 100644 --- a/.generator/src/generator/templates/configuration.j2 +++ b/.generator/src/generator/templates/configuration.j2 @@ -86,6 +86,13 @@ module {{ module_name }} # 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. @@ -170,6 +177,7 @@ module {{ module_name }} @cert_file = nil @key_file = nil @debugging = false + @is_iac = false @inject_format = false @force_ending_format = false @compress = true 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 a5695977f6a9..75c31072422a 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