From b395c4b4f02d33bb11d995da71e85bbee2b0dc31 Mon Sep 17 00:00:00 2001 From: Fabian Schlager Date: Tue, 28 May 2024 15:10:15 +0200 Subject: [PATCH] feat: support elasticsearch_data_stream for fluentd Signed-off-by: Fabian Schlager --- apis/fluentd/v1alpha1/plugins/output/es.go | 26 +- apis/fluentd/v1alpha1/plugins/output/types.go | 81 ++-- apis/fluentd/v1alpha1/plugins/params/const.go | 46 +- ...cluster-cfg-output-copy-es-data-stream.cfg | 52 +++ ...entd-cluster-cfg-output-es-data-stream.cfg | 24 + apis/fluentd/v1alpha1/tests/helper_test.go | 54 ++- apis/fluentd/v1alpha1/tests/tools.go | 69 +++ charts/fluent-operator/Chart.yaml | 4 +- .../fluentd.fluent.io_clusteroutputs.yaml | 206 +++++++++ .../crds/fluentd.fluent.io_outputs.yaml | 206 +++++++++ .../fluentd.fluent.io_clusteroutputs.yaml | 206 +++++++++ .../crd/bases/fluentd.fluent.io_outputs.yaml | 206 +++++++++ docs/plugins/fluentd/output/es.md | 23 +- docs/plugins/fluentd/output/types.md | 1 + manifests/setup/fluent-operator-crd.yaml | 412 ++++++++++++++++++ manifests/setup/setup.yaml | 412 ++++++++++++++++++ 16 files changed, 1967 insertions(+), 61 deletions(-) create mode 100644 apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-copy-es-data-stream.cfg create mode 100644 apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-es-data-stream.cfg diff --git a/apis/fluentd/v1alpha1/plugins/output/es.go b/apis/fluentd/v1alpha1/plugins/output/es.go index eca1dcadf..e9a7209b3 100644 --- a/apis/fluentd/v1alpha1/plugins/output/es.go +++ b/apis/fluentd/v1alpha1/plugins/output/es.go @@ -3,7 +3,7 @@ package output import "github.com/fluent/fluent-operator/v2/apis/fluentd/v1alpha1/plugins" // Elasticsearch defines the parameters for out_es output plugin -type Elasticsearch struct { +type ElasticsearchCommon struct { // The hostname of your Elasticsearch node (default: localhost). Host *string `json:"host,omitempty"` // The port number of your Elasticsearch node (default: 9200). @@ -21,12 +21,6 @@ type Elasticsearch struct { CloudId *plugins.Secret `json:"cloudId,omitempty"` // Authenticate towards Elastic Cloud using cloudAuth. CloudAuth *plugins.Secret `json:"cloudAuth,omitempty"` - // IndexName defines the placeholder syntax of Fluentd plugin API. See https://docs.fluentd.org/configuration/buffer-section. - IndexName *string `json:"indexName,omitempty"` - // If true, Fluentd uses the conventional index name format logstash-%Y.%m.%d (default: false). This option supersedes the index_name option. - LogstashFormat *bool `json:"logstashFormat,omitempty"` - // LogstashPrefix defines the logstash prefix index name to write events when logstash_format is true (default: logstash). - LogstashPrefix *string `json:"logstashPrefix,omitempty"` // Optional, The login credentials to connect to Elasticsearch User *plugins.Secret `json:"user,omitempty"` // Optional, The login credentials to connect to Elasticsearch @@ -42,3 +36,21 @@ type Elasticsearch struct { // Optional, password for ClientKey file ClientKeyPassword *plugins.Secret `json:"clientKeyPassword,omitempty"` } + +type Elasticsearch struct { + ElasticsearchCommon `json:",inline"` + + // IndexName defines the placeholder syntax of Fluentd plugin API. See https://docs.fluentd.org/configuration/buffer-section. + IndexName *string `json:"indexName,omitempty"` + // If true, Fluentd uses the conventional index name format logstash-%Y.%m.%d (default: false). This option supersedes the index_name option. + LogstashFormat *bool `json:"logstashFormat,omitempty"` + // LogstashPrefix defines the logstash prefix index name to write events when logstash_format is true (default: logstash). + LogstashPrefix *string `json:"logstashPrefix,omitempty"` +} + +type ElasticsearchDataStream struct { + ElasticsearchCommon `json:",inline"` + + // You can specify Elasticsearch data stream name by this parameter. This parameter is mandatory for elasticsearch_data_stream + DataStreamName *string `json:"dataStreamName"` +} diff --git a/apis/fluentd/v1alpha1/plugins/output/types.go b/apis/fluentd/v1alpha1/plugins/output/types.go index 3797e1008..e7bf28186 100644 --- a/apis/fluentd/v1alpha1/plugins/output/types.go +++ b/apis/fluentd/v1alpha1/plugins/output/types.go @@ -34,6 +34,8 @@ type Output struct { Http *Http `json:"http,omitempty"` // out_es plugin Elasticsearch *Elasticsearch `json:"elasticsearch,omitempty"` + // out_es datastreams plugin + ElasticsearchDataStream *ElasticsearchDataStream `json:"elasticsearchDataStream,omitempty"` // out_opensearch plugin Opensearch *Opensearch `json:"opensearch,omitempty"` // out_kafka plugin @@ -135,6 +137,11 @@ func (o *Output) Params(loader plugins.SecretLoader) (*params.PluginStore, error return o.elasticsearchPlugin(ps, loader) } + if o.ElasticsearchDataStream != nil { + ps.InsertType(string(params.ElasticsearchDataStreamOutputType)) + return o.elasticsearchDataStreamPlugin(ps, loader) + } + if o.Opensearch != nil { ps.InsertType(string(params.OpensearchOutputType)) return o.opensearchPlugin(ps, loader) @@ -383,65 +390,75 @@ func (o *Output) httpPlugin(parent *params.PluginStore, loader plugins.SecretLoa return parent } -func (o *Output) elasticsearchPlugin(parent *params.PluginStore, loader plugins.SecretLoader) (*params.PluginStore, error) { - if o.Elasticsearch.Host != nil { - parent.InsertPairs("host", fmt.Sprint(*o.Elasticsearch.Host)) +func (o *Output) elasticsearchPluginCommon(common *ElasticsearchCommon, parent *params.PluginStore, loader plugins.SecretLoader) (*params.PluginStore, error) { + if common.Host != nil { + parent.InsertPairs("host", fmt.Sprint(*common.Host)) } - if o.Elasticsearch.Port != nil { - parent.InsertPairs("port", fmt.Sprint(*o.Elasticsearch.Port)) + if common.Port != nil { + parent.InsertPairs("port", fmt.Sprint(*common.Port)) } - if o.Elasticsearch.Hosts != nil { - parent.InsertPairs("hosts", fmt.Sprint(*o.Elasticsearch.Hosts)) + if common.Hosts != nil { + parent.InsertPairs("hosts", fmt.Sprint(*common.Hosts)) } - if o.Elasticsearch.User != nil { - user, err := loader.LoadSecret(*o.Elasticsearch.User) + if common.User != nil { + user, err := loader.LoadSecret(*common.User) if err != nil { return nil, err } parent.InsertPairs("user", user) } - if o.Elasticsearch.Password != nil { - pwd, err := loader.LoadSecret(*o.Elasticsearch.Password) + if common.Password != nil { + pwd, err := loader.LoadSecret(*common.Password) if err != nil { return nil, err } parent.InsertPairs("password", pwd) } - if o.Elasticsearch.SslVerify != nil { - parent.InsertPairs("ssl_verify", fmt.Sprint(*o.Elasticsearch.SslVerify)) + if common.SslVerify != nil { + parent.InsertPairs("ssl_verify", fmt.Sprint(*common.SslVerify)) } - if o.Elasticsearch.CAFile != nil { - parent.InsertPairs("ca_file", fmt.Sprint(*o.Elasticsearch.CAFile)) + if common.CAFile != nil { + parent.InsertPairs("ca_file", fmt.Sprint(*common.CAFile)) } - if o.Elasticsearch.ClientCert != nil { - parent.InsertPairs("client_cert", fmt.Sprint(*o.Elasticsearch.ClientCert)) + if common.ClientCert != nil { + parent.InsertPairs("client_cert", fmt.Sprint(*common.ClientCert)) } - if o.Elasticsearch.ClientKey != nil { - parent.InsertPairs("client_key", fmt.Sprint(*o.Elasticsearch.ClientKey)) + if common.ClientKey != nil { + parent.InsertPairs("client_key", fmt.Sprint(*common.ClientKey)) } - if o.Elasticsearch.ClientKeyPassword != nil { - pwd, err := loader.LoadSecret(*o.Elasticsearch.ClientKeyPassword) + if common.ClientKeyPassword != nil { + pwd, err := loader.LoadSecret(*common.ClientKeyPassword) if err != nil { return nil, err } parent.InsertPairs("client_key_pass", pwd) } - if o.Elasticsearch.Scheme != nil { - parent.InsertPairs("scheme", fmt.Sprint(*o.Elasticsearch.Scheme)) + if common.Scheme != nil { + parent.InsertPairs("scheme", fmt.Sprint(*common.Scheme)) + } + + if common.Path != nil { + parent.InsertPairs("path", fmt.Sprint(*common.Path)) } - if o.Elasticsearch.Path != nil { - parent.InsertPairs("path", fmt.Sprint(*o.Elasticsearch.Path)) + return parent, nil +} + +func (o *Output) elasticsearchPlugin(parent *params.PluginStore, loader plugins.SecretLoader) (*params.PluginStore, error) { + + parent, err := o.elasticsearchPluginCommon(&o.Elasticsearch.ElasticsearchCommon, parent, loader) + if err != nil { + return nil, err } if o.Elasticsearch.IndexName != nil { @@ -459,6 +476,20 @@ func (o *Output) elasticsearchPlugin(parent *params.PluginStore, loader plugins. return parent, nil } +func (o *Output) elasticsearchDataStreamPlugin(parent *params.PluginStore, loader plugins.SecretLoader) (*params.PluginStore, error) { + + parent, err := o.elasticsearchPluginCommon(&o.ElasticsearchDataStream.ElasticsearchCommon, parent, loader) + if err != nil { + return nil, err + } + + if o.ElasticsearchDataStream.DataStreamName != nil { + parent.InsertPairs("data_stream_name", fmt.Sprint(*o.ElasticsearchDataStream.DataStreamName)) + } + + return parent, nil +} + func (o *Output) opensearchPlugin(parent *params.PluginStore, loader plugins.SecretLoader) (*params.PluginStore, error) { if o.Opensearch.Host != nil { parent.InsertPairs("host", fmt.Sprint(*o.Opensearch.Host)) diff --git a/apis/fluentd/v1alpha1/plugins/params/const.go b/apis/fluentd/v1alpha1/plugins/params/const.go index 63f91cd76..a449819cb 100644 --- a/apis/fluentd/v1alpha1/plugins/params/const.go +++ b/apis/fluentd/v1alpha1/plugins/params/const.go @@ -25,17 +25,18 @@ const ( ParserPlugin PluginName = "parser" StdoutPlugin PluginName = "stdout" - ReLabelPlugin PluginName = "relabel" - LabelPlugin PluginName = "label" - LabelRouterPlugin PluginName = "label_router" - S3Plugin PluginName = "s3" - KafkaPlugin PluginName = "kafka2" - ElasticsearchPlugin PluginName = "elasticsearch" - OpensearchPlugin PluginName = "opensearch" - MatchPlugin PluginName = "match" - BufferPlugin PluginName = "buffer" - CloudWatchPlugin PluginName = "cloudwatch_logs" - DatadogPlugin PluginName = "datadog" + ReLabelPlugin PluginName = "relabel" + LabelPlugin PluginName = "label" + LabelRouterPlugin PluginName = "label_router" + S3Plugin PluginName = "s3" + KafkaPlugin PluginName = "kafka2" + ElasticsearchPlugin PluginName = "elasticsearch" + ElasticsearchDataStreamPlugin PluginName = "elasticsearch_data_stream" + OpensearchPlugin PluginName = "opensearch" + MatchPlugin PluginName = "match" + BufferPlugin PluginName = "buffer" + CloudWatchPlugin PluginName = "cloudwatch_logs" + DatadogPlugin PluginName = "datadog" BufferTag string = "tag" LabelTag string = "tag" @@ -60,17 +61,18 @@ const ( StdoutFilterType FilterType = "stdout" // Enums the supported output types - ForwardOutputType OutputType = "forward" - HttpOutputType OutputType = "http" - StdOutputType OutputType = "stdout" - KafkaOutputType OutputType = "kafka2" - ElasticsearchOutputType OutputType = "elasticsearch" - OpensearchOutputType OutputType = "opensearch" - S3OutputType OutputType = "s3" - LokiOutputType OutputType = "loki" - CloudWatchOutputType OutputType = "cloudwatch_logs" - DatadogOutputType OutputType = "datadog" - CopyOutputType OutputType = "copy" + ForwardOutputType OutputType = "forward" + HttpOutputType OutputType = "http" + StdOutputType OutputType = "stdout" + KafkaOutputType OutputType = "kafka2" + ElasticsearchOutputType OutputType = "elasticsearch" + ElasticsearchDataStreamOutputType OutputType = "elasticsearch_data_stream" + OpensearchOutputType OutputType = "opensearch" + S3OutputType OutputType = "s3" + LokiOutputType OutputType = "loki" + CloudWatchOutputType OutputType = "cloudwatch_logs" + DatadogOutputType OutputType = "datadog" + CopyOutputType OutputType = "copy" ) var ( diff --git a/apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-copy-es-data-stream.cfg b/apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-copy-es-data-stream.cfg new file mode 100644 index 000000000..478eeb7e4 --- /dev/null +++ b/apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-copy-es-data-stream.cfg @@ -0,0 +1,52 @@ + + @type forward + bind 0.0.0.0 + port 24224 + + + @id main + @type label_router + + @label @a2170d34e9940ec56d328100e375c43e + + namespaces default,kube-system + + + + \ No newline at end of file diff --git a/apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-es-data-stream.cfg b/apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-es-data-stream.cfg new file mode 100644 index 000000000..29d31c623 --- /dev/null +++ b/apis/fluentd/v1alpha1/tests/expected/fluentd-cluster-cfg-output-es-data-stream.cfg @@ -0,0 +1,24 @@ + + @type forward + bind 0.0.0.0 + port 24224 + + + @id main + @type label_router + + @label @a2170d34e9940ec56d328100e375c43e + + namespaces default,kube-system + + + + \ No newline at end of file diff --git a/apis/fluentd/v1alpha1/tests/helper_test.go b/apis/fluentd/v1alpha1/tests/helper_test.go index bba1b7712..13332a1d2 100644 --- a/apis/fluentd/v1alpha1/tests/helper_test.go +++ b/apis/fluentd/v1alpha1/tests/helper_test.go @@ -131,7 +131,6 @@ func Test_ClusterCfgOutput2ES(t *testing.T) { i := 0 for i < maxRuntimes { config, errs := psr.RenderMainConfig(false) - fmt.Println(config) g.Expect(errs).NotTo(HaveOccurred()) g.Expect(string(getExpectedCfg("./expected/fluentd-cluster-cfg-output-es.cfg"))).To(Equal(config)) @@ -139,6 +138,59 @@ func Test_ClusterCfgOutput2ES(t *testing.T) { } } +func Test_ClusterCfgOutput2ESDataStream(t *testing.T) { + g := NewGomegaWithT(t) + sl := plugins.NewSecretLoader(nil, Fluentd.Namespace, logr.Logger{}) + + psr := fluentdv1alpha1.NewGlobalPluginResources("main") + psr.CombineGlobalInputsPlugins(sl, Fluentd.Spec.GlobalInputs) + + clustercfgRouter, err := psr.BuildCfgRouter(&FluentdClusterFluentdConfig1) + g.Expect(err).NotTo(HaveOccurred()) + clusterFilters := []fluentdv1alpha1.ClusterFilter{} + clusterOutputs := []fluentdv1alpha1.ClusterOutput{FluentdclusterOutput2ESDataStream} + clustercfgResources, _ := psr.PatchAndFilterClusterLevelResources(sl, FluentdClusterFluentdConfig1.GetCfgId(), []fluentdv1alpha1.ClusterInput{}, clusterFilters, clusterOutputs) + err = psr.WithCfgResources(*clustercfgRouter.Label, clustercfgResources) + g.Expect(err).NotTo(HaveOccurred()) + + // we should not see any permutations in serialized config + i := 0 + for i < maxRuntimes { + config, errs := psr.RenderMainConfig(false) + g.Expect(errs).NotTo(HaveOccurred()) + g.Expect(string(getExpectedCfg("./expected/fluentd-cluster-cfg-output-es-data-stream.cfg"))).To(Equal(config)) + + i++ + } +} + +func Test_ClusterCfgOutput2CopyESDataStream(t *testing.T) { + g := NewGomegaWithT(t) + sl := NewSecretLoader(logr.Logger{}, esCredentials) + + psr := fluentdv1alpha1.NewGlobalPluginResources("main") + psr.CombineGlobalInputsPlugins(sl, Fluentd.Spec.GlobalInputs) + + clustercfgRouter, err := psr.BuildCfgRouter(&FluentdClusterFluentdConfig1) + g.Expect(err).NotTo(HaveOccurred()) + clusterFilters := []fluentdv1alpha1.ClusterFilter{} + clusterOutputs := []fluentdv1alpha1.ClusterOutput{FluentdclusterOutput2CopyESDataStream} + clustercfgResources, _ := psr.PatchAndFilterClusterLevelResources(sl, FluentdClusterFluentdConfig1.GetCfgId(), []fluentdv1alpha1.ClusterInput{}, clusterFilters, clusterOutputs) + err = psr.IdentifyCopyAndPatchOutput(clustercfgResources) + err = psr.WithCfgResources(*clustercfgRouter.Label, clustercfgResources) + g.Expect(err).NotTo(HaveOccurred()) + + // we should not see any permutations in serialized config + i := 0 + for i < maxRuntimes { + config, errs := psr.RenderMainConfig(false) + g.Expect(errs).NotTo(HaveOccurred()) + g.Expect(string(getExpectedCfg("./expected/fluentd-cluster-cfg-output-copy-es-data-stream.cfg"))).To(Equal(config)) + + i++ + } +} + func Test_Cfg2OpenSearch(t *testing.T) { g := NewGomegaWithT(t) sl := plugins.NewSecretLoader(nil, Fluentd.Namespace, logr.Logger{}) diff --git a/apis/fluentd/v1alpha1/tests/tools.go b/apis/fluentd/v1alpha1/tests/tools.go index dcad8f515..5ce942547 100644 --- a/apis/fluentd/v1alpha1/tests/tools.go +++ b/apis/fluentd/v1alpha1/tests/tools.go @@ -367,6 +367,73 @@ spec: logstashPrefix: ks-logstash-log ` + FluentdclusterOutput2ESDataStream fluentdv1alpha1.ClusterOutput + FluentdclusterOutput2ESDataStreamRaw = ` +apiVersion: fluentd.fluent.io/v1alpha1 +kind: ClusterOutput +metadata: + name: fluentd-output-es + labels: + output.fluentd.fluent.io/enabled: "true" +spec: + outputs: + - elasticsearchDataStream: + host: elasticsearch-logging-data.kubesphere-logging-system.svc + port: 9200 + dataStreamName: test-ds +` + FluentdclusterOutput2CopyESDataStream fluentdv1alpha1.ClusterOutput + FluentdclusterOutput2CopyESDataStreamRaw = ` +apiVersion: fluentd.fluent.io/v1alpha1 +kind: ClusterOutput +metadata: + name: fluentd-output-es-copy +labels: + output.fluentd.fluent.io/enabled: "true" +spec: + outputs: + - copy: + copyMode: no_copy + - elasticsearchDataStream: + host: elasticsearch-logging-data.kubesphere-logging-system.svc + dataStreamName: es1-notag-1 + port: 9243 + scheme: https + sslVerify: false + user: + valueFrom: + secretKeyRef: + key: username + name: es-credentials + password: + valueFrom: + secretKeyRef: + key: password + name: es-credentials + buffer: + type: memory + flushMode: immediate + - elasticsearchDataStream: + host: elasticsearch-logging-data.kubesphere-logging-system.svc + dataStreamName: es1-notag-2 + port: 9243 + scheme: https + sslVerify: false + user: + valueFrom: + secretKeyRef: + key: username + name: es-credentials + password: + valueFrom: + secretKeyRef: + key: password + name: es-credentials + buffer: + type: memory + flushMode: immediate +` + FluentdOutput2ES1 fluentdv1alpha1.Output FluentdOutput2ES1Raw = ` apiVersion: fluentd.fluent.io/v1alpha1 @@ -971,6 +1038,8 @@ func init() { ParseIntoObject(FluentdClusterOutputBufferRaw, &FluentdClusterOutputBuffer) ParseIntoObject(FluentdClusterOutputMemoryBufferRaw, &FluentdClusterOutputMemoryBuffer) ParseIntoObject(FluentdclusterOutput2ESRaw, &FluentdclusterOutput2ES) + ParseIntoObject(FluentdclusterOutput2ESDataStreamRaw, &FluentdclusterOutput2ESDataStream) + ParseIntoObject(FluentdclusterOutput2CopyESDataStreamRaw, &FluentdclusterOutput2CopyESDataStream) ParseIntoObject(FluentdOutput2ES1Raw, &FluentdOutput2ES1) ParseIntoObject(FluentdOutput2ES2Raw, &FluentdOutput2ES2) ParseIntoObject(FluentdOutput2ES3Raw, &FluentdOutput2ES3) diff --git a/charts/fluent-operator/Chart.yaml b/charts/fluent-operator/Chart.yaml index c79d5c5f0..2f5cf5c9f 100644 --- a/charts/fluent-operator/Chart.yaml +++ b/charts/fluent-operator/Chart.yaml @@ -15,12 +15,12 @@ description: A Helm chart for Kubernetes # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 2.8.0 +version: 2.9.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 2.8.0 +appVersion: 2.9.0 dependencies: - name: fluent-bit-crds diff --git a/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_clusteroutputs.yaml b/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_clusteroutputs.yaml index ce1713fc5..2098a414f 100644 --- a/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_clusteroutputs.yaml +++ b/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_clusteroutputs.yaml @@ -765,6 +765,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: diff --git a/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_outputs.yaml b/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_outputs.yaml index 09dc988e1..dde16f778 100644 --- a/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_outputs.yaml +++ b/charts/fluent-operator/charts/fluentd-crds/crds/fluentd.fluent.io_outputs.yaml @@ -765,6 +765,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: diff --git a/config/crd/bases/fluentd.fluent.io_clusteroutputs.yaml b/config/crd/bases/fluentd.fluent.io_clusteroutputs.yaml index ce1713fc5..2098a414f 100644 --- a/config/crd/bases/fluentd.fluent.io_clusteroutputs.yaml +++ b/config/crd/bases/fluentd.fluent.io_clusteroutputs.yaml @@ -765,6 +765,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: diff --git a/config/crd/bases/fluentd.fluent.io_outputs.yaml b/config/crd/bases/fluentd.fluent.io_outputs.yaml index 09dc988e1..dde16f778 100644 --- a/config/crd/bases/fluentd.fluent.io_outputs.yaml +++ b/config/crd/bases/fluentd.fluent.io_outputs.yaml @@ -765,6 +765,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: diff --git a/docs/plugins/fluentd/output/es.md b/docs/plugins/fluentd/output/es.md index 28202f27a..8498c09e7 100644 --- a/docs/plugins/fluentd/output/es.md +++ b/docs/plugins/fluentd/output/es.md @@ -1,4 +1,4 @@ -# Elasticsearch +# ElasticsearchCommon Elasticsearch defines the parameters for out_es output plugin @@ -12,9 +12,6 @@ Elasticsearch defines the parameters for out_es output plugin | path | Path defines the REST API endpoint of Elasticsearch to post write requests (default: nil). | *string | | cloudId | Authenticate towards Elastic Cloud using CloudId. If set, cloudAuth must be set as well and host, port, user and password are ignored. | *[plugins.Secret](../secret.md) | | cloudAuth | Authenticate towards Elastic Cloud using cloudAuth. | *[plugins.Secret](../secret.md) | -| indexName | IndexName defines the placeholder syntax of Fluentd plugin API. See https://docs.fluentd.org/configuration/buffer-section. | *string | -| logstashFormat | If true, Fluentd uses the conventional index name format logstash-%Y.%m.%d (default: false). This option supersedes the index_name option. | *bool | -| logstashPrefix | LogstashPrefix defines the logstash prefix index name to write events when logstash_format is true (default: logstash). | *string | | user | Optional, The login credentials to connect to Elasticsearch | *[plugins.Secret](../secret.md) | | password | Optional, The login credentials to connect to Elasticsearch | *[plugins.Secret](../secret.md) | | sslVerify | Optional, Force certificate validation | *bool | @@ -22,3 +19,21 @@ Elasticsearch defines the parameters for out_es output plugin | clientCert | Optional, Absolute path to client Certificate file | *string | | clientKey | Optional, Absolute path to client private Key file | *string | | clientKeyPassword | Optional, password for ClientKey file | *[plugins.Secret](../secret.md) | +# Elasticsearch + + + + +| Field | Description | Scheme | +| ----- | ----------- | ------ | +| indexName | IndexName defines the placeholder syntax of Fluentd plugin API. See https://docs.fluentd.org/configuration/buffer-section. | *string | +| logstashFormat | If true, Fluentd uses the conventional index name format logstash-%Y.%m.%d (default: false). This option supersedes the index_name option. | *bool | +| logstashPrefix | LogstashPrefix defines the logstash prefix index name to write events when logstash_format is true (default: logstash). | *string | +# ElasticsearchDataStream + + + + +| Field | Description | Scheme | +| ----- | ----------- | ------ | +| dataStreamName | You can specify Elasticsearch data stream name by this parameter. This parameter is mandatory for elasticsearch_data_stream | *string | diff --git a/docs/plugins/fluentd/output/types.md b/docs/plugins/fluentd/output/types.md index df76ff5ec..af707e577 100644 --- a/docs/plugins/fluentd/output/types.md +++ b/docs/plugins/fluentd/output/types.md @@ -17,6 +17,7 @@ Output defines all available output plugins and their parameters | forward | out_forward plugin | *Forward | | http | out_http plugin | *Http | | elasticsearch | out_es plugin | *Elasticsearch | +| elasticsearchDataStream | out_es datastreams plugin | *ElasticsearchDataStream | | opensearch | out_opensearch plugin | *Opensearch | | kafka | out_kafka plugin | *Kafka2 | | s3 | out_s3 plugin | *S3 | diff --git a/manifests/setup/fluent-operator-crd.yaml b/manifests/setup/fluent-operator-crd.yaml index 2976128e3..e5c51e8b7 100644 --- a/manifests/setup/fluent-operator-crd.yaml +++ b/manifests/setup/fluent-operator-crd.yaml @@ -7663,6 +7663,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: @@ -32371,6 +32577,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: diff --git a/manifests/setup/setup.yaml b/manifests/setup/setup.yaml index 09a6ee9ae..2009574a8 100644 --- a/manifests/setup/setup.yaml +++ b/manifests/setup/setup.yaml @@ -7663,6 +7663,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: @@ -32371,6 +32577,212 @@ spec: type: object type: object type: object + elasticsearchDataStream: + description: out_es datastreams plugin + properties: + caFile: + description: Optional, Absolute path to CA certificate file + type: string + clientCert: + description: Optional, Absolute path to client Certificate + file + type: string + clientKey: + description: Optional, Absolute path to client private Key + file + type: string + clientKeyPassword: + description: Optional, password for ClientKey file + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudAuth: + description: Authenticate towards Elastic Cloud using cloudAuth. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + cloudId: + description: Authenticate towards Elastic Cloud using CloudId. + If set, cloudAuth must be set as well and host, port, + user and password are ignored. + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + dataStreamName: + description: You can specify Elasticsearch data stream name + by this parameter. This parameter is mandatory for elasticsearch_data_stream + type: string + host: + description: 'The hostname of your Elasticsearch node (default: + localhost).' + type: string + hosts: + description: Hosts defines a list of hosts if you want to + connect to more than one Elasticsearch nodes + type: string + password: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + path: + description: 'Path defines the REST API endpoint of Elasticsearch + to post write requests (default: nil).' + type: string + port: + description: 'The port number of your Elasticsearch node + (default: 9200).' + format: int32 + maximum: 65535 + minimum: 1 + type: integer + scheme: + description: 'Specify https if your Elasticsearch endpoint + supports SSL (default: http).' + type: string + sslVerify: + description: Optional, Force certificate validation + type: boolean + user: + description: Optional, The login credentials to connect + to Elasticsearch + properties: + valueFrom: + description: ValueSource defines how to find a value's + key. + properties: + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + type: object + required: + - dataStreamName + type: object format: description: format section properties: