diff --git a/CHANGELOG.md b/CHANGELOG.md index 2badf8a9..2a111178 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ ## Unreleased +## v0.9.4 + +Added: +* Adds support for `labels` in `chronosphere_dashboard` +* Allow `chronosphere_notification_policy` resources without a `team_id`. + +Fixed: +* Support dry-run validation of monitor prometheus queries that contain + dynamic expressions that aren't known at plan time. + ## v0.9.3 - Allow creating `chronosphere_slack_notifier` with actions without `action_confirm_text`. diff --git a/provider/cmd/pulumi-resource-chronosphere/schema.json b/provider/cmd/pulumi-resource-chronosphere/schema.json index a807b806..2c8ca8e4 100644 --- a/provider/cmd/pulumi-resource-chronosphere/schema.json +++ b/provider/cmd/pulumi-resource-chronosphere/schema.json @@ -2436,6 +2436,12 @@ "dashboardJson": { "type": "string" }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "name": { "type": "string" }, @@ -2454,6 +2460,12 @@ "dashboardJson": { "type": "string" }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "name": { "type": "string" }, @@ -2474,6 +2486,12 @@ "dashboardJson": { "type": "string" }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "name": { "type": "string" }, diff --git a/provider/go.mod b/provider/go.mod index a7cdf3b5..81d45822 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -79,7 +79,7 @@ require ( github.com/charmbracelet/bubbletea v0.24.2 // indirect github.com/charmbracelet/lipgloss v0.7.1 // indirect github.com/cheggaaa/pb v1.0.29 // indirect - github.com/chronosphereio/terraform-provider-chronosphere v1.5.1 // indirect + github.com/chronosphereio/terraform-provider-chronosphere v1.6.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect diff --git a/provider/go.sum b/provider/go.sum index 00e6de09..0fd39375 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -929,8 +929,8 @@ github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAc github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= -github.com/chronosphereio/terraform-provider-chronosphere v1.5.1 h1:PBIeQv7w6FE0pywpeduYpEwDSmhx8JsxPWodx5UBzDs= -github.com/chronosphereio/terraform-provider-chronosphere v1.5.1/go.mod h1:Aj+ZF3Ncra9gNWU96t3Fk4KghEMv3h8bW8gyeWXZaSo= +github.com/chronosphereio/terraform-provider-chronosphere v1.6.0 h1:WBk3JVQeDE5GpFrR0giGEG2V2jI0lTs0mG4r698F1AU= +github.com/chronosphereio/terraform-provider-chronosphere v1.6.0/go.mod h1:Aj+ZF3Ncra9gNWU96t3Fk4KghEMv3h8bW8gyeWXZaSo= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= diff --git a/sdk/dotnet/Dashboard.cs b/sdk/dotnet/Dashboard.cs index 4b164c97..1e1aed75 100644 --- a/sdk/dotnet/Dashboard.cs +++ b/sdk/dotnet/Dashboard.cs @@ -19,6 +19,9 @@ public partial class Dashboard : global::Pulumi.CustomResource [Output("dashboardJson")] public Output DashboardJson { get; private set; } = null!; + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + [Output("name")] public Output Name { get; private set; } = null!; @@ -77,6 +80,14 @@ public sealed class DashboardArgs : global::Pulumi.ResourceArgs [Input("dashboardJson", required: true)] public Input DashboardJson { get; set; } = null!; + [Input("labels")] + private InputMap? _labels; + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + [Input("name")] public Input? Name { get; set; } @@ -97,6 +108,14 @@ public sealed class DashboardState : global::Pulumi.ResourceArgs [Input("dashboardJson")] public Input? DashboardJson { get; set; } + [Input("labels")] + private InputMap? _labels; + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + [Input("name")] public Input? Name { get; set; } diff --git a/sdk/go/chronosphere/dashboard.go b/sdk/go/chronosphere/dashboard.go index abc78f07..928b6221 100644 --- a/sdk/go/chronosphere/dashboard.go +++ b/sdk/go/chronosphere/dashboard.go @@ -17,6 +17,7 @@ type Dashboard struct { CollectionId pulumi.StringPtrOutput `pulumi:"collectionId"` DashboardJson pulumi.StringOutput `pulumi:"dashboardJson"` + Labels pulumi.StringMapOutput `pulumi:"labels"` Name pulumi.StringPtrOutput `pulumi:"name"` Slug pulumi.StringOutput `pulumi:"slug"` } @@ -54,15 +55,17 @@ func GetDashboard(ctx *pulumi.Context, // Input properties used for looking up and filtering Dashboard resources. type dashboardState struct { - CollectionId *string `pulumi:"collectionId"` - DashboardJson *string `pulumi:"dashboardJson"` - Name *string `pulumi:"name"` - Slug *string `pulumi:"slug"` + CollectionId *string `pulumi:"collectionId"` + DashboardJson *string `pulumi:"dashboardJson"` + Labels map[string]string `pulumi:"labels"` + Name *string `pulumi:"name"` + Slug *string `pulumi:"slug"` } type DashboardState struct { CollectionId pulumi.StringPtrInput DashboardJson pulumi.StringPtrInput + Labels pulumi.StringMapInput Name pulumi.StringPtrInput Slug pulumi.StringPtrInput } @@ -72,16 +75,18 @@ func (DashboardState) ElementType() reflect.Type { } type dashboardArgs struct { - CollectionId *string `pulumi:"collectionId"` - DashboardJson string `pulumi:"dashboardJson"` - Name *string `pulumi:"name"` - Slug *string `pulumi:"slug"` + CollectionId *string `pulumi:"collectionId"` + DashboardJson string `pulumi:"dashboardJson"` + Labels map[string]string `pulumi:"labels"` + Name *string `pulumi:"name"` + Slug *string `pulumi:"slug"` } // The set of arguments for constructing a Dashboard resource. type DashboardArgs struct { CollectionId pulumi.StringPtrInput DashboardJson pulumi.StringInput + Labels pulumi.StringMapInput Name pulumi.StringPtrInput Slug pulumi.StringPtrInput } @@ -181,6 +186,10 @@ func (o DashboardOutput) DashboardJson() pulumi.StringOutput { return o.ApplyT(func(v *Dashboard) pulumi.StringOutput { return v.DashboardJson }).(pulumi.StringOutput) } +func (o DashboardOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *Dashboard) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + func (o DashboardOutput) Name() pulumi.StringPtrOutput { return o.ApplyT(func(v *Dashboard) pulumi.StringPtrOutput { return v.Name }).(pulumi.StringPtrOutput) } diff --git a/sdk/java/src/main/java/io/chronosphere/chronosphere/Dashboard.java b/sdk/java/src/main/java/io/chronosphere/chronosphere/Dashboard.java index 4897e99d..04000715 100644 --- a/sdk/java/src/main/java/io/chronosphere/chronosphere/Dashboard.java +++ b/sdk/java/src/main/java/io/chronosphere/chronosphere/Dashboard.java @@ -11,6 +11,7 @@ import io.chronosphere.chronosphere.Utilities; import io.chronosphere.chronosphere.inputs.DashboardState; import java.lang.String; +import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; @@ -28,6 +29,12 @@ public Output> collectionId() { public Output dashboardJson() { return this.dashboardJson; } + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + public Output>> labels() { + return Codegen.optional(this.labels); + } @Export(name="name", refs={String.class}, tree="[0]") private Output name; diff --git a/sdk/java/src/main/java/io/chronosphere/chronosphere/DashboardArgs.java b/sdk/java/src/main/java/io/chronosphere/chronosphere/DashboardArgs.java index be7be5a4..cfa43ded 100644 --- a/sdk/java/src/main/java/io/chronosphere/chronosphere/DashboardArgs.java +++ b/sdk/java/src/main/java/io/chronosphere/chronosphere/DashboardArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import java.lang.String; +import java.util.Map; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -29,6 +30,13 @@ public Output dashboardJson() { return this.dashboardJson; } + @Import(name="labels") + private @Nullable Output> labels; + + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + @Import(name="name") private @Nullable Output name; @@ -48,6 +56,7 @@ private DashboardArgs() {} private DashboardArgs(DashboardArgs $) { this.collectionId = $.collectionId; this.dashboardJson = $.dashboardJson; + this.labels = $.labels; this.name = $.name; this.slug = $.slug; } @@ -88,6 +97,15 @@ public Builder dashboardJson(String dashboardJson) { return dashboardJson(Output.of(dashboardJson)); } + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + public Builder name(@Nullable Output name) { $.name = name; return this; diff --git a/sdk/java/src/main/java/io/chronosphere/chronosphere/inputs/DashboardState.java b/sdk/java/src/main/java/io/chronosphere/chronosphere/inputs/DashboardState.java index 071b9cbc..f01c2f8e 100644 --- a/sdk/java/src/main/java/io/chronosphere/chronosphere/inputs/DashboardState.java +++ b/sdk/java/src/main/java/io/chronosphere/chronosphere/inputs/DashboardState.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import java.lang.String; +import java.util.Map; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -29,6 +30,13 @@ public Optional> dashboardJson() { return Optional.ofNullable(this.dashboardJson); } + @Import(name="labels") + private @Nullable Output> labels; + + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + @Import(name="name") private @Nullable Output name; @@ -48,6 +56,7 @@ private DashboardState() {} private DashboardState(DashboardState $) { this.collectionId = $.collectionId; this.dashboardJson = $.dashboardJson; + this.labels = $.labels; this.name = $.name; this.slug = $.slug; } @@ -88,6 +97,15 @@ public Builder dashboardJson(String dashboardJson) { return dashboardJson(Output.of(dashboardJson)); } + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + public Builder name(@Nullable Output name) { $.name = name; return this; diff --git a/sdk/nodejs/dashboard.ts b/sdk/nodejs/dashboard.ts index 51952299..0844754e 100644 --- a/sdk/nodejs/dashboard.ts +++ b/sdk/nodejs/dashboard.ts @@ -34,6 +34,7 @@ export class Dashboard extends pulumi.CustomResource { public readonly collectionId!: pulumi.Output; public readonly dashboardJson!: pulumi.Output; + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; public readonly name!: pulumi.Output; public readonly slug!: pulumi.Output; @@ -52,6 +53,7 @@ export class Dashboard extends pulumi.CustomResource { const state = argsOrState as DashboardState | undefined; resourceInputs["collectionId"] = state ? state.collectionId : undefined; resourceInputs["dashboardJson"] = state ? state.dashboardJson : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["slug"] = state ? state.slug : undefined; } else { @@ -61,6 +63,7 @@ export class Dashboard extends pulumi.CustomResource { } resourceInputs["collectionId"] = args ? args.collectionId : undefined; resourceInputs["dashboardJson"] = args ? args.dashboardJson : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; resourceInputs["name"] = args ? args.name : undefined; resourceInputs["slug"] = args ? args.slug : undefined; } @@ -75,6 +78,7 @@ export class Dashboard extends pulumi.CustomResource { export interface DashboardState { collectionId?: pulumi.Input; dashboardJson?: pulumi.Input; + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; name?: pulumi.Input; slug?: pulumi.Input; } @@ -85,6 +89,7 @@ export interface DashboardState { export interface DashboardArgs { collectionId?: pulumi.Input; dashboardJson: pulumi.Input; + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; name?: pulumi.Input; slug?: pulumi.Input; } diff --git a/sdk/python/pulumi_chronosphere/dashboard.py b/sdk/python/pulumi_chronosphere/dashboard.py index 96a2019c..5e79b1f1 100644 --- a/sdk/python/pulumi_chronosphere/dashboard.py +++ b/sdk/python/pulumi_chronosphere/dashboard.py @@ -16,6 +16,7 @@ class DashboardArgs: def __init__(__self__, *, dashboard_json: pulumi.Input[str], collection_id: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None): """ @@ -24,6 +25,8 @@ def __init__(__self__, *, pulumi.set(__self__, "dashboard_json", dashboard_json) if collection_id is not None: pulumi.set(__self__, "collection_id", collection_id) + if labels is not None: + pulumi.set(__self__, "labels", labels) if name is not None: pulumi.set(__self__, "name", name) if slug is not None: @@ -47,6 +50,15 @@ def collection_id(self) -> Optional[pulumi.Input[str]]: def collection_id(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "collection_id", value) + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + @property @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: @@ -71,6 +83,7 @@ class _DashboardState: def __init__(__self__, *, collection_id: Optional[pulumi.Input[str]] = None, dashboard_json: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None): """ @@ -80,6 +93,8 @@ def __init__(__self__, *, pulumi.set(__self__, "collection_id", collection_id) if dashboard_json is not None: pulumi.set(__self__, "dashboard_json", dashboard_json) + if labels is not None: + pulumi.set(__self__, "labels", labels) if name is not None: pulumi.set(__self__, "name", name) if slug is not None: @@ -103,6 +118,15 @@ def dashboard_json(self) -> Optional[pulumi.Input[str]]: def dashboard_json(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "dashboard_json", value) + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + @property @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: @@ -129,6 +153,7 @@ def __init__(__self__, opts: Optional[pulumi.ResourceOptions] = None, collection_id: Optional[pulumi.Input[str]] = None, dashboard_json: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None, __props__=None): @@ -162,6 +187,7 @@ def _internal_init(__self__, opts: Optional[pulumi.ResourceOptions] = None, collection_id: Optional[pulumi.Input[str]] = None, dashboard_json: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None, __props__=None): @@ -177,6 +203,7 @@ def _internal_init(__self__, if dashboard_json is None and not opts.urn: raise TypeError("Missing required property 'dashboard_json'") __props__.__dict__["dashboard_json"] = dashboard_json + __props__.__dict__["labels"] = labels __props__.__dict__["name"] = name __props__.__dict__["slug"] = slug super(Dashboard, __self__).__init__( @@ -191,6 +218,7 @@ def get(resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, collection_id: Optional[pulumi.Input[str]] = None, dashboard_json: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None) -> 'Dashboard': """ @@ -207,6 +235,7 @@ def get(resource_name: str, __props__.__dict__["collection_id"] = collection_id __props__.__dict__["dashboard_json"] = dashboard_json + __props__.__dict__["labels"] = labels __props__.__dict__["name"] = name __props__.__dict__["slug"] = slug return Dashboard(resource_name, opts=opts, __props__=__props__) @@ -221,6 +250,11 @@ def collection_id(self) -> pulumi.Output[Optional[str]]: def dashboard_json(self) -> pulumi.Output[str]: return pulumi.get(self, "dashboard_json") + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + return pulumi.get(self, "labels") + @property @pulumi.getter def name(self) -> pulumi.Output[Optional[str]]: