Skip to content

Commit a1e0eb3

Browse files
committed
feat: add Chronicle NativeDashboard resource
1 parent f0681df commit a1e0eb3

3 files changed

Lines changed: 399 additions & 0 deletions

File tree

Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
# Copyright 2026 Google Inc.
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
#
6+
# http://www.apache.org/licenses/LICENSE-2.0
7+
#
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
14+
---
15+
name: NativeDashboard
16+
description: A configuration for a native dashboard within a Google SecOps (Chronicle) instance.
17+
references:
18+
guides:
19+
'Google SecOps Guides': 'https://cloud.google.com/chronicle/docs/secops/secops-overview'
20+
api: 'https://cloud.google.com/chronicle/docs/reference/rest/v1beta/projects.locations.instances.nativeDashboards'
21+
base_url: projects/{{project}}/locations/{{location}}/instances/{{instance}}/nativeDashboards
22+
self_link: 'projects/{{project}}/locations/{{location}}/instances/{{instance}}/nativeDashboards/{{dashboard_id}}'
23+
create_url: projects/{{project}}/locations/{{location}}/instances/{{instance}}/nativeDashboards
24+
id_format: 'projects/{{project}}/locations/{{location}}/instances/{{instance}}/nativeDashboards/{{dashboard_id}}'
25+
import_format:
26+
- projects/{{project}}/locations/{{location}}/instances/{{instance}}/nativeDashboards/{{dashboard_id}}
27+
28+
update_mask: true
29+
update_verb: PATCH
30+
31+
min_version: 'beta'
32+
examples:
33+
- name: chronicle_nativedashboard_basic
34+
primary_resource_id: my_basic_dashboard
35+
min_version: 'beta'
36+
ignore_read_extra:
37+
- "last_viewed_time"
38+
vars:
39+
dashboard_name: 'dashboard'
40+
dashboard_description: 'dashboard_description'
41+
test_env_vars:
42+
chronicle_id: 'CHRONICLE_ID'
43+
44+
autogen_status: TmF0aXZlRGFzaGJvYXJk
45+
parameters:
46+
- name: location
47+
type: String
48+
required: true
49+
immutable: true
50+
url_param_only: true
51+
description: The location of the Chronicle instance.
52+
- name: instance
53+
type: String
54+
required: true
55+
immutable: true
56+
url_param_only: true
57+
description: The ID of the Chronicle instance.
58+
59+
properties:
60+
- name: name
61+
type: String
62+
output: true
63+
description: The full resource name of the dashboard.
64+
65+
- name: dashboardId
66+
type: String
67+
output: true
68+
immutable: true
69+
custom_flatten: 'templates/terraform/custom_flatten/id_from_name.tmpl'
70+
description: The unique ID of the Dashboard.
71+
72+
- name: access
73+
type: String
74+
description: |-
75+
The access level of the dashboard.
76+
Possible values:
77+
DASHBOARD_PRIVATE
78+
DASHBOARD_PUBLIC
79+
80+
- name: createTime
81+
type: String
82+
output: true
83+
description: The creation time of the dashboard.
84+
85+
- name: createUserId
86+
type: String
87+
output: true
88+
description: The ID of the user who created the dashboard.
89+
90+
- name: dashboardUserData
91+
type: NestedObject
92+
flatten_object: true
93+
description: User-specific data and preferences for the dashboard.
94+
properties:
95+
- name: isPinned
96+
type: Boolean
97+
default_value: false
98+
description: Whether the dashboard is pinned by the user.
99+
- name: lastViewedTime
100+
type: String
101+
output: true
102+
description: The time when this dashboard was last viewed.
103+
104+
- name: definition
105+
type: NestedObject
106+
flatten_object: true
107+
description: |-
108+
The definition of the dashboard including filters, layout, and chart
109+
configurations.
110+
properties:
111+
- name: charts
112+
type: Array
113+
ignore_read: true
114+
description: A list of charts included in the dashboard definition.
115+
item_type:
116+
type: NestedObject
117+
properties:
118+
- name: chartLayout
119+
type: NestedObject
120+
description: The visual layout parameters of this chart within the dashboard.
121+
properties:
122+
- name: startX
123+
type: Integer
124+
send_empty_value: true
125+
description: The starting X coordinate.
126+
- name: spanX
127+
type: Integer
128+
required: true
129+
description: The number of columns the chart spans.
130+
- name: startY
131+
type: Integer
132+
send_empty_value: true
133+
description: The starting Y coordinate.
134+
- name: spanY
135+
type: Integer
136+
required: true
137+
description: The number of rows the chart spans.
138+
- name: dashboardChart
139+
type: String
140+
description: The resource name of the associated DashboardChart.
141+
- name: filtersIds
142+
type: Array
143+
item_type:
144+
type: String
145+
description: List of dashboard filter IDs applied to this chart.
146+
147+
- name: filters
148+
type: Array
149+
description: Global filters defined for the dashboard.
150+
item_type:
151+
type: NestedObject
152+
properties:
153+
- name: chartIds
154+
type: Array
155+
item_type:
156+
type: String
157+
description: The IDs of charts that this filter applies to.
158+
- name: dataSource
159+
type: String
160+
description: |-
161+
The data source for the filter.
162+
Possible values:
163+
UDM, ENTITY, INGESTION_METRICS, RULE_DETECTIONS, RULESETS, GLOBAL,
164+
IOC_MATCHES, RULES, SOAR_CASES, SOAR_PLAYBOOKS, SOAR_CASE_HISTORY,
165+
DATA_TABLE, INVESTIGATION, INVESTIGATION_FEEDBACK
166+
- name: displayName
167+
type: String
168+
description: The display name of the filter.
169+
- name: fieldPath
170+
type: String
171+
send_empty_value: true
172+
description: The UDM field path being filtered.
173+
- name: filterOperatorAndFieldValues
174+
type: Array
175+
description: The specific operator and value set for the filter.
176+
item_type:
177+
type: NestedObject
178+
properties:
179+
- name: fieldValues
180+
type: Array
181+
item_type:
182+
type: String
183+
description: |-
184+
The values for the modifier. All operators should have a single
185+
value other than 'IN' and 'BETWEEN'.
186+
- name: filterOperator
187+
type: Enum
188+
enum_values:
189+
- 'EQUAL'
190+
- 'NOT_EQUAL'
191+
- 'IN'
192+
- 'GREATER_THAN'
193+
- 'GREATER_THAN_OR_EQUAL_TO'
194+
- 'LESS_THAN'
195+
- 'LESS_THAN_OR_EQUAL_TO'
196+
- 'BETWEEN'
197+
- 'PAST'
198+
- 'IS_NULL'
199+
- 'IS_NOT_NULL'
200+
- 'STARTS_WITH'
201+
- 'ENDS_WITH'
202+
- 'DOES_NOT_STARTS_WITH'
203+
- 'DOES_NOT_ENDS_WITH'
204+
- 'NOT_IN'
205+
- 'CONTAINS'
206+
- 'DOES_NOT_CONTAIN'
207+
description: The operator to apply to the field.
208+
- name: id
209+
type: String
210+
description: The unique ID of the filter.
211+
- name: isMandatory
212+
type: Boolean
213+
default_value: false
214+
description: Whether the filter is mandatory for the dashboard consumer.
215+
- name: isStandardTimeRangeFilter
216+
type: Boolean
217+
description: Whether the filter is a standard time range filter.
218+
- name: isStandardTimeRangeFilterEnabled
219+
type: Boolean
220+
description: Whether the standard time range filter is currently enabled.
221+
222+
- name: fingerprint
223+
type: String
224+
output: true
225+
description: The server-generated fingerprint of the dashboard definition.
226+
227+
- name: description
228+
type: String
229+
description: A description of the dashboard.
230+
231+
- name: displayName
232+
type: String
233+
required: true
234+
description: The display name/title of the dashboard visible to users.
235+
236+
- name: etag
237+
type: String
238+
output: true
239+
description: |-
240+
Server-computed checksum for optimistic concurrency control,
241+
sent on update and delete requests.
242+
243+
- name: type
244+
type: String
245+
description: |-
246+
The type of dashboard.
247+
Possible values:
248+
CURATED, PRIVATE, PUBLIC, CUSTOM, MARKETPLACE
249+
250+
- name: updateTime
251+
type: String
252+
output: true
253+
description: The time when the dashboard was last edited.
254+
255+
- name: updateUserId
256+
type: String
257+
output: true
258+
description: The ID of the user who last edited the dashboard.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
resource "google_chronicle_native_dashboard" "my-basic-dashboard" {
2+
provider = google-beta
3+
location = "us"
4+
instance = "{{index $.TestEnvVars "chronicle_id"}}"
5+
display_name = "{{index $.Vars "dashboard_name"}}"
6+
description = "{{index $.Vars "dashboard_description"}}"
7+
access = "DASHBOARD_PRIVATE"
8+
type = "CUSTOM"
9+
10+
# No 'definition' block here due to flatten_object: true
11+
filters {
12+
id = "GlobalTimeFilter"
13+
display_name = "Global Time Filter"
14+
data_source = "GLOBAL"
15+
is_standard_time_range_filter = true
16+
is_standard_time_range_filter_enabled = true
17+
filter_operator_and_field_values {
18+
filter_operator = "PAST"
19+
field_values = ["1", "DAY"]
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)