internal/elasticsearch/cluster/cluster_info_data_source.go (143 lines of code) (raw):
package cluster
import (
"context"
"github.com/elastic/terraform-provider-elasticstack/internal/clients"
"github.com/elastic/terraform-provider-elasticstack/internal/clients/elasticsearch"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func DataSourceClusterInfo() *schema.Resource {
versionSchema := map[string]*schema.Schema{
"build_date": {
Description: "Build date.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"build_flavor": {
Description: "Build Flavor.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"build_hash": {
Description: "Short hash of the last git commit in this release.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"build_snapshot": {
Description: "Build Snapshot.",
Type: schema.TypeBool,
Computed: true,
Required: false,
},
"build_type": {
Description: "Build Type.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"lucene_version": {
Description: "Lucene Version.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"minimum_index_compatibility_version": {
Description: "Minium index compatibility version.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"minimum_wire_compatibility_version": {
Description: "Minium wire compatibility version.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"number": {
Description: "Elasticsearch version number.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
}
clusterInfoSchema := map[string]*schema.Schema{
"version": {
Description: "Contains statistics about the number of nodes selected by the request's node filters.",
Type: schema.TypeList,
Computed: true,
Required: false,
Elem: &schema.Resource{
Schema: versionSchema,
},
},
"cluster_name": {
Description: "Name of the cluster, based on the Cluster name setting setting.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"cluster_uuid": {
Description: "Unique identifier for the cluster.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"name": {
Description: "Name of the node.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
"tagline": {
Description: "Elasticsearh tag line.",
Type: schema.TypeString,
Computed: true,
Required: false,
},
}
return &schema.Resource{
Description: "Gets information about the Elastic cluster.",
ReadContext: dataSourceClusterInfoRead,
Schema: clusterInfoSchema,
}
}
func dataSourceClusterInfoRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client, diags := clients.NewApiClientFromSDKResource(d, meta)
if diags.HasError() {
return diags
}
info, diags := elasticsearch.GetClusterInfo(ctx, client)
if diags.HasError() {
return diags
}
d.SetId(info.ClusterUUID)
if err := d.Set("cluster_uuid", info.ClusterUUID); err != nil {
return diag.FromErr(err)
}
if err := d.Set("cluster_name", info.ClusterName); err != nil {
return diag.FromErr(err)
}
if err := d.Set("name", info.Name); err != nil {
return diag.FromErr(err)
}
if err := d.Set("tagline", info.Tagline); err != nil {
return diag.FromErr(err)
}
version := map[string]interface{}{}
version["build_date"] = info.Version.BuildDate.String()
version["build_flavor"] = info.Version.BuildFlavor
version["build_hash"] = info.Version.BuildHash
version["build_snapshot"] = info.Version.BuildSnapshot
version["build_type"] = info.Version.BuildType
version["lucene_version"] = info.Version.LuceneVersion
version["minimum_index_compatibility_version"] = info.Version.MinimumIndexCompatibilityVersion
version["minimum_wire_compatibility_version"] = info.Version.MinimumWireCompatibilityVersion
version["number"] = info.Version.Number
if err := d.Set("version", []interface{}{version}); err != nil {
return diag.FromErr(err)
}
return nil
}