diff --git a/docs/resources/kibana_saved_object.md b/docs/resources/kibana_saved_object.md new file mode 100644 index 000000000..4e8020b7f --- /dev/null +++ b/docs/resources/kibana_saved_object.md @@ -0,0 +1,30 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "elasticstack_kibana_saved_object Resource - terraform-provider-elasticstack" +subcategory: "" +description: |- + Import a Kibana saved object +--- + +# elasticstack_kibana_saved_object (Resource) + +Import a Kibana saved object + + + + +## Schema + +### Required + +- `object` (String) Kibana object to import in JSON format + +### Optional + +- `space_id` (String) An identifier for the space. If space_id is not provided, the default space is used. + +### Read-Only + +- `id` (String) Extracted ID from the object +- `imported` (String) Kibana object imported. +- `type` (String) Extracted type from the object diff --git a/internal/kibana/saved_object/acc_test.go b/internal/kibana/saved_object/acc_test.go new file mode 100644 index 000000000..2ebff5988 --- /dev/null +++ b/internal/kibana/saved_object/acc_test.go @@ -0,0 +1,80 @@ +package saved_object_test + +import ( + "testing" + + "github.com/elastic/terraform-provider-elasticstack/internal/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccResourceSavedObject(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ProtoV6ProviderFactories: acctest.Providers, + Steps: []resource.TestStep{ + { + Config: testAccResourceSavedObjectCreate(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("elasticstack_kibana_saved_object.settings", "id", "f799de20-6ac7-4736-8aff-a0d20538053b"), + ), + }, + { + Config: testAccResourceSavedObjectUpdate(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("elasticstack_kibana_saved_object.settings", "id", "f799de20-6ac7-4736-8aff-a0d20538053b"), + ), + }, + { + Config: testAccResourceSavedObjectRecreate(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("elasticstack_kibana_saved_object.settings", "id", "f799de20-6ac7-4736-8aff-a0d20538053c"), + ), + }, + }, + }) +} + +func testAccResourceSavedObjectCreate() string { + return ` +provider "elasticstack" { + elasticsearch {} + kibana {} +} + +resource "elasticstack_kibana_saved_object" "settings" { + object = <<-EOT +{"attributes":{"controlGroupInput":{"chainingSystem":"HIERARCHICAL","controlStyle":"twoLine","ignoreParentSettingsJSON":"{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}","panelsJSON":"{\"8d2aec33-4ad2-4604-b59f-71ebe8a77b14\":{\"grow\":true,\"order\":0,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"8d2aec33-4ad2-4604-b59f-71ebe8a77b14\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"orchestrator.cluster.name\",\"title\":\"Cluster Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"bee5f46d-92a7-4e86-955f-85dac264e63e\":{\"grow\":true,\"order\":1,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"bee5f46d-92a7-4e86-955f-85dac264e63e\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"kubernetes.namespace\",\"title\":\"Namespace Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"76c282b7-0d22-4b01-a80e-18564417ba5e\":{\"grow\":true,\"order\":2,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"76c282b7-0d22-4b01-a80e-18564417ba5e\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"kubernetes.pod.name\",\"title\":\"Pod Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}","showApplySelections":false},"description":"Metrics about Pods","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"visualization\",\"gridData\":{\"h\":4,\"i\":\"bbad33a6-98aa-4af3-b604-fb997500ac18\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"bbad33a6-98aa-4af3-b604-fb997500ac18\",\"embeddableConfig\":{\"enhancements\":{\"dynamicActions\":{\"events\":[]}},\"savedVis\":{\"title\":\"\",\"description\":\"\",\"type\":\"markdown\",\"params\":{\"fontSize\":10,\"markdown\":\"[Kubernetes Overview](#/view/kubernetes-f4dc26db-1b53-4ea2-a78b-1bfab8ea267c), [Kubernetes Nodes](#/view/kubernetes-b945b7b0-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Pods](#/view/kubernetes-3d4d9290-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Deployments](#/view/kubernetes-5be46210-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes StatefulSets](#/view/kubernetes-21694370-bcb2-11ec-b64f-7dd6e8e82013), [Kubernetes DaemonSets](#/view/kubernetes-85879010-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes CronJobs](#/view/kubernetes-0a672d50-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Jobs](#/view/kubernetes-9bf990a0-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Volumes](#/view/kubernetes-3912d9a0-bcb2-11ec-b64f-7dd6e8e82013), [Kubernetes PV/PVC](#/view/kubernetes-dd081350-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Services](#/view/kubernetes-ff1b3850-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes API Server](#/view/kubernetes-d3bd9650-0c14-11ed-b760-5d1bccb47f56)\",\"openLinksInNewTab\":false},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}}}},\"title\":\"Kubernetes Dashboards [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"f19a6dd8-c70c-4df2-a761-4a994276c5ed\",\"w\":48,\"x\":0,\"y\":4},\"panelIndex\":\"f19a6dd8-c70c-4df2-a761-4a994276c5ed\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-307ec163-d913-4ce0-8e9b-6dfc777def59\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"f30047fb-d7fd-4873-9150-6e16c369fcc8\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"307ec163-d913-4ce0-8e9b-6dfc777def59\":{\"columnOrder\":[\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\",\"7b682fd2-3fd6-4834-8067-a546ab543764\",\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\",\"b1ecf062-bf74-4458-9598-2c7018cdae3d\"],\"columns\":{\"7b682fd2-3fd6-4834-8067-a546ab543764\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.phase: *\"},\"isBucketed\":false,\"label\":\"Phase\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.phase\"},\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Pod\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"fallback\":false,\"type\":\"alphabetical\"},\"orderDirection\":\"asc\",\"otherBucket\":true,\"parentFormat\":{\"id\":\"terms\"},\"size\":1000},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"},\"b1ecf062-bf74-4458-9598-2c7018cdae3d\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.scheduled: *\"},\"isBucketed\":false,\"label\":\"Scheduled\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.scheduled\"},\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.ready: *\"},\"isBucketed\":false,\"label\":\"Ready\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.ready\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"f30047fb-d7fd-4873-9150-6e16c369fcc8\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.state_pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.state_pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"collapseFn\":\"\",\"columnId\":\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\",\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"7b682fd2-3fd6-4834-8067-a546ab543764\",\"hidden\":false,\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\",\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"b1ecf062-bf74-4458-9598-2c7018cdae3d\",\"isTransposed\":false}],\"headerRowHeight\":\"single\",\"headerRowHeightLines\":1,\"layerId\":\"307ec163-d913-4ce0-8e9b-6dfc777def59\",\"layerType\":\"data\",\"paging\":{\"enabled\":true,\"size\":10},\"sorting\":{\"direction\":\"none\"}}},\"title\":\"Status per Pod [Metrics Kubernetes]\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Status per Pod [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"3318d1b2-4db2-4404-a1a5-36bb82b84d17\",\"w\":24,\"x\":0,\"y\":19},\"panelIndex\":\"3318d1b2-4db2-4404-a1a5-36bb82b84d17\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"9486d409-e044-43b7-a175-e25695e38cc4\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"CPU Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.cpu.usage.node.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"9486d409-e044-43b7-a175-e25695e38cc4\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"CPU Usage as Pct of the Total Node CPU [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"8684f652-8676-4b8b-ab63-07ba1a115dcf\",\"w\":24,\"x\":24,\"y\":19},\"panelIndex\":\"8684f652-8676-4b8b-ab63-07ba1a115dcf\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"CPU Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.cpu.usage.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"61027d7f-6398-4aec-b154-897b913481e4\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.limit.pct: *\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"CPU Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"767e60d6-4285-4129-b89d-8e629d056a94\",\"w\":24,\"x\":0,\"y\":34},\"panelIndex\":\"767e60d6-4285-4129-b89d-8e629d056a94\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"ace482cc-b33b-47c1-89b1-a710fe45195e\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.usage.node.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"ace482cc-b33b-47c1-89b1-a710fe45195e\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Memory Usage as Pct of the Total Node Memory [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"1faf5f4a-47c4-4592-a5f5-9d329e253bd2\",\"w\":24,\"x\":24,\"y\":34},\"panelIndex\":\"1faf5f4a-47c4-4592-a5f5-9d329e253bd2\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.usage.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"81de779f-3d8f-4f90-9a93-08ecf5d96939\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.memory.usage.limit.pct:*\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Memory Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"e2645b6c-83e0-4313-964f-4e419d510cdf\",\"w\":24,\"x\":0,\"y\":49},\"panelIndex\":\"e2645b6c-83e0-4313-964f-4e419d510cdf\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.working_set.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"9d74e7d3-0a1c-4c8b-8635-1577d74797f7\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.memory.working_set.limit.pct:*\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Working Set Memory Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"37c0dd73-12b1-4001-a6ec-f4286fad3ba9\",\"w\":24,\"x\":24,\"y\":49},\"panelIndex\":\"37c0dd73-12b1-4001-a6ec-f4286fad3ba9\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"710b0f49-b955-4cb8-826e-e51b3e6e7271\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Network Usage\",\"operationType\":\"last_value\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"sortField\":\"@timestamp\"},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.network.tx.bytes\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"710b0f49-b955-4cb8-826e-e51b3e6e7271\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Network Outgoing Bytes per Pod [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"ae35f1f6-8311-4e9d-866b-7674992735e5\",\"w\":24,\"x\":0,\"y\":64},\"panelIndex\":\"ae35f1f6-8311-4e9d-866b-7674992735e5\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"31f6a38e-250d-4a00-9f2a-af9c53aff800\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Network Usage\",\"operationType\":\"last_value\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"sortField\":\"@timestamp\"},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.network.rx.bytes\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"31f6a38e-250d-4a00-9f2a-af9c53aff800\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Network Incoming Bytes per Pod [Metrics Kubernetes]\"}]","timeRestore":false,"title":"Provider demo - [Metrics Kubernetes] Pods ","version":2},"coreMigrationVersion":"8.8.0","created_at":"2024-12-11T15:39:24.284Z","created_by":"u_1107982783_cloud","id":"f799de20-6ac7-4736-8aff-a0d20538053b","managed":false,"references":[{"id":"metrics-*","name":"f19a6dd8-c70c-4df2-a761-4a994276c5ed:indexpattern-datasource-layer-307ec163-d913-4ce0-8e9b-6dfc777def59","type":"index-pattern"},{"id":"metrics-*","name":"f19a6dd8-c70c-4df2-a761-4a994276c5ed:f30047fb-d7fd-4873-9150-6e16c369fcc8","type":"index-pattern"},{"id":"metrics-*","name":"3318d1b2-4db2-4404-a1a5-36bb82b84d17:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"3318d1b2-4db2-4404-a1a5-36bb82b84d17:9486d409-e044-43b7-a175-e25695e38cc4","type":"index-pattern"},{"id":"metrics-*","name":"8684f652-8676-4b8b-ab63-07ba1a115dcf:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"767e60d6-4285-4129-b89d-8e629d056a94:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"767e60d6-4285-4129-b89d-8e629d056a94:ace482cc-b33b-47c1-89b1-a710fe45195e","type":"index-pattern"},{"id":"metrics-*","name":"1faf5f4a-47c4-4592-a5f5-9d329e253bd2:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"e2645b6c-83e0-4313-964f-4e419d510cdf:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"37c0dd73-12b1-4001-a6ec-f4286fad3ba9:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"37c0dd73-12b1-4001-a6ec-f4286fad3ba9:710b0f49-b955-4cb8-826e-e51b3e6e7271","type":"index-pattern"},{"id":"metrics-*","name":"ae35f1f6-8311-4e9d-866b-7674992735e5:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"ae35f1f6-8311-4e9d-866b-7674992735e5:31f6a38e-250d-4a00-9f2a-af9c53aff800","type":"index-pattern"},{"id":"fleet-managed-default","name":"tag-ref-fleet-managed-default","type":"tag"},{"id":"fleet-pkg-kubernetes-default","name":"tag-ref-fleet-pkg-kubernetes-default","type":"tag"},{"id":"metrics-*","name":"controlGroup_8d2aec33-4ad2-4604-b59f-71ebe8a77b14:optionsListDataView","type":"index-pattern"},{"id":"metrics-*","name":"controlGroup_bee5f46d-92a7-4e86-955f-85dac264e63e:optionsListDataView","type":"index-pattern"},{"id":"metrics-*","name":"controlGroup_76c282b7-0d22-4b01-a80e-18564417ba5e:optionsListDataView","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"10.2.0","updated_at":"2024-12-11T15:39:24.284Z","updated_by":"u_1107982783_cloud","version":"WzIwMiwxXQ=="} +EOT +} + ` +} + +func testAccResourceSavedObjectUpdate() string { + return ` +provider "elasticstack" { + elasticsearch {} + kibana {} +} + +resource "elasticstack_kibana_saved_object" "settings" { + object = <<-EOT +{"attributes":{"controlGroupInput":{"chainingSystem":"HIERARCHICAL","controlStyle":"twoLine","ignoreParentSettingsJSON":"{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}","panelsJSON":"{\"8d2aec33-4ad2-4604-b59f-71ebe8a77b14\":{\"grow\":true,\"order\":0,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"8d2aec33-4ad2-4604-b59f-71ebe8a77b14\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"orchestrator.cluster.name\",\"title\":\"Cluster Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"bee5f46d-92a7-4e86-955f-85dac264e63e\":{\"grow\":true,\"order\":1,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"bee5f46d-92a7-4e86-955f-85dac264e63e\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"kubernetes.namespace\",\"title\":\"Namespace Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"76c282b7-0d22-4b01-a80e-18564417ba5e\":{\"grow\":true,\"order\":2,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"76c282b7-0d22-4b01-a80e-18564417ba5e\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"kubernetes.pod.name\",\"title\":\"Pod Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}","showApplySelections":false},"description":"Metrics about Pods","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"visualization\",\"gridData\":{\"h\":4,\"i\":\"bbad33a6-98aa-4af3-b604-fb997500ac18\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"bbad33a6-98aa-4af3-b604-fb997500ac18\",\"embeddableConfig\":{\"enhancements\":{\"dynamicActions\":{\"events\":[]}},\"savedVis\":{\"title\":\"\",\"description\":\"\",\"type\":\"markdown\",\"params\":{\"fontSize\":10,\"markdown\":\"[Kubernetes Overview](#/view/kubernetes-f4dc26db-1b53-4ea2-a78b-1bfab8ea267c), [Kubernetes Nodes](#/view/kubernetes-b945b7b0-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Pods](#/view/kubernetes-3d4d9290-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Deployments](#/view/kubernetes-5be46210-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes StatefulSets](#/view/kubernetes-21694370-bcb2-11ec-b64f-7dd6e8e82013), [Kubernetes DaemonSets](#/view/kubernetes-85879010-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes CronJobs](#/view/kubernetes-0a672d50-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Jobs](#/view/kubernetes-9bf990a0-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Volumes](#/view/kubernetes-3912d9a0-bcb2-11ec-b64f-7dd6e8e82013), [Kubernetes PV/PVC](#/view/kubernetes-dd081350-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Services](#/view/kubernetes-ff1b3850-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes API Server](#/view/kubernetes-d3bd9650-0c14-11ed-b760-5d1bccb47f56)\",\"openLinksInNewTab\":false},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}}}},\"title\":\"Kubernetes Dashboards [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"f19a6dd8-c70c-4df2-a761-4a994276c5ed\",\"w\":48,\"x\":0,\"y\":4},\"panelIndex\":\"f19a6dd8-c70c-4df2-a761-4a994276c5ed\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-307ec163-d913-4ce0-8e9b-6dfc777def59\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"f30047fb-d7fd-4873-9150-6e16c369fcc8\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"307ec163-d913-4ce0-8e9b-6dfc777def59\":{\"columnOrder\":[\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\",\"7b682fd2-3fd6-4834-8067-a546ab543764\",\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\",\"b1ecf062-bf74-4458-9598-2c7018cdae3d\"],\"columns\":{\"7b682fd2-3fd6-4834-8067-a546ab543764\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.phase: *\"},\"isBucketed\":false,\"label\":\"Phase\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.phase\"},\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Pod\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"fallback\":false,\"type\":\"alphabetical\"},\"orderDirection\":\"asc\",\"otherBucket\":true,\"parentFormat\":{\"id\":\"terms\"},\"size\":1000},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"},\"b1ecf062-bf74-4458-9598-2c7018cdae3d\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.scheduled: *\"},\"isBucketed\":false,\"label\":\"Scheduled\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.scheduled\"},\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.ready: *\"},\"isBucketed\":false,\"label\":\"Ready\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.ready\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"f30047fb-d7fd-4873-9150-6e16c369fcc8\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.state_pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.state_pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"collapseFn\":\"\",\"columnId\":\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\",\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"7b682fd2-3fd6-4834-8067-a546ab543764\",\"hidden\":false,\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\",\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"b1ecf062-bf74-4458-9598-2c7018cdae3d\",\"isTransposed\":false}],\"headerRowHeight\":\"single\",\"headerRowHeightLines\":1,\"layerId\":\"307ec163-d913-4ce0-8e9b-6dfc777def59\",\"layerType\":\"data\",\"paging\":{\"enabled\":true,\"size\":10},\"sorting\":{\"direction\":\"none\"}}},\"title\":\"Status per Pod [Metrics Kubernetes]\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Status per Pod [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"3318d1b2-4db2-4404-a1a5-36bb82b84d17\",\"w\":24,\"x\":0,\"y\":19},\"panelIndex\":\"3318d1b2-4db2-4404-a1a5-36bb82b84d17\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"9486d409-e044-43b7-a175-e25695e38cc4\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"CPU Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.cpu.usage.node.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"9486d409-e044-43b7-a175-e25695e38cc4\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"CPU Usage as Pct of the Total Node CPU [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"8684f652-8676-4b8b-ab63-07ba1a115dcf\",\"w\":24,\"x\":24,\"y\":19},\"panelIndex\":\"8684f652-8676-4b8b-ab63-07ba1a115dcf\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"CPU Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.cpu.usage.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"61027d7f-6398-4aec-b154-897b913481e4\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.limit.pct: *\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"CPU Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"767e60d6-4285-4129-b89d-8e629d056a94\",\"w\":24,\"x\":0,\"y\":34},\"panelIndex\":\"767e60d6-4285-4129-b89d-8e629d056a94\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"ace482cc-b33b-47c1-89b1-a710fe45195e\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.usage.node.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"ace482cc-b33b-47c1-89b1-a710fe45195e\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Memory Usage as Pct of the Total Node Memory [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"1faf5f4a-47c4-4592-a5f5-9d329e253bd2\",\"w\":24,\"x\":24,\"y\":34},\"panelIndex\":\"1faf5f4a-47c4-4592-a5f5-9d329e253bd2\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.usage.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"81de779f-3d8f-4f90-9a93-08ecf5d96939\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.memory.usage.limit.pct:*\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Memory Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"e2645b6c-83e0-4313-964f-4e419d510cdf\",\"w\":24,\"x\":0,\"y\":49},\"panelIndex\":\"e2645b6c-83e0-4313-964f-4e419d510cdf\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.working_set.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"9d74e7d3-0a1c-4c8b-8635-1577d74797f7\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.memory.working_set.limit.pct:*\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Working Set Memory Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"37c0dd73-12b1-4001-a6ec-f4286fad3ba9\",\"w\":24,\"x\":24,\"y\":49},\"panelIndex\":\"37c0dd73-12b1-4001-a6ec-f4286fad3ba9\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"710b0f49-b955-4cb8-826e-e51b3e6e7271\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Network Usage\",\"operationType\":\"last_value\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"sortField\":\"@timestamp\"},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.network.tx.bytes\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"710b0f49-b955-4cb8-826e-e51b3e6e7271\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Network Outgoing Bytes per Pod [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"ae35f1f6-8311-4e9d-866b-7674992735e5\",\"w\":24,\"x\":0,\"y\":64},\"panelIndex\":\"ae35f1f6-8311-4e9d-866b-7674992735e5\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"31f6a38e-250d-4a00-9f2a-af9c53aff800\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Network Usage\",\"operationType\":\"last_value\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"sortField\":\"@timestamp\"},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.network.rx.bytes\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"31f6a38e-250d-4a00-9f2a-af9c53aff800\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Network Incoming Bytes per Pod [Metrics Kubernetes]\"}]","timeRestore":false,"title":"Provider demo - [Metrics Kubernetes] Pods (updated)","version":2},"coreMigrationVersion":"8.8.0","created_at":"2024-12-11T15:39:24.284Z","created_by":"u_1107982783_cloud","id":"f799de20-6ac7-4736-8aff-a0d20538053b","managed":false,"references":[{"id":"metrics-*","name":"f19a6dd8-c70c-4df2-a761-4a994276c5ed:indexpattern-datasource-layer-307ec163-d913-4ce0-8e9b-6dfc777def59","type":"index-pattern"},{"id":"metrics-*","name":"f19a6dd8-c70c-4df2-a761-4a994276c5ed:f30047fb-d7fd-4873-9150-6e16c369fcc8","type":"index-pattern"},{"id":"metrics-*","name":"3318d1b2-4db2-4404-a1a5-36bb82b84d17:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"3318d1b2-4db2-4404-a1a5-36bb82b84d17:9486d409-e044-43b7-a175-e25695e38cc4","type":"index-pattern"},{"id":"metrics-*","name":"8684f652-8676-4b8b-ab63-07ba1a115dcf:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"767e60d6-4285-4129-b89d-8e629d056a94:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"767e60d6-4285-4129-b89d-8e629d056a94:ace482cc-b33b-47c1-89b1-a710fe45195e","type":"index-pattern"},{"id":"metrics-*","name":"1faf5f4a-47c4-4592-a5f5-9d329e253bd2:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"e2645b6c-83e0-4313-964f-4e419d510cdf:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"37c0dd73-12b1-4001-a6ec-f4286fad3ba9:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"37c0dd73-12b1-4001-a6ec-f4286fad3ba9:710b0f49-b955-4cb8-826e-e51b3e6e7271","type":"index-pattern"},{"id":"metrics-*","name":"ae35f1f6-8311-4e9d-866b-7674992735e5:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"ae35f1f6-8311-4e9d-866b-7674992735e5:31f6a38e-250d-4a00-9f2a-af9c53aff800","type":"index-pattern"},{"id":"fleet-managed-default","name":"tag-ref-fleet-managed-default","type":"tag"},{"id":"fleet-pkg-kubernetes-default","name":"tag-ref-fleet-pkg-kubernetes-default","type":"tag"},{"id":"metrics-*","name":"controlGroup_8d2aec33-4ad2-4604-b59f-71ebe8a77b14:optionsListDataView","type":"index-pattern"},{"id":"metrics-*","name":"controlGroup_bee5f46d-92a7-4e86-955f-85dac264e63e:optionsListDataView","type":"index-pattern"},{"id":"metrics-*","name":"controlGroup_76c282b7-0d22-4b01-a80e-18564417ba5e:optionsListDataView","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"10.2.0","updated_at":"2024-12-11T15:39:24.284Z","updated_by":"u_1107982783_cloud","version":"WzIwMiwxXQ=="} +EOT +} + ` +} + +func testAccResourceSavedObjectRecreate() string { + return ` +provider "elasticstack" { + elasticsearch {} + kibana {} +} + +resource "elasticstack_kibana_saved_object" "settings" { + object = <<-EOT +{"attributes":{"controlGroupInput":{"chainingSystem":"HIERARCHICAL","controlStyle":"twoLine","ignoreParentSettingsJSON":"{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}","panelsJSON":"{\"8d2aec33-4ad2-4604-b59f-71ebe8a77b14\":{\"grow\":true,\"order\":0,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"8d2aec33-4ad2-4604-b59f-71ebe8a77b14\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"orchestrator.cluster.name\",\"title\":\"Cluster Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"bee5f46d-92a7-4e86-955f-85dac264e63e\":{\"grow\":true,\"order\":1,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"bee5f46d-92a7-4e86-955f-85dac264e63e\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"kubernetes.namespace\",\"title\":\"Namespace Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"76c282b7-0d22-4b01-a80e-18564417ba5e\":{\"grow\":true,\"order\":2,\"type\":\"optionsListControl\",\"width\":\"medium\",\"explicitInput\":{\"id\":\"76c282b7-0d22-4b01-a80e-18564417ba5e\",\"dataViewId\":\"metrics-*\",\"fieldName\":\"kubernetes.pod.name\",\"title\":\"Pod Name\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}}}","showApplySelections":false},"description":"Metrics about Pods","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"visualization\",\"gridData\":{\"h\":4,\"i\":\"bbad33a6-98aa-4af3-b604-fb997500ac18\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"bbad33a6-98aa-4af3-b604-fb997500ac18\",\"embeddableConfig\":{\"enhancements\":{\"dynamicActions\":{\"events\":[]}},\"savedVis\":{\"title\":\"\",\"description\":\"\",\"type\":\"markdown\",\"params\":{\"fontSize\":10,\"markdown\":\"[Kubernetes Overview](#/view/kubernetes-f4dc26db-1b53-4ea2-a78b-1bfab8ea267c), [Kubernetes Nodes](#/view/kubernetes-b945b7b0-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Pods](#/view/kubernetes-3d4d9290-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Deployments](#/view/kubernetes-5be46210-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes StatefulSets](#/view/kubernetes-21694370-bcb2-11ec-b64f-7dd6e8e82013), [Kubernetes DaemonSets](#/view/kubernetes-85879010-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes CronJobs](#/view/kubernetes-0a672d50-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Jobs](#/view/kubernetes-9bf990a0-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Volumes](#/view/kubernetes-3912d9a0-bcb2-11ec-b64f-7dd6e8e82013), [Kubernetes PV/PVC](#/view/kubernetes-dd081350-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes Services](#/view/kubernetes-ff1b3850-bcb1-11ec-b64f-7dd6e8e82013), [Kubernetes API Server](#/view/kubernetes-d3bd9650-0c14-11ed-b760-5d1bccb47f56)\",\"openLinksInNewTab\":false},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}}}},\"title\":\"Kubernetes Dashboards [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"f19a6dd8-c70c-4df2-a761-4a994276c5ed\",\"w\":48,\"x\":0,\"y\":4},\"panelIndex\":\"f19a6dd8-c70c-4df2-a761-4a994276c5ed\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-307ec163-d913-4ce0-8e9b-6dfc777def59\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"f30047fb-d7fd-4873-9150-6e16c369fcc8\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"307ec163-d913-4ce0-8e9b-6dfc777def59\":{\"columnOrder\":[\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\",\"7b682fd2-3fd6-4834-8067-a546ab543764\",\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\",\"b1ecf062-bf74-4458-9598-2c7018cdae3d\"],\"columns\":{\"7b682fd2-3fd6-4834-8067-a546ab543764\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.phase: *\"},\"isBucketed\":false,\"label\":\"Phase\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.phase\"},\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Pod\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"fallback\":false,\"type\":\"alphabetical\"},\"orderDirection\":\"asc\",\"otherBucket\":true,\"parentFormat\":{\"id\":\"terms\"},\"size\":1000},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"},\"b1ecf062-bf74-4458-9598-2c7018cdae3d\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.scheduled: *\"},\"isBucketed\":false,\"label\":\"Scheduled\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.scheduled\"},\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\":{\"customLabel\":true,\"dataType\":\"string\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.status.ready: *\"},\"isBucketed\":false,\"label\":\"Ready\",\"operationType\":\"last_value\",\"params\":{\"sortField\":\"@timestamp\"},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.status.ready\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"f30047fb-d7fd-4873-9150-6e16c369fcc8\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.state_pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.state_pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"collapseFn\":\"\",\"columnId\":\"8c03fc54-6e2d-49ff-b294-bb80ae6a1a8e\",\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"7b682fd2-3fd6-4834-8067-a546ab543764\",\"hidden\":false,\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"e9919412-9d5f-4db8-96bf-ab35a7b11c87\",\"isTransposed\":false},{\"alignment\":\"right\",\"columnId\":\"b1ecf062-bf74-4458-9598-2c7018cdae3d\",\"isTransposed\":false}],\"headerRowHeight\":\"single\",\"headerRowHeightLines\":1,\"layerId\":\"307ec163-d913-4ce0-8e9b-6dfc777def59\",\"layerType\":\"data\",\"paging\":{\"enabled\":true,\"size\":10},\"sorting\":{\"direction\":\"none\"}}},\"title\":\"Status per Pod [Metrics Kubernetes]\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Status per Pod [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"3318d1b2-4db2-4404-a1a5-36bb82b84d17\",\"w\":24,\"x\":0,\"y\":19},\"panelIndex\":\"3318d1b2-4db2-4404-a1a5-36bb82b84d17\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"9486d409-e044-43b7-a175-e25695e38cc4\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"CPU Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.cpu.usage.node.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"9486d409-e044-43b7-a175-e25695e38cc4\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"CPU Usage as Pct of the Total Node CPU [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"8684f652-8676-4b8b-ab63-07ba1a115dcf\",\"w\":24,\"x\":24,\"y\":19},\"panelIndex\":\"8684f652-8676-4b8b-ab63-07ba1a115dcf\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"CPU Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.cpu.usage.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"61027d7f-6398-4aec-b154-897b913481e4\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.limit.pct: *\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"CPU Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"767e60d6-4285-4129-b89d-8e629d056a94\",\"w\":24,\"x\":0,\"y\":34},\"panelIndex\":\"767e60d6-4285-4129-b89d-8e629d056a94\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"ace482cc-b33b-47c1-89b1-a710fe45195e\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.usage.node.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"ace482cc-b33b-47c1-89b1-a710fe45195e\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Memory Usage as Pct of the Total Node Memory [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"1faf5f4a-47c4-4592-a5f5-9d329e253bd2\",\"w\":24,\"x\":24,\"y\":34},\"panelIndex\":\"1faf5f4a-47c4-4592-a5f5-9d329e253bd2\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.usage.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"81de779f-3d8f-4f90-9a93-08ecf5d96939\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.memory.usage.limit.pct:*\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Memory Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"e2645b6c-83e0-4313-964f-4e419d510cdf\",\"w\":24,\"x\":0,\"y\":49},\"panelIndex\":\"e2645b6c-83e0-4313-964f-4e419d510cdf\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"isBucketed\":false,\"label\":\"Memory Usage\",\"operationType\":\"average\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":2}}},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.memory.working_set.limit.pct\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"9d74e7d3-0a1c-4c8b-8635-1577d74797f7\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.memory.working_set.limit.pct:*\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"legendStats\":[\"currentAndLastValue\"],\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Working Set Memory Usage as Pct of the Defined Pod Limit [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"37c0dd73-12b1-4001-a6ec-f4286fad3ba9\",\"w\":24,\"x\":24,\"y\":49},\"panelIndex\":\"37c0dd73-12b1-4001-a6ec-f4286fad3ba9\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"710b0f49-b955-4cb8-826e-e51b3e6e7271\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Network Usage\",\"operationType\":\"last_value\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"sortField\":\"@timestamp\"},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.network.tx.bytes\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"710b0f49-b955-4cb8-826e-e51b3e6e7271\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Network Outgoing Bytes per Pod [Metrics Kubernetes]\"},{\"type\":\"lens\",\"gridData\":{\"h\":15,\"i\":\"ae35f1f6-8311-4e9d-866b-7674992735e5\",\"w\":24,\"x\":0,\"y\":64},\"panelIndex\":\"ae35f1f6-8311-4e9d-866b-7674992735e5\",\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"metrics-*\",\"name\":\"indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"type\":\"index-pattern\"},{\"id\":\"metrics-*\",\"name\":\"31f6a38e-250d-4a00-9f2a-af9c53aff800\",\"type\":\"index-pattern\"}],\"state\":{\"adHocDataViews\":{},\"datasourceStates\":{\"formBased\":{\"layers\":{\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\":{\"columnOrder\":[\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\",\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"columns\":{\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"kubernetes.pod.cpu.usage.node.pct: *\"},\"isBucketed\":false,\"label\":\"Network Usage\",\"operationType\":\"last_value\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"sortField\":\"@timestamp\"},\"scale\":\"ratio\",\"sourceField\":\"kubernetes.pod.network.rx.bytes\"},\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"dropPartials\":false,\"includeEmptyRows\":true,\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top 10 values of kubernetes.pod.name\",\"operationType\":\"terms\",\"params\":{\"accuracyMode\":false,\"missingBucket\":false,\"orderBy\":{\"columnId\":\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"kubernetes.pod.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"31f6a38e-250d-4a00-9f2a-af9c53aff800\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"kubernetes.pod\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"kubernetes.pod\"}}}],\"internalReferences\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":false,\"yRight\":true},\"curveType\":\"LINEAR\",\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"86e6d540-5fd3-483e-b1a1-b575a0a5ca9c\"],\"layerId\":\"921ae90c-bc32-4ce1-b4d0-bcaec7eb339a\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"area\",\"showGridlines\":false,\"splitAccessor\":\"ce13a463-7e39-46f6-8d0f-14c1f9e9a0d9\",\"xAccessor\":\"a83bd360-6bed-4bab-ac6c-82b8e473c2b0\"}],\"legend\":{\"isVisible\":true,\"legendSize\":\"large\",\"position\":\"right\"},\"preferredSeriesType\":\"area\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"valuesInLegend\":true}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Network Incoming Bytes per Pod [Metrics Kubernetes]\"}]","timeRestore":false,"title":"Provider demo - [Metrics Kubernetes] Pods (recreated)","version":2},"coreMigrationVersion":"8.8.0","created_at":"2024-12-11T15:39:24.284Z","created_by":"u_1107982783_cloud","id":"f799de20-6ac7-4736-8aff-a0d20538053c","managed":false,"references":[{"id":"metrics-*","name":"f19a6dd8-c70c-4df2-a761-4a994276c5ed:indexpattern-datasource-layer-307ec163-d913-4ce0-8e9b-6dfc777def59","type":"index-pattern"},{"id":"metrics-*","name":"f19a6dd8-c70c-4df2-a761-4a994276c5ed:f30047fb-d7fd-4873-9150-6e16c369fcc8","type":"index-pattern"},{"id":"metrics-*","name":"3318d1b2-4db2-4404-a1a5-36bb82b84d17:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"3318d1b2-4db2-4404-a1a5-36bb82b84d17:9486d409-e044-43b7-a175-e25695e38cc4","type":"index-pattern"},{"id":"metrics-*","name":"8684f652-8676-4b8b-ab63-07ba1a115dcf:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"767e60d6-4285-4129-b89d-8e629d056a94:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"767e60d6-4285-4129-b89d-8e629d056a94:ace482cc-b33b-47c1-89b1-a710fe45195e","type":"index-pattern"},{"id":"metrics-*","name":"1faf5f4a-47c4-4592-a5f5-9d329e253bd2:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"e2645b6c-83e0-4313-964f-4e419d510cdf:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"37c0dd73-12b1-4001-a6ec-f4286fad3ba9:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"37c0dd73-12b1-4001-a6ec-f4286fad3ba9:710b0f49-b955-4cb8-826e-e51b3e6e7271","type":"index-pattern"},{"id":"metrics-*","name":"ae35f1f6-8311-4e9d-866b-7674992735e5:indexpattern-datasource-layer-921ae90c-bc32-4ce1-b4d0-bcaec7eb339a","type":"index-pattern"},{"id":"metrics-*","name":"ae35f1f6-8311-4e9d-866b-7674992735e5:31f6a38e-250d-4a00-9f2a-af9c53aff800","type":"index-pattern"},{"id":"fleet-managed-default","name":"tag-ref-fleet-managed-default","type":"tag"},{"id":"fleet-pkg-kubernetes-default","name":"tag-ref-fleet-pkg-kubernetes-default","type":"tag"},{"id":"metrics-*","name":"controlGroup_8d2aec33-4ad2-4604-b59f-71ebe8a77b14:optionsListDataView","type":"index-pattern"},{"id":"metrics-*","name":"controlGroup_bee5f46d-92a7-4e86-955f-85dac264e63e:optionsListDataView","type":"index-pattern"},{"id":"metrics-*","name":"controlGroup_76c282b7-0d22-4b01-a80e-18564417ba5e:optionsListDataView","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"10.2.0","updated_at":"2024-12-11T15:39:24.284Z","updated_by":"u_1107982783_cloud","version":"WzIwMiwxXQ=="} +EOT +} + ` +} diff --git a/internal/kibana/saved_object/create.go b/internal/kibana/saved_object/create.go new file mode 100644 index 000000000..7ed4a70d7 --- /dev/null +++ b/internal/kibana/saved_object/create.go @@ -0,0 +1,51 @@ +package saved_object + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-framework/resource" +) + +func (r *Resource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { + var model ksoModelV0 + + resp.Diagnostics.Append(req.Config.Get(ctx, &model)...) + if resp.Diagnostics.HasError() { + return + } + + err := model.UpdateModelWithObject() + if err != nil { + resp.Diagnostics.AddError("failed to update model from object", err.Error()) + return + } + + kibanaClient, err := r.client.GetKibanaClient() + if err != nil { + resp.Diagnostics.AddError("unable to get kibana client", err.Error()) + return + } + + result, err := kibanaClient.KibanaSavedObject.Import([]byte(model.Imported.ValueString()), false, model.SpaceID.ValueString()) + if err != nil { + resp.Diagnostics.AddError("failed to import saved object", err.Error()) + return + } + + var success any + var ok bool + if success, ok = result["success"]; !ok { + resp.Diagnostics.AddError("failed to import saved object", "success key not found in response") + return + } + if success != true { + resp.Diagnostics.AddError("failed to import saved object", fmt.Sprintf("%v\n", result["errors"])) + return + } + + resp.Diagnostics.Append(resp.State.Set(ctx, model)...) + if resp.Diagnostics.HasError() { + return + } +} diff --git a/internal/kibana/saved_object/delete.go b/internal/kibana/saved_object/delete.go new file mode 100644 index 000000000..92a53cf1e --- /dev/null +++ b/internal/kibana/saved_object/delete.go @@ -0,0 +1,27 @@ +package saved_object + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/resource" +) + +func (r *Resource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { + var model ksoModelV0 + + resp.Diagnostics.Append(req.State.Get(ctx, &model)...) + if resp.Diagnostics.HasError() { + return + } + + kibanaClient, err := r.client.GetKibanaClient() + if err != nil { + resp.Diagnostics.AddError("unable to get kibana client", err.Error()) + return + } + + if err := kibanaClient.KibanaSavedObject.Delete(model.Type.ValueString(), model.ID.ValueString(), model.SpaceID.ValueString()); err != nil { + resp.Diagnostics.AddError("failed to delete saved object", err.Error()) + return + } +} diff --git a/internal/kibana/saved_object/model.go b/internal/kibana/saved_object/model.go new file mode 100644 index 000000000..09fc204cb --- /dev/null +++ b/internal/kibana/saved_object/model.go @@ -0,0 +1,57 @@ +package saved_object + +import ( + "encoding/json" + "errors" + + "github.com/hashicorp/terraform-plugin-framework/types" +) + +type ksoModelV0 struct { + ID types.String `tfsdk:"id"` + SpaceID types.String `tfsdk:"space_id"` + Object types.String `tfsdk:"object"` + Imported types.String `tfsdk:"imported"` + Type types.String `tfsdk:"type"` +} + +func (m *ksoModelV0) UpdateModelWithObject() error { + var object map[string]any + + err := json.Unmarshal([]byte(m.Object.ValueString()), &object) + if err != nil { + return err + } + + if objType, ok := object["type"]; ok { + m.Type = types.StringValue(objType.(string)) + } else { + return errors.New("missing 'type' field in JSON object") + } + + if objId, ok := object["id"]; ok { + m.ID = types.StringValue(objId.(string)) + } else { + return errors.New("missing 'id' field in JSON object") + } + + ksoRemoveUnwantedFields(object) + + imported, err := json.Marshal(object) + if err != nil { + return err + } + m.Imported = types.StringValue(string(imported)) + return nil +} + +func ksoRemoveUnwantedFields(object map[string]any) { + // remove fields carrying state + delete(object, "created_at") + delete(object, "created_by") + delete(object, "updated_at") + delete(object, "updated_by") + delete(object, "version") + delete(object, "migrationVersion") + delete(object, "namespaces") +} diff --git a/internal/kibana/saved_object/modifyplan.go b/internal/kibana/saved_object/modifyplan.go new file mode 100644 index 000000000..d0a26bda0 --- /dev/null +++ b/internal/kibana/saved_object/modifyplan.go @@ -0,0 +1,31 @@ +package saved_object + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" +) + +func (r *Resource) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { + var configData ksoModelV0 + + if req.Plan.Raw.IsNull() || req.State.Raw.IsNull() { + return + } + + resp.Diagnostics.Append(req.Config.Get(ctx, &configData)...) + if resp.Diagnostics.HasError() { + return + } + + err := configData.UpdateModelWithObject() + if err != nil { + resp.Diagnostics.AddError("failed to update model from object", err.Error()) + return + } + + resp.Plan.SetAttribute(ctx, path.Root("id"), configData.ID) + resp.Plan.SetAttribute(ctx, path.Root("type"), configData.Type) + resp.Plan.SetAttribute(ctx, path.Root("imported"), configData.Imported) +} diff --git a/internal/kibana/saved_object/read.go b/internal/kibana/saved_object/read.go new file mode 100644 index 000000000..eca1f2b84 --- /dev/null +++ b/internal/kibana/saved_object/read.go @@ -0,0 +1,45 @@ +package saved_object + +import ( + "context" + "encoding/json" + + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/types" +) + +func (r *Resource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { + var model ksoModelV0 + + resp.Diagnostics.Append(req.State.Get(ctx, &model)...) + if resp.Diagnostics.HasError() { + return + } + + kibanaClient, err := r.client.GetKibanaClient() + if err != nil { + resp.Diagnostics.AddError("unable to get kibana client", err.Error()) + return + } + + result, err := kibanaClient.KibanaSavedObject.Get(model.Type.ValueString(), model.ID.ValueString(), model.SpaceID.ValueString()) + if err != nil { + resp.Diagnostics.AddError("failed to get saved object", err.Error()) + return + } + + ksoRemoveUnwantedFields(result) + + object, err := json.Marshal(result) + if err != nil { + resp.Diagnostics.AddError("failed to marshal saved object", err.Error()) + return + } + + model.Imported = types.StringValue(string(object)) + + resp.Diagnostics.Append(resp.State.Set(ctx, model)...) + if resp.Diagnostics.HasError() { + return + } +} diff --git a/internal/kibana/saved_object/schema.go b/internal/kibana/saved_object/schema.go new file mode 100644 index 000000000..9ad266564 --- /dev/null +++ b/internal/kibana/saved_object/schema.go @@ -0,0 +1,80 @@ +package saved_object + +import ( + "context" + + "github.com/elastic/terraform-provider-elasticstack/internal/clients" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" +) + +// Ensure provider defined types fully satisfy framework interfaces +var _ resource.Resource = &Resource{} +var _ resource.ResourceWithConfigure = &Resource{} +var _ resource.ResourceWithModifyPlan = &Resource{} +var _ resource.ResourceWithConfigValidators = &Resource{} + +func (r *Resource) Schema(_ context.Context, _ resource.SchemaRequest, resp *resource.SchemaResponse) { + resp.Schema = schema.Schema{ + Description: "Import a Kibana saved object", + Attributes: map[string]schema.Attribute{ + "id": schema.StringAttribute{ + Computed: true, + MarkdownDescription: "Extracted ID from the object", + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + // This is needed as the user provided object cannot be cleaned up + // see https://discuss.hashicorp.com/t/using-modifyplan-with-a-custom-provider/47690 + // We thus store a copy of the object with some fields removed + "imported": schema.StringAttribute{ + Computed: true, + MarkdownDescription: "Kibana object imported.", + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + "space_id": schema.StringAttribute{ + Description: "An identifier for the space. If space_id is not provided, the default space is used.", + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "object": schema.StringAttribute{ + Description: "Kibana object to import in JSON format", + Required: true, + }, + "type": schema.StringAttribute{ + Computed: true, + MarkdownDescription: "Extracted type from the object", + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + }, + } +} + +type Resource struct { + client *clients.ApiClient +} + +func (r *Resource) Configure(ctx context.Context, request resource.ConfigureRequest, response *resource.ConfigureResponse) { + client, diags := clients.ConvertProviderData(request.ProviderData) + response.Diagnostics.Append(diags...) + r.client = client +} + +func (r *Resource) Metadata(ctx context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = request.ProviderTypeName + "_kibana_saved_object" +} + +func (r *Resource) ConfigValidators(context.Context) []resource.ConfigValidator { + return []resource.ConfigValidator{ + &KibanaSavedObjectValidator{}, + } +} diff --git a/internal/kibana/saved_object/update.go b/internal/kibana/saved_object/update.go new file mode 100644 index 000000000..a061bc0c3 --- /dev/null +++ b/internal/kibana/saved_object/update.go @@ -0,0 +1,45 @@ +package saved_object + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-framework/resource" +) + +func (r *Resource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { + var model ksoModelV0 + + resp.Diagnostics.Append(req.Plan.Get(ctx, &model)...) + if resp.Diagnostics.HasError() { + return + } + + kibanaClient, err := r.client.GetKibanaClient() + if err != nil { + resp.Diagnostics.AddError("unable to get kibana client", err.Error()) + return + } + + result, err := kibanaClient.KibanaSavedObject.Import([]byte(model.Imported.ValueString()), true, model.SpaceID.ValueString()) + if err != nil { + resp.Diagnostics.AddError("failed to import saved object", err.Error()) + return + } + + var success any + var ok bool + if success, ok = result["success"]; !ok { + resp.Diagnostics.AddError("failed to import saved object", "success key not found in response") + return + } + if success != true { + resp.Diagnostics.AddError("failed to import saved object", fmt.Sprintf("%v\n", result["errors"])) + return + } + + resp.Diagnostics.Append(resp.State.Set(ctx, model)...) + if resp.Diagnostics.HasError() { + return + } +} diff --git a/internal/kibana/saved_object/validate.go b/internal/kibana/saved_object/validate.go new file mode 100644 index 000000000..e215ecb7d --- /dev/null +++ b/internal/kibana/saved_object/validate.go @@ -0,0 +1,43 @@ +package saved_object + +import ( + "context" + "encoding/json" + + "github.com/hashicorp/terraform-plugin-framework/resource" +) + +// KibanaSavedObjectValidator is the underlying struct implementing ConflictsWith. +type KibanaSavedObjectValidator struct { +} + +func (v KibanaSavedObjectValidator) Description(ctx context.Context) string { + return v.MarkdownDescription(ctx) +} + +func (v KibanaSavedObjectValidator) MarkdownDescription(_ context.Context) string { + return "The Kibana object is must have a 'type' and 'id' field" +} + +func (v KibanaSavedObjectValidator) ValidateResource(ctx context.Context, req resource.ValidateConfigRequest, resp *resource.ValidateConfigResponse) { + var configData ksoModelV0 + + resp.Diagnostics.Append(req.Config.Get(ctx, &configData)...) + if resp.Diagnostics.HasError() { + return + } + + var object map[string]any + err := json.Unmarshal([]byte(configData.Object.ValueString()), &object) + if err != nil { + resp.Diagnostics.AddError("invalid JSON in object", err.Error()) + return + } + + if _, ok := object["type"]; !ok { + resp.Diagnostics.AddError("missing 'type' field in JSON object", "") + } + if _, ok := object["id"]; !ok { + resp.Diagnostics.AddError("missing 'id' field in JSON object", "") + } +} diff --git a/provider/plugin_framework.go b/provider/plugin_framework.go index 04752f129..0ce4f6ff0 100644 --- a/provider/plugin_framework.go +++ b/provider/plugin_framework.go @@ -18,6 +18,7 @@ import ( "github.com/elastic/terraform-provider-elasticstack/internal/fleet/server_host" "github.com/elastic/terraform-provider-elasticstack/internal/kibana/data_view" "github.com/elastic/terraform-provider-elasticstack/internal/kibana/import_saved_objects" + "github.com/elastic/terraform-provider-elasticstack/internal/kibana/saved_object" "github.com/elastic/terraform-provider-elasticstack/internal/kibana/spaces" "github.com/elastic/terraform-provider-elasticstack/internal/kibana/synthetics" "github.com/elastic/terraform-provider-elasticstack/internal/kibana/synthetics/private_location" @@ -90,6 +91,7 @@ func (p *Provider) Resources(ctx context.Context) []func() resource.Resource { return []func() resource.Resource{ func() resource.Resource { return &import_saved_objects.Resource{} }, data_view.NewResource, + func() resource.Resource { return &saved_object.Resource{} }, func() resource.Resource { return &private_location.Resource{} }, func() resource.Resource { return &index.Resource{} }, func() resource.Resource { return &synthetics.Resource{} },