Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/changes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ on:
value: ${{ jobs.int_tests.outputs.nats }}
nginx:
value: ${{ jobs.int_tests.outputs.nginx }}
opensearch:
value: ${{ jobs.int_tests.outputs.opensearch }}
opentelemetry:
value: ${{ jobs.int_tests.outputs.opentelemetry }}
postgres:
Expand Down Expand Up @@ -346,6 +348,7 @@ jobs:
mqtt: ${{ steps.filter.outputs.mqtt }}
nats: ${{ steps.filter.outputs.nats }}
nginx: ${{ steps.filter.outputs.nginx }}
opensearch: ${{ steps.filter.outputs.opensearch }}
opentelemetry: ${{ steps.filter.outputs.opentelemetry }}
postgres: ${{ steps.filter.outputs.postgres }}
prometheus: ${{ steps.filter.outputs.prometheus }}
Expand Down Expand Up @@ -413,6 +416,7 @@ jobs:
"nats": ${{ steps.filter.outputs.nats }},
"nginx": ${{ steps.filter.outputs.nginx }},
"opentelemetry": ${{ steps.filter.outputs.opentelemetry }},
"opensearch": ${{ steps.filter.outputs.opensearch }},
"postgres": ${{ steps.filter.outputs.postgres }},
"prometheus": ${{ steps.filter.outputs.prometheus }},
"pulsar": ${{ steps.filter.outputs.pulsar }},
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ jobs:
"mongodb",
"nats",
"nginx",
"opensearch",
Comment thread
pront marked this conversation as resolved.
"opentelemetry",
"postgres",
"prometheus",
Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1073,6 +1073,7 @@ datadog-traces-integration-tests = ["sources-datadog_agent", "sinks-datadog_trac
docker-logs-integration-tests = ["sources-docker_logs", "unix"]
doris-integration-tests = ["sinks-doris"]
es-integration-tests = ["sinks-elasticsearch", "aws-core"]
opensearch-integration-tests = []
eventstoredb_metrics-integration-tests = ["sources-eventstoredb_metrics"]
fluent-integration-tests = ["docker", "sources-fluent"]
gcp-cloud-storage-integration-tests = ["sinks-gcp"]
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ test-behavior: test-behavior-transforms test-behavior-formats test-behavior-conf
.PHONY: test-integration
test-integration: ## Runs all integration tests
test-integration: test-integration-amqp test-integration-appsignal test-integration-aws test-integration-axiom test-integration-azure test-integration-chronicle test-integration-clickhouse
test-integration: test-integration-databend test-integration-docker-logs test-integration-elasticsearch
test-integration: test-integration-databend test-integration-docker-logs test-integration-elasticsearch test-integration-opensearch
Comment thread
pront marked this conversation as resolved.
test-integration: test-integration-eventstoredb test-integration-fluent test-integration-gcp test-integration-greptimedb test-integration-humio test-integration-http-client test-integration-influxdb
test-integration: test-integration-kafka test-integration-logstash test-integration-loki test-integration-mongodb test-integration-nats
test-integration: test-integration-nginx test-integration-opentelemetry test-integration-postgres test-integration-prometheus test-integration-pulsar
Expand Down
3 changes: 3 additions & 0 deletions changelog.d/20174_opensearch_version_detection.fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
The ElasticSearch sink chooses the compatible API version 7 when connecting to OpenSearch.

authors: tstenner
10 changes: 10 additions & 0 deletions src/sinks/elasticsearch/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ impl ElasticsearchCommon {
ElasticsearchApiVersion::V6 => 6,
ElasticsearchApiVersion::V7 => 7,
ElasticsearchApiVersion::V8 => 8,
// Opensearch 3.x is incompatible with Elasticsearch 8.x APIs
ElasticsearchApiVersion::OS3 => 7,
ElasticsearchApiVersion::Auto => {
match get_version(
&base_url,
Expand Down Expand Up @@ -381,6 +383,7 @@ async fn get_version(
) -> crate::Result<usize> {
#[derive(Deserialize)]
struct Version {
distribution: Option<String>,
number: Option<String>,
}
#[derive(Deserialize)]
Expand All @@ -405,6 +408,13 @@ async fn get_version(
let mut body = body.collect().await?.aggregate();
let body = body.copy_to_bytes(body.remaining());
let ResponsePayload { version } = serde_json::from_slice(&body)?;
if let Some(version) = version.as_ref()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we do this https://github.com/vectordotdev/vector/pull/24652/changes#r3073522268, then we can delete all changes in this file.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Theoretically yes, but once we need special handling of Opensearch that does not yet warrant a separate sink we should have the groundwork ready.

&& let Some(distribution) = version.distribution.as_ref()
&& distribution == "opensearch"
{
// OpenSearch versions 1.x and 2.x are compatible with Elasticsearch API version 7.x
return Ok(7);
Comment thread
pront marked this conversation as resolved.
}
if let Some(version) = version
&& let Some(number) = version.number
{
Expand Down
59 changes: 38 additions & 21 deletions src/sinks/elasticsearch/integration_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ use crate::{
tls::{self, TlsConfig},
};

const INITIAL_ADMIN_PASSWORD: &str = "Vector2026!";

fn http_username() -> String {
std::env::var("ELASTICSEARCH_USERNAME").unwrap_or_else(|_| "elastic".into())
}

fn aws_server() -> String {
std::env::var("ELASTICSEARCH_AWS_ADDRESS").unwrap_or_else(|_| "http://localhost:4571".into())
}
Expand Down Expand Up @@ -264,15 +270,14 @@ async fn auto_version_http() {
.expect("Config error");
}

#[cfg(feature = "aws-core")]
#[tokio::test]
async fn auto_version_https() {
trace_init();

let config = ElasticsearchConfig {
auth: Some(ElasticsearchAuthConfig::Basic {
user: "elastic".to_string(),
password: "vector".to_string().into(),
user: http_username(),
password: INITIAL_ADMIN_PASSWORD.to_string().into(),
}),
endpoints: vec![https_server()],
doc_type: "log_lines".to_string(),
Expand All @@ -291,6 +296,7 @@ async fn auto_version_https() {
}

#[cfg(feature = "aws-core")]
#[cfg_attr(feature = "opensearch-integration-tests", ignore)]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here and below:

Suggested change
#[cfg_attr(feature = "opensearch-integration-tests", ignore)]

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opensearch is missing the AWS authentication so this test has to be skipped

#[tokio::test]
async fn auto_version_aws() {
trace_init();
Expand Down Expand Up @@ -376,8 +382,8 @@ async fn insert_events_over_https() {
run_insert_tests(
ElasticsearchConfig {
auth: Some(ElasticsearchAuthConfig::Basic {
user: "elastic".to_string(),
password: "vector".to_string().into(),
user: http_username(),
password: INITIAL_ADMIN_PASSWORD.to_string().into(),
}),
endpoints: vec![https_server()],
doc_type: "log_lines".into(),
Expand All @@ -396,6 +402,7 @@ async fn insert_events_over_https() {
}

#[cfg(feature = "aws-core")]
#[cfg_attr(feature = "opensearch-integration-tests", ignore)]
#[tokio::test]
async fn insert_events_on_aws() {
trace_init();
Expand All @@ -422,6 +429,7 @@ async fn insert_events_on_aws() {
}

#[cfg(feature = "aws-core")]
#[cfg_attr(feature = "opensearch-integration-tests", ignore)]
#[tokio::test]
async fn insert_events_on_aws_with_compression() {
trace_init();
Expand Down Expand Up @@ -487,8 +495,9 @@ async fn insert_events_with_failure_and_gzip_compression() {
#[tokio::test]
async fn insert_events_in_data_stream() {
trace_init();
let template_index = format!("my-template-{}", gen_index());
let stream_index = format!("my-stream-{}", gen_index());
let index = gen_index();
let template_index = format!("my-template-{}", index);
let stream_index = format!("my-stream-{}", index);

let cfg = ElasticsearchConfig {
endpoints: vec![http_server()],
Expand All @@ -497,6 +506,10 @@ async fn insert_events_in_data_stream() {
index: Template::try_from(stream_index.clone()).expect("unable to parse template"),
..Default::default()
},
data_stream: Some(DataStreamConfig {
namespace: index,
..Default::default()
Comment on lines +509 to +511

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Align the data stream name with the test setup

When the new OpenSearch suite runs insert_events_in_data_stream, this data_stream config makes the sink derive the target as logs-generic-{index}, while the setup just above still creates an index template matching my-*-* and a data stream named my-stream-{index}. OpenSearch data streams need a matching data-stream index template for the target name, so the bulk writes go to an unprepared logs-generic-* stream and the test fails instead of exercising the created stream.

Useful? React with 👍 / 👎.

}),
batch: batch_settings(),
..Default::default()
};
Expand All @@ -522,8 +535,8 @@ async fn distributed_insert_events() {
// Assumes that behind https_server and http_server addresses lies the same server
let mut config = ElasticsearchConfig {
auth: Some(ElasticsearchAuthConfig::Basic {
user: "elastic".into(),
password: "vector".to_string().into(),
user: http_username(),
password: INITIAL_ADMIN_PASSWORD.to_string().into(),
}),
endpoints: vec![https_server(), http_server()],
doc_type: "log_lines".into(),
Expand All @@ -548,8 +561,8 @@ async fn distributed_insert_events_failover() {

let mut config = ElasticsearchConfig {
auth: Some(ElasticsearchAuthConfig::Basic {
user: "elastic".into(),
password: "vector".to_string().into(),
user: http_username(),
password: INITIAL_ADMIN_PASSWORD.to_string().into(),
}),
// Valid endpoints and some random non elasticsearch endpoint
endpoints: vec![
Expand Down Expand Up @@ -627,14 +640,6 @@ async fn run_insert_tests_with_config(
let common = ElasticsearchCommon::parse_single(config)
.await
.expect("Config error");
let index = match config.mode {
// Data stream mode uses an index name generated from the event.
ElasticsearchMode::DataStream => format!(
"{}",
Utc::now().format(".ds-logs-generic-default-%Y.%m.%d-000001")
),
ElasticsearchMode::Bulk => config.bulk.index.to_string(),
};
let base_url = common.base_url.clone();

let cx = SinkContext::default();
Expand All @@ -654,7 +659,10 @@ async fn run_insert_tests_with_config(
let events = events.map(move |mut events| {
if doit {
events.iter_logs_mut().for_each(|log| {
// _type: 1 is invalid for elasticsearch
log.insert("_type", 1);
// opensearch has a 512 character limit on _id
log.insert("_id", "invalid id because it is too long".repeat(16));
});
}
doit = true;
Expand All @@ -678,10 +686,19 @@ async fn run_insert_tests_with_config(
// make sure writes are all visible
flush(common).await.expect("Flushing writes failed");

let index = match config.mode {
ElasticsearchMode::DataStream => config
.data_stream
.as_ref()
.map(|ds| format!("logs-generic-{}", ds.namespace))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we write here eventually, can we delete my-template-* / my-stream-* ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd have to look into this. As of now, this is the smallest change I found back then that worked against both backends

.unwrap(),
ElasticsearchMode::Bulk => config.bulk.index.to_string(),
};

let client = create_http_client();
let mut response = client
.get(format!("{base_url}/{index}/_search"))
.basic_auth("elastic", Some("vector"))
.basic_auth(http_username(), Some(INITIAL_ADMIN_PASSWORD))
.json(&json!({
"query": { "query_string": { "query": "*" } }
}))
Expand Down Expand Up @@ -770,7 +787,7 @@ async fn run_insert_tests_with_multiple_endpoints(config: &ElasticsearchConfig)
for base_url in base_urls {
if let Ok(response) = client
.get(format!("{base_url}/{index}/_search"))
.basic_auth("elastic", Some("vector"))
.basic_auth(http_username(), Some(INITIAL_ADMIN_PASSWORD))
.json(&json!({
"query": { "query_string": { "query": "*" } }
}))
Expand Down
3 changes: 3 additions & 0 deletions src/sinks/elasticsearch/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,9 @@ pub enum ElasticsearchApiVersion {
V7,
/// Use the Elasticsearch 8.x API.
V8,
#[serde(rename = "os3")]
/// Use the Opensearch 3.x API
OS3,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This basically V7 so I think we can delete this and just update the V7 docs.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At the moment, the OS3 code paths are the same as V7, but there it lays the groundwork to handle all minor differences (current and upcoming) and new functionality that does not warrant an entirely new sink.

Comment thread
tstenner marked this conversation as resolved.
}

#[derive(Debug, Snafu)]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
-----BEGIN CERTIFICATE-----
MIIFtzCCA5+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajESMBAGA1UEAwwJVmVj
dG9yIENBMQ8wDQYDVQQLDAZWZWN0b3IxEDAOBgNVBAoMB0RhdGFkb2cxETAPBgNV
BAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazELMAkGA1UEBhMCVVMwHhcN
MjIwNjA3MjIyNzUzWhcNMzIwNjA0MjIyNzUzWjBrMQswCQYDVQQGEwJVUzERMA8G
A1UECAwITmV3IFlvcmsxEDAOBgNVBAoMB0RhdGFkb2cxDzANBgNVBAsMBlZlY3Rv
cjEmMCQGA1UEAwwdVmVjdG9yIEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwggIiMA0G
CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCy/mB0/ZwfgKrSZPQIFaGPtRA9xL2N
o2SsHndZ8k2XOCV225Hb2fzNH+o2WGNSjwmGjLP/uXb47KH0cHCAyFGzSjp++8/O
zoZaFiO0P5El02hQxmoabO3Cqu/N62EFsLfpSM828JM6YOn9p+WXUDn1+YPNoOOE
H142p4/RjFnXNHkzR3geXU4Pfi3KXDrMi8vK42lDqXPLPs6rhreBAfQ2dsYyqhz6
tg6FzZuXxxzEYyYtNgGh+zTji99WCBMLbCmRcDurRjdTDO7m4O3PrwbGUy0xdLeb
HJiNGvUDCPH4bfwLiNqwVIZY38RBCAqbCnrqRhDaZIfAUev4mq3Kqh6KUeO/U7Vx
/5J5rL5ApREKOfWPATHMprBuEU2rs3N+MPBA04HoiFlu311urCxVEA1qsZCTkoCg
GHuDIVSU4E4hT4co95/J0to4zWgPlfPg1+cXyU8lAIMe7JdCGkG9cDe7Umw/GSbt
ZdoCMQZ6WyyiW2Hw+7sFD3V3VzYa5YA/rjKZRduPmGWKrs+mAa5J5pM2M22rrjbd
EpfTHWLS9s6cPN3/jxpCxn6Hv/KhIYRAcIterugag1+clvS1ajVjxBRavOxPBsf+
hYdh7S5NTZnT98gjkc3yOuGQm7BPtXau+IYZRlWcB0dJ4/E2P69hmWQezSo9VVWh
5/K1RkbPvqTGZQIDAQABo2YwZDAdBgNVHQ4EFgQUPD06L8zVggN9mcRY8eHbNu+t
DUEwHwYDVR0jBBgwFoAURTWK6ARqnZkz8rktUc5PrtasIh8wEgYDVR0TAQH/BAgw
BgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAGqaGBuL
2J6Na8RHx/GmSeuZFiVcWhmd/I9bVpeMSYHSZujA2nay6OGaUYs0Lq/G5OKgsuT9
AIHnsn7VUE1zqoDfXac/K8sXlOig8if7rTb+06jgymaP1YSELg3R+pBsdkZnXVil
izh/9FvzoyV+QQlIhojqCIybVFgxa1XFHq4QCPhDfwkg+tp9RctfwNmWgsJ63H19
RmxN+H2xIrySvObwXnB4j6D4wvgu468QXQMEuSsnLcIQFg6Zteqe8fixbqTiOTBf
Dk1k+EpB9VMEkIPvMdfa48vseXdBEe6Ma9zGuJC76q4q1ZapVLTvOUP5Y24khlgd
cj5tfP7o7yc6HqymfXAcD1lzP2JQhqaRxA4I18Nrd+aHi+G1EM2c3cicuD3n6Iw9
9oqdCwmMfS25fv5cyA5B6hRusIZ9wRopTi7at+JHl0GIt/FelaTYI7kRmAqgakQe
oEKLpXcH8lRJW802DmXm7ka4eQzwxa7Ngyf8O+JOFtGO0+EshuLJovxiPl6IyLyG
NJ/dHq3ad+46YVManbHdyjHxgT5PSvJFkq0Yluvf44NIyP5QRTCAvfH76bu7hXgS
QoQj5t5ILn6meQRTR79r2iwpQTanPLTEdoZvmrE4TeUBev9BA5KpiPPA3i3ZF/oV
0EYorXCNri7M/jylGW7AuWvNUyaVR6xgxAn6
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFujCCA6KgAwIBAgIJAKhPL9BkNaFGMA0GCSqGSIb3DQEBCwUAMGoxEjAQBgNV
BAMMCVZlY3RvciBDQTEPMA0GA1UECwwGVmVjdG9yMRAwDgYDVQQKDAdEYXRhZG9n
MREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwITmV3IFlvcmsxCzAJBgNVBAYT
AlVTMB4XDTIyMDYwNzIyMjc1MloXDTQyMDYwMjIyMjc1MlowajESMBAGA1UEAwwJ
VmVjdG9yIENBMQ8wDQYDVQQLDAZWZWN0b3IxEDAOBgNVBAoMB0RhdGFkb2cxETAP
BgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazELMAkGA1UEBhMCVVMw
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9c1T+NXTNmqiiV36NSEJt
7mo0cyv8Byk2ZGdC85vHBm45QDY5USoh0vgonzPpWgSMggPn1WbR0f1y+LBwXdlM
+ZyZh2RVVeUrSjJ88lLHVn4DfywpdDkwQaFj1VmOsj2I9rMMrgc5x5n1Hj7lwZ+t
uPVSAGmgKp4iFfzLph9r/rjP1TUAnVUComfTUVS+Gd7zoGPOc14cMJXG6g2P2aAU
P6dg5uQlTxRmagnlx7bwm3lRwv6LMtnAdnjwBDBxr933nucAnk21GgE92GejiO3Z
OwlzIdzBI23lPcWi5pq+vCTgAArNq24W1Ha+7Jn5QewNTGKFyyYAJetZAwCUR8QS
Ip++2GE2pNhaGqcV5u1Tbwl02eD6p2qRqjfgLxmb+aC6xfl0n9kiFGPZppjCqDEW
sw+gX66nf+qxZVRWpJon2kWcFvhTnLqoa3T3+9+KIeamz2lW6wxMnki/Co2EA1Wa
mmedaUUcRPCgMx9aCktRkMyH6bEY8/vfJ07juxUsszOc46T00Scmn6Vkuo9Uc3Kf
2Q2N6Wo4jtyAiMO4gAwq5kzzpBAhNgRfLHOb83r2gAUj2Y4Vln/UUR/KR8ZbJi4i
r1BjX16Lz3yblJXXb1lp4uZynlbHNaAevXyGlRqHddM2ykKtAX/vgJcZRGSvms11
uce/cqzrzx60AhpLRma5CwIDAQABo2MwYTAdBgNVHQ4EFgQURTWK6ARqnZkz8rkt
Uc5PrtasIh8wHwYDVR0jBBgwFoAURTWK6ARqnZkz8rktUc5PrtasIh8wDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAEf5
TR3hq/DtSAmsYotu1lAWz/OlTpG+7AdqSOHB878X4ETN3xaQ+KWvSwvf0K70ZDTV
tFOTh/r43cpzPifPKd1P+2ctnQEzrBtAacvyETLq1ABRK9VJOtfJ6Xk5KZXPhKdY
t353PQgBgW8YzQ2adq2B7FtgIlX7f1DIndjcMZBbolETR6xt9QwB/UnPI7Mwt01T
+bCBhr1fWAbZ4YAMlQ0xRam4qUOTjxgfmePrmSrv4HO7cXHMsRMLiXk+BLcx959/
K/B6xzpzn6366Eqnqlo/uDiMpo5ud2I/Snz5PduB6oLztPMEf/8RmkG5tpHXYdWr
tM64WqNGO+ikluIrrtYvtyZS4DfsLAMfMYZcxX/Uw56gHo0i2c8I6+6JvGWdvOJ0
FjrsKeIQoRlV77z025kI4V9jKi3XNMEsAIH+W7KNSut0X80yX7SugvQGoe0GDkXu
0fy8hMC3uTN2LEycYFRRfoIeKPLi6OZFK0PdS2E15d8PEU3n3W4eBCPgMtmiOKLY
d8QNBC8XLAuBoK9R8luCJpOJWUcFXjLpjcDab4V2hKTuAs+GQyDh/Xx4wF1yHX0r
zIkyN0EkOD/SvD8X4uFaM4mdsAh+ucn4ryUV7i5PgvDM9z4InHAMAee1ebBl0U+h
+NzMWF5c5OwxD5o6/Wh1HopmzJiVNT2v9u0kHT/f
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFjjCCA3agAwIBAgICEAowDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCVVMx
ETAPBgNVBAgMCE5ldyBZb3JrMRAwDgYDVQQKDAdEYXRhZG9nMQ8wDQYDVQQLDAZW
ZWN0b3IxJjAkBgNVBAMMHVZlY3RvciBJbnRlcm1lZGlhdGUgU2VydmVyIENBMB4X
DTI2MDQwOTE5MjU0M1oXDTM2MDQwNjE5MjU0M1owcjELMAkGA1UEBhMCVVMxETAP
BgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEQMA4GA1UECgwHRGF0
YWRvZzEPMA0GA1UECwwGVmVjdG9yMRowGAYDVQQDDBFvcGVuc2VhcmNoLXNlY3Vy
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM0RfZCpkjHw7iE3QoPD
L96COa6k1mxeWT+f/y6oc/BfGb0PHjQwxbVLdtoGpDPDha+PQUjZRtTSe2RicFSm
CN4QGMUUqRAs7sEVKWLibg9Sc7sftXJbTqNw7rB9rTIeSoqlVGCsJLok6iVsfX4L
dmHjMTrPA2PLWKqkQKAFccE8uY6uxWO77ohTy4DTUT5tRZpkGGJNohBiXtZg0UIE
wgH/aS2SzC7hXxniwgZCQ64l0yD2x43kdlPu+F3p0meyhQ2SUDnm0QrGkZqQ4X31
iYim5tGoXR1m/NOtX4YSifX74W/PTrn7GpxCRvyyeLxsSl+Tr9B4yVOrZx3EDUtr
4E0CAwEAAaOCATMwggEvMAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMG
CWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNh
dGUwHQYDVR0OBBYEFIn3xriMRcm2mwj3p6oyQ4K2pmGWMIGVBgNVHSMEgY0wgYqA
FDw9Oi/M1YIDfZnEWPHh2zbvrQ1BoW6kbDBqMRIwEAYDVQQDDAlWZWN0b3IgQ0Ex
DzANBgNVBAsMBlZlY3RvcjEQMA4GA1UECgwHRGF0YWRvZzERMA8GA1UECAwITmV3
IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMQswCQYDVQQGEwJVU4ICEAAwDgYDVR0P
AQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4IC
AQBRU9BpRpnLefDFYb6+7Aen9ceO6WY9DPggRDn9MxtzW6a5XgIYPVxax5w2vjbv
AbX60dgP/5WqIciTty3D/vvmRbqTrAqwFCkZqSGTDQcggO9WBHgujocoyeoskIVw
iEzrie6Ae34R+QrTFcLmR9QVeJzaszuPT+iU5TLFudbWxIUM+vx1l5dv5R0ZNctO
461Fovz7cX3sIBj4LVhzJ0Cf0oJBkcfR3QQYsj8euc0XODyTP1wqWeh+09/7NP+f
daCyGes8nZmb2c5uPwpA2avSFMC7hdn7iF92kLCSczc8ZRIqX+TuD9lBEpWyaqLi
tNn5XRKsdTEOftBO+kjgZQDJpPHTszdWi7ZUNypHOx3ZZZBB9l/vbaKM1f6GssNv
LsbNuYeAT+nrydJ0DIyCtsYpTAVp6e6zHpCvx6MIg70oWeexI6QyfafF+0+568KB
ABecFyAp+GuXQIDpu/mTlV0ejxJrBUIecbc7XD2g5IPkTT/PF8rHqka9mlchV/69
KzIDVFXjcsBv3lLWM4/ztR6ujIxn/FEhdMP3XF4BR+HQXJ4oKJafr5BBlugJV/Ka
7f9FQMTBO+9b2fx5bK0QoVjlD4RY88fH3UBf5nsAtDrc2fzS8GUWV7A3mOmXf3Qp
/8RE3Q/Q4GNqcN4QQ02yM2ILH5G76WmuwEaIJTXSxS1wmg==
-----END CERTIFICATE-----
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFjjCCA3agAwIBAgICEAowDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCVVMx
ETAPBgNVBAgMCE5ldyBZb3JrMRAwDgYDVQQKDAdEYXRhZG9nMQ8wDQYDVQQLDAZW
ZWN0b3IxJjAkBgNVBAMMHVZlY3RvciBJbnRlcm1lZGlhdGUgU2VydmVyIENBMB4X
DTI2MDQwOTE5MjU0M1oXDTM2MDQwNjE5MjU0M1owcjELMAkGA1UEBhMCVVMxETAP
BgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEQMA4GA1UECgwHRGF0
YWRvZzEPMA0GA1UECwwGVmVjdG9yMRowGAYDVQQDDBFvcGVuc2VhcmNoLXNlY3Vy
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM0RfZCpkjHw7iE3QoPD
L96COa6k1mxeWT+f/y6oc/BfGb0PHjQwxbVLdtoGpDPDha+PQUjZRtTSe2RicFSm
CN4QGMUUqRAs7sEVKWLibg9Sc7sftXJbTqNw7rB9rTIeSoqlVGCsJLok6iVsfX4L
dmHjMTrPA2PLWKqkQKAFccE8uY6uxWO77ohTy4DTUT5tRZpkGGJNohBiXtZg0UIE
wgH/aS2SzC7hXxniwgZCQ64l0yD2x43kdlPu+F3p0meyhQ2SUDnm0QrGkZqQ4X31
iYim5tGoXR1m/NOtX4YSifX74W/PTrn7GpxCRvyyeLxsSl+Tr9B4yVOrZx3EDUtr
4E0CAwEAAaOCATMwggEvMAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMG
CWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNh
dGUwHQYDVR0OBBYEFIn3xriMRcm2mwj3p6oyQ4K2pmGWMIGVBgNVHSMEgY0wgYqA
FDw9Oi/M1YIDfZnEWPHh2zbvrQ1BoW6kbDBqMRIwEAYDVQQDDAlWZWN0b3IgQ0Ex
DzANBgNVBAsMBlZlY3RvcjEQMA4GA1UECgwHRGF0YWRvZzERMA8GA1UECAwITmV3
IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMQswCQYDVQQGEwJVU4ICEAAwDgYDVR0P
AQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4IC
AQBRU9BpRpnLefDFYb6+7Aen9ceO6WY9DPggRDn9MxtzW6a5XgIYPVxax5w2vjbv
AbX60dgP/5WqIciTty3D/vvmRbqTrAqwFCkZqSGTDQcggO9WBHgujocoyeoskIVw
iEzrie6Ae34R+QrTFcLmR9QVeJzaszuPT+iU5TLFudbWxIUM+vx1l5dv5R0ZNctO
461Fovz7cX3sIBj4LVhzJ0Cf0oJBkcfR3QQYsj8euc0XODyTP1wqWeh+09/7NP+f
daCyGes8nZmb2c5uPwpA2avSFMC7hdn7iF92kLCSczc8ZRIqX+TuD9lBEpWyaqLi
tNn5XRKsdTEOftBO+kjgZQDJpPHTszdWi7ZUNypHOx3ZZZBB9l/vbaKM1f6GssNv
LsbNuYeAT+nrydJ0DIyCtsYpTAVp6e6zHpCvx6MIg70oWeexI6QyfafF+0+568KB
ABecFyAp+GuXQIDpu/mTlV0ejxJrBUIecbc7XD2g5IPkTT/PF8rHqka9mlchV/69
KzIDVFXjcsBv3lLWM4/ztR6ujIxn/FEhdMP3XF4BR+HQXJ4oKJafr5BBlugJV/Ka
7f9FQMTBO+9b2fx5bK0QoVjlD4RY88fH3UBf5nsAtDrc2fzS8GUWV7A3mOmXf3Qp
/8RE3Q/Q4GNqcN4QQ02yM2ILH5G76WmuwEaIJTXSxS1wmg==
-----END CERTIFICATE-----
1 change: 1 addition & 0 deletions tests/data/ca/intermediate_server/index.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ V 320731200837Z 1006 unknown /C=US/ST=New York/L=New York/O=Datadog/OU=Vector/C
V 330412000039Z 1007 unknown /C=US/ST=New York/L=New York/O=Datadog/OU=Vector/CN=rabbitmq
V 341228053159Z 1008 unknown /C=US/ST=New York/L=New York/O=Datadog/OU=Vector/CN=pulsar
V 360301205253Z 1009 unknown /C=US/ST=New York/L=New York/O=Datadog/OU=Vector/CN=azurite
V 360406192543Z 100A unknown /C=US/ST=New York/L=New York/O=Datadog/OU=Vector/CN=opensearch-secure
Loading
Loading