@incident-io/pulumi 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +69 -0
- package/alertAttribute.d.ts +230 -0
- package/alertAttribute.d.ts.map +1 -0
- package/alertAttribute.js +219 -0
- package/alertAttribute.js.map +1 -0
- package/alertRoute.d.ts +511 -0
- package/alertRoute.d.ts.map +1 -0
- package/alertRoute.js +432 -0
- package/alertRoute.js.map +1 -0
- package/alertSource.d.ts +347 -0
- package/alertSource.d.ts.map +1 -0
- package/alertSource.js +241 -0
- package/alertSource.js.map +1 -0
- package/alertSourceAttribute.d.ts +180 -0
- package/alertSourceAttribute.d.ts.map +1 -0
- package/alertSourceAttribute.js +107 -0
- package/alertSourceAttribute.js.map +1 -0
- package/alertSourceAttributeBeta.d.ts +188 -0
- package/alertSourceAttributeBeta.d.ts.map +1 -0
- package/alertSourceAttributeBeta.js +115 -0
- package/alertSourceAttributeBeta.js.map +1 -0
- package/alertSourceBeta.d.ts +244 -0
- package/alertSourceBeta.d.ts.map +1 -0
- package/alertSourceBeta.js +138 -0
- package/alertSourceBeta.js.map +1 -0
- package/apiKey.d.ts +276 -0
- package/apiKey.d.ts.map +1 -0
- package/apiKey.js +211 -0
- package/apiKey.js.map +1 -0
- package/catalogEntries.d.ts +241 -0
- package/catalogEntries.d.ts.map +1 -0
- package/catalogEntries.js +242 -0
- package/catalogEntries.js.map +1 -0
- package/catalogEntry.d.ts +183 -0
- package/catalogEntry.d.ts.map +1 -0
- package/catalogEntry.js +159 -0
- package/catalogEntry.js.map +1 -0
- package/catalogType.d.ts +169 -0
- package/catalogType.d.ts.map +1 -0
- package/catalogType.js +132 -0
- package/catalogType.js.map +1 -0
- package/catalogTypeAttribute.d.ts +190 -0
- package/catalogTypeAttribute.d.ts.map +1 -0
- package/catalogTypeAttribute.js +153 -0
- package/catalogTypeAttribute.js.map +1 -0
- package/config/index.d.ts +2 -0
- package/config/index.d.ts.map +1 -0
- package/config/index.js +21 -0
- package/config/index.js.map +1 -0
- package/config/vars.d.ts +13 -0
- package/config/vars.d.ts.map +1 -0
- package/config/vars.js +49 -0
- package/config/vars.js.map +1 -0
- package/customField.d.ts +260 -0
- package/customField.d.ts.map +1 -0
- package/customField.js +226 -0
- package/customField.js.map +1 -0
- package/customFieldOption.d.ts +107 -0
- package/customFieldOption.d.ts.map +1 -0
- package/customFieldOption.js +116 -0
- package/customFieldOption.js.map +1 -0
- package/escalationPath.d.ts +257 -0
- package/escalationPath.d.ts.map +1 -0
- package/escalationPath.js +228 -0
- package/escalationPath.js.map +1 -0
- package/escalationPathBeta.d.ts +134 -0
- package/escalationPathBeta.d.ts.map +1 -0
- package/escalationPathBeta.js +105 -0
- package/escalationPathBeta.js.map +1 -0
- package/getAlertAttribute.d.ts +81 -0
- package/getAlertAttribute.d.ts.map +1 -0
- package/getAlertAttribute.js +75 -0
- package/getAlertAttribute.js.map +1 -0
- package/getAlertSource.d.ts +169 -0
- package/getAlertSource.d.ts.map +1 -0
- package/getAlertSource.js +103 -0
- package/getAlertSource.js.map +1 -0
- package/getAlertSourceAttribute.d.ts +131 -0
- package/getAlertSourceAttribute.d.ts.map +1 -0
- package/getAlertSourceAttribute.js +85 -0
- package/getAlertSourceAttribute.js.map +1 -0
- package/getAlertSourceAttributeBeta.d.ts +131 -0
- package/getAlertSourceAttributeBeta.d.ts.map +1 -0
- package/getAlertSourceAttributeBeta.js +85 -0
- package/getAlertSourceAttributeBeta.js.map +1 -0
- package/getApiKey.d.ts +167 -0
- package/getApiKey.d.ts.map +1 -0
- package/getApiKey.js +145 -0
- package/getApiKey.js.map +1 -0
- package/getCatalogEntry.d.ts +77 -0
- package/getCatalogEntry.d.ts.map +1 -0
- package/getCatalogEntry.js +59 -0
- package/getCatalogEntry.js.map +1 -0
- package/getCatalogType.d.ts +163 -0
- package/getCatalogType.d.ts.map +1 -0
- package/getCatalogType.js +135 -0
- package/getCatalogType.js.map +1 -0
- package/getCatalogTypeAttribute.d.ts +73 -0
- package/getCatalogTypeAttribute.d.ts.map +1 -0
- package/getCatalogTypeAttribute.js +53 -0
- package/getCatalogTypeAttribute.js.map +1 -0
- package/getCustomField.d.ts +67 -0
- package/getCustomField.d.ts.map +1 -0
- package/getCustomField.js +51 -0
- package/getCustomField.js.map +1 -0
- package/getCustomFieldOption.d.ts +65 -0
- package/getCustomFieldOption.d.ts.map +1 -0
- package/getCustomFieldOption.js +55 -0
- package/getCustomFieldOption.js.map +1 -0
- package/getEscalationPath.d.ts +100 -0
- package/getEscalationPath.d.ts.map +1 -0
- package/getEscalationPath.js +83 -0
- package/getEscalationPath.js.map +1 -0
- package/getEscalationPathBeta.d.ts +100 -0
- package/getEscalationPathBeta.d.ts.map +1 -0
- package/getEscalationPathBeta.js +83 -0
- package/getEscalationPathBeta.js.map +1 -0
- package/getIncidentRole.d.ts +111 -0
- package/getIncidentRole.d.ts.map +1 -0
- package/getIncidentRole.js +105 -0
- package/getIncidentRole.js.map +1 -0
- package/getIncidentTemplate.d.ts +98 -0
- package/getIncidentTemplate.d.ts.map +1 -0
- package/getIncidentTemplate.js +95 -0
- package/getIncidentTemplate.js.map +1 -0
- package/getIncidentTimestamp.d.ts +107 -0
- package/getIncidentTimestamp.d.ts.map +1 -0
- package/getIncidentTimestamp.js +109 -0
- package/getIncidentTimestamp.js.map +1 -0
- package/getIncidentType.d.ts +121 -0
- package/getIncidentType.d.ts.map +1 -0
- package/getIncidentType.js +107 -0
- package/getIncidentType.js.map +1 -0
- package/getIpAllowlist.d.ts +62 -0
- package/getIpAllowlist.d.ts.map +1 -0
- package/getIpAllowlist.js +77 -0
- package/getIpAllowlist.js.map +1 -0
- package/getPolicy.d.ts +97 -0
- package/getPolicy.d.ts.map +1 -0
- package/getPolicy.js +91 -0
- package/getPolicy.js.map +1 -0
- package/getRichText.d.ts +111 -0
- package/getRichText.d.ts.map +1 -0
- package/getRichText.js +107 -0
- package/getRichText.js.map +1 -0
- package/getSchedule.d.ts +89 -0
- package/getSchedule.d.ts.map +1 -0
- package/getSchedule.js +87 -0
- package/getSchedule.js.map +1 -0
- package/getScheduleBeta.d.ts +85 -0
- package/getScheduleBeta.d.ts.map +1 -0
- package/getScheduleBeta.js +83 -0
- package/getScheduleBeta.js.map +1 -0
- package/getScheduleReplica.d.ts +116 -0
- package/getScheduleReplica.d.ts.map +1 -0
- package/getScheduleReplica.js +79 -0
- package/getScheduleReplica.js.map +1 -0
- package/getScheduleRotation.d.ts +166 -0
- package/getScheduleRotation.d.ts.map +1 -0
- package/getScheduleRotation.js +127 -0
- package/getScheduleRotation.js.map +1 -0
- package/getScheduleRotationBeta.d.ts +122 -0
- package/getScheduleRotationBeta.d.ts.map +1 -0
- package/getScheduleRotationBeta.js +83 -0
- package/getScheduleRotationBeta.js.map +1 -0
- package/getScheduleSyncRule.d.ts +91 -0
- package/getScheduleSyncRule.d.ts.map +1 -0
- package/getScheduleSyncRule.js +79 -0
- package/getScheduleSyncRule.js.map +1 -0
- package/getScheduleSyncTarget.d.ts +100 -0
- package/getScheduleSyncTarget.d.ts.map +1 -0
- package/getScheduleSyncTarget.js +93 -0
- package/getScheduleSyncTarget.js.map +1 -0
- package/getSecret.d.ts +115 -0
- package/getSecret.d.ts.map +1 -0
- package/getSecret.js +97 -0
- package/getSecret.js.map +1 -0
- package/getSeverity.d.ts +117 -0
- package/getSeverity.d.ts.map +1 -0
- package/getSeverity.js +115 -0
- package/getSeverity.js.map +1 -0
- package/getStatus.d.ts +125 -0
- package/getStatus.d.ts.map +1 -0
- package/getStatus.js +119 -0
- package/getStatus.js.map +1 -0
- package/getUser.d.ts +52 -0
- package/getUser.d.ts.map +1 -0
- package/getUser.js +61 -0
- package/getUser.js.map +1 -0
- package/getWorkflow.d.ts +103 -0
- package/getWorkflow.d.ts.map +1 -0
- package/getWorkflow.js +77 -0
- package/getWorkflow.js.map +1 -0
- package/incidentRole.d.ts +109 -0
- package/incidentRole.d.ts.map +1 -0
- package/incidentRole.js +111 -0
- package/incidentRole.js.map +1 -0
- package/incidentTemplate.d.ts +200 -0
- package/incidentTemplate.d.ts.map +1 -0
- package/incidentTemplate.js +207 -0
- package/incidentTemplate.js.map +1 -0
- package/index.d.ts +188 -0
- package/index.d.ts.map +1 -0
- package/index.js +303 -0
- package/index.js.map +1 -0
- package/maintenanceWindow.d.ts +255 -0
- package/maintenanceWindow.d.ts.map +1 -0
- package/maintenanceWindow.js +148 -0
- package/maintenanceWindow.js.map +1 -0
- package/package.json +33 -0
- package/policy.d.ts +476 -0
- package/policy.d.ts.map +1 -0
- package/policy.js +387 -0
- package/policy.js.map +1 -0
- package/provider.d.ts +62 -0
- package/provider.d.ts.map +1 -0
- package/provider.js +80 -0
- package/provider.js.map +1 -0
- package/schedule.d.ts +120 -0
- package/schedule.d.ts.map +1 -0
- package/schedule.js +114 -0
- package/schedule.js.map +1 -0
- package/scheduleBeta.d.ts +104 -0
- package/scheduleBeta.d.ts.map +1 -0
- package/scheduleBeta.js +98 -0
- package/scheduleBeta.js.map +1 -0
- package/scheduleReplica.d.ts +178 -0
- package/scheduleReplica.d.ts.map +1 -0
- package/scheduleReplica.js +134 -0
- package/scheduleReplica.js.map +1 -0
- package/scheduleRotation.d.ts +287 -0
- package/scheduleRotation.d.ts.map +1 -0
- package/scheduleRotation.js +224 -0
- package/scheduleRotation.js.map +1 -0
- package/scheduleRotationBeta.d.ts +184 -0
- package/scheduleRotationBeta.d.ts.map +1 -0
- package/scheduleRotationBeta.js +121 -0
- package/scheduleRotationBeta.js.map +1 -0
- package/scheduleSyncRule.d.ts +154 -0
- package/scheduleSyncRule.d.ts.map +1 -0
- package/scheduleSyncRule.js +146 -0
- package/scheduleSyncRule.js.map +1 -0
- package/scheduleSyncTarget.d.ts +108 -0
- package/scheduleSyncTarget.d.ts.map +1 -0
- package/scheduleSyncTarget.js +106 -0
- package/scheduleSyncTarget.js.map +1 -0
- package/secret.d.ts +276 -0
- package/secret.d.ts.map +1 -0
- package/secret.js +234 -0
- package/secret.js.map +1 -0
- package/severity.d.ts +96 -0
- package/severity.d.ts.map +1 -0
- package/severity.js +102 -0
- package/severity.js.map +1 -0
- package/status.d.ts +121 -0
- package/status.d.ts.map +1 -0
- package/status.js +120 -0
- package/status.js.map +1 -0
- package/types/index.d.ts +4 -0
- package/types/index.d.ts.map +1 -0
- package/types/index.js +34 -0
- package/types/index.js.map +1 -0
- package/types/input.d.ts +23630 -0
- package/types/input.d.ts.map +1 -0
- package/types/input.js +5 -0
- package/types/input.js.map +1 -0
- package/types/output.d.ts +19726 -0
- package/types/output.d.ts.map +1 -0
- package/types/output.js +5 -0
- package/types/output.js.map +1 -0
- package/utilities.d.ts +5 -0
- package/utilities.d.ts.map +1 -0
- package/utilities.js +114 -0
- package/utilities.js.map +1 -0
- package/workflow.d.ts +736 -0
- package/workflow.d.ts.map +1 -0
- package/workflow.js +608 -0
- package/workflow.js.map +1 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
2
|
+
import * as inputs from "./types/input";
|
|
3
|
+
import * as outputs from "./types/output";
|
|
4
|
+
/**
|
|
5
|
+
* This resource manages all entries for a given catalog type and should be used when
|
|
6
|
+
* loading many (>100) catalog entries to ensure fast and reliable plans.
|
|
7
|
+
*
|
|
8
|
+
* Please note that this resource is authoritative, in that it will delete _all_ entries from
|
|
9
|
+
* the catalog type that it doesn't manage, even those created outside of Terraform.
|
|
10
|
+
*
|
|
11
|
+
* If you have a catalog source such as Backstage or some custom catalog you'd like to sync
|
|
12
|
+
* into incident.io, this is the recommended way of achieving that.
|
|
13
|
+
*
|
|
14
|
+
* ## External IDs
|
|
15
|
+
*
|
|
16
|
+
* As this resource loads content from an existing catalog source into the incident.io
|
|
17
|
+
* catalog, it requires that each entry is given a stable identifier that can uniquely
|
|
18
|
+
* identify it in the upstream system.
|
|
19
|
+
*
|
|
20
|
+
* We call this the 'external ID' and it might be something like:
|
|
21
|
+
*
|
|
22
|
+
* - The ID of the entry in a custom catalog, often the primary key of the entry
|
|
23
|
+
* - Any stable human identifier (often called a slug) that uniquely reference the entry
|
|
24
|
+
*
|
|
25
|
+
* This external ID is what we use as a map key for the entries attribute, and how we map
|
|
26
|
+
* changes to one entry to an update to that same entry when the upstream changes.
|
|
27
|
+
*
|
|
28
|
+
* ## Example Usage
|
|
29
|
+
*
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import * as pulumi from "@pulumi/pulumi";
|
|
32
|
+
* import * as incident from "@incident-io/pulumi";
|
|
33
|
+
* import * as std from "@pulumi/std";
|
|
34
|
+
*
|
|
35
|
+
* function tryOutput_(
|
|
36
|
+
* ...fns: Array<() => pulumi.Input<any>>
|
|
37
|
+
* ): pulumi.Output<any> {
|
|
38
|
+
* if (fns.length === 0) {
|
|
39
|
+
* throw new Error("try: all parameters failed");
|
|
40
|
+
* }
|
|
41
|
+
* const [fn, ...rest] = fns;
|
|
42
|
+
* try {
|
|
43
|
+
* return pulumi.output(fn()).apply(result => result !== undefined ? result : tryOutput_(...rest));
|
|
44
|
+
* } catch {
|
|
45
|
+
* return tryOutput_(...rest);
|
|
46
|
+
* }
|
|
47
|
+
* throw new Error("try: all parameters failed");
|
|
48
|
+
* }
|
|
49
|
+
*
|
|
50
|
+
*
|
|
51
|
+
* function try_(
|
|
52
|
+
* ...fns: Array<() => any>
|
|
53
|
+
* ): any {
|
|
54
|
+
* for (const fn of fns) {
|
|
55
|
+
* try {
|
|
56
|
+
* const result = fn();
|
|
57
|
+
* if (result === undefined) {
|
|
58
|
+
* continue;
|
|
59
|
+
* }
|
|
60
|
+
* return result;
|
|
61
|
+
* } catch (e) {
|
|
62
|
+
* continue;
|
|
63
|
+
* }
|
|
64
|
+
* }
|
|
65
|
+
* throw new Error("try: all parameters failed");
|
|
66
|
+
* }
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
* //###############################################################################
|
|
70
|
+
* // Simple Example
|
|
71
|
+
* //###############################################################################
|
|
72
|
+
* const simpleExample = new incident.CatalogType("simple_example", {
|
|
73
|
+
* name: "Simple Example",
|
|
74
|
+
* description: "A simple example catalog type",
|
|
75
|
+
* sourceRepoUrl: "https://example.com/myrepo",
|
|
76
|
+
* });
|
|
77
|
+
* const exampleUrl = new incident.CatalogTypeAttribute("example_url", {
|
|
78
|
+
* catalogTypeId: simpleExample.id,
|
|
79
|
+
* name: "url",
|
|
80
|
+
* type: "String",
|
|
81
|
+
* });
|
|
82
|
+
* const simpleExampleCatalogEntries = new incident.CatalogEntries("simple_example", {
|
|
83
|
+
* catalogEntriesId: simpleExample.id,
|
|
84
|
+
* entries: {
|
|
85
|
+
* foo: {
|
|
86
|
+
* name: "Foo",
|
|
87
|
+
* attributeValues: exampleUrl.id.apply(id => {
|
|
88
|
+
* [id]: {
|
|
89
|
+
* value: "https://example.com/foo",
|
|
90
|
+
* },
|
|
91
|
+
* }),
|
|
92
|
+
* },
|
|
93
|
+
* bar: {
|
|
94
|
+
* name: "Bar",
|
|
95
|
+
* attributeValues: exampleUrl.id.apply(id => {
|
|
96
|
+
* [id]: {
|
|
97
|
+
* value: "https://example.com/bar",
|
|
98
|
+
* },
|
|
99
|
+
* }),
|
|
100
|
+
* },
|
|
101
|
+
* },
|
|
102
|
+
* });
|
|
103
|
+
* const catalog = .reduce((__obj, entry) => ({ ...__obj, [String(entry.uid)]: entry }), {});
|
|
104
|
+
* // Define the catalog type, creating attributes that map to the values in the
|
|
105
|
+
* // catalog data source.
|
|
106
|
+
* const service = new incident.CatalogType("service", {
|
|
107
|
+
* name: "Service",
|
|
108
|
+
* description: "All services that we run at Example Org",
|
|
109
|
+
* sourceRepoUrl: "",
|
|
110
|
+
* });
|
|
111
|
+
* const serviceOwner = new incident.CatalogTypeAttribute("service_owner", {
|
|
112
|
+
* catalogTypeId: service.id,
|
|
113
|
+
* name: "Owner",
|
|
114
|
+
* type: "String",
|
|
115
|
+
* });
|
|
116
|
+
* const serviceDescription = new incident.CatalogTypeAttribute("service_description", {
|
|
117
|
+
* catalogTypeId: service.id,
|
|
118
|
+
* name: "Description",
|
|
119
|
+
* type: "String",
|
|
120
|
+
* });
|
|
121
|
+
* const serviceTags = new incident.CatalogTypeAttribute("service_tags", {
|
|
122
|
+
* catalogTypeId: service.id,
|
|
123
|
+
* name: "Tags",
|
|
124
|
+
* type: "String",
|
|
125
|
+
* array: true,
|
|
126
|
+
* });
|
|
127
|
+
* //###############################################################################
|
|
128
|
+
* // Provision the entries
|
|
129
|
+
* //###############################################################################
|
|
130
|
+
* // This is where we create all the entries. If we have any entries in Service
|
|
131
|
+
* // that are not defined in this resource, we will delete them.
|
|
132
|
+
* const services = new incident.CatalogEntries("services", {
|
|
133
|
+
* catalogEntriesId: service.id,
|
|
134
|
+
* entries: Object.entries(catalog).sort().reduce((__obj, [externalId, entry]) => ({ ...__obj, [externalId]: {
|
|
135
|
+
* name: entry.metadata.name,
|
|
136
|
+
* aliases: [entry.metadata.name],
|
|
137
|
+
* attributeValues: pulumi.all([serviceOwner.id, tryOutput_(
|
|
138
|
+
* () => entry.spec.owner,
|
|
139
|
+
* () => null
|
|
140
|
+
* ), serviceDescription.id, tryOutput_(
|
|
141
|
+
* () => entry.metadata.description,
|
|
142
|
+
* () => null
|
|
143
|
+
* ), serviceTags.id, tryOutput_(
|
|
144
|
+
* () => entry.metadata.tags,
|
|
145
|
+
* () => null
|
|
146
|
+
* )]).apply(([serviceOwnerId, _try, serviceDescriptionId, _try1, serviceTagsId, _try2]) => Object.entries({
|
|
147
|
+
* [serviceOwnerId]: {
|
|
148
|
+
* value: _try,
|
|
149
|
+
* },
|
|
150
|
+
* [serviceDescriptionId]: {
|
|
151
|
+
* value: _try1,
|
|
152
|
+
* },
|
|
153
|
+
* [serviceTagsId]: {
|
|
154
|
+
* arrayValue: _try2,
|
|
155
|
+
* },
|
|
156
|
+
* }).sort().filter(([attribute, binding]) => try_(
|
|
157
|
+
* () => binding.value,
|
|
158
|
+
* () => binding.arrayValue
|
|
159
|
+
* ) != null).reduce((__obj, [attribute, binding]) => ({ ...__obj, [attribute]: binding }), {})),
|
|
160
|
+
* } }), {}),
|
|
161
|
+
* });
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
export declare class CatalogEntries extends pulumi.CustomResource {
|
|
165
|
+
/**
|
|
166
|
+
* Get an existing CatalogEntries resource's state with the given name, ID, and optional extra
|
|
167
|
+
* properties used to qualify the lookup.
|
|
168
|
+
*
|
|
169
|
+
* @param name The _unique_ name of the resulting resource.
|
|
170
|
+
* @param id The _unique_ provider ID of the resource to lookup.
|
|
171
|
+
* @param state Any extra arguments used during the lookup.
|
|
172
|
+
* @param opts Optional settings to control the behavior of the CustomResource.
|
|
173
|
+
*/
|
|
174
|
+
static get(name: string, id: pulumi.Input<pulumi.ID>, state?: CatalogEntriesState, opts?: pulumi.CustomResourceOptions): CatalogEntries;
|
|
175
|
+
/**
|
|
176
|
+
* Returns true if the given object is an instance of CatalogEntries. This is designed to work even
|
|
177
|
+
* when multiple copies of the Pulumi SDK have been loaded into the same process.
|
|
178
|
+
*/
|
|
179
|
+
static isInstance(obj: any): obj is CatalogEntries;
|
|
180
|
+
/**
|
|
181
|
+
* ID of this catalog type
|
|
182
|
+
*/
|
|
183
|
+
readonly catalogEntriesId: pulumi.Output<string>;
|
|
184
|
+
/**
|
|
185
|
+
* Map of external ID to entry in the catalog.
|
|
186
|
+
*/
|
|
187
|
+
readonly entries: pulumi.Output<{
|
|
188
|
+
[key: string]: outputs.CatalogEntriesEntries;
|
|
189
|
+
}>;
|
|
190
|
+
/**
|
|
191
|
+
* The set of attributes that are managed by this resource. By default, all attributes are managed by this resource.
|
|
192
|
+
*/
|
|
193
|
+
readonly managedAttributes: pulumi.Output<string[] | undefined>;
|
|
194
|
+
/**
|
|
195
|
+
* Create a CatalogEntries resource with the given unique name, arguments, and options.
|
|
196
|
+
*
|
|
197
|
+
* @param name The _unique_ name of the resource.
|
|
198
|
+
* @param args The arguments to use to populate this resource's properties.
|
|
199
|
+
* @param opts A bag of options that control this resource's behavior.
|
|
200
|
+
*/
|
|
201
|
+
constructor(name: string, args: CatalogEntriesArgs, opts?: pulumi.CustomResourceOptions);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Input properties used for looking up and filtering CatalogEntries resources.
|
|
205
|
+
*/
|
|
206
|
+
export interface CatalogEntriesState {
|
|
207
|
+
/**
|
|
208
|
+
* ID of this catalog type
|
|
209
|
+
*/
|
|
210
|
+
catalogEntriesId?: pulumi.Input<string | undefined>;
|
|
211
|
+
/**
|
|
212
|
+
* Map of external ID to entry in the catalog.
|
|
213
|
+
*/
|
|
214
|
+
entries?: pulumi.Input<{
|
|
215
|
+
[key: string]: pulumi.Input<inputs.CatalogEntriesEntries>;
|
|
216
|
+
} | undefined>;
|
|
217
|
+
/**
|
|
218
|
+
* The set of attributes that are managed by this resource. By default, all attributes are managed by this resource.
|
|
219
|
+
*/
|
|
220
|
+
managedAttributes?: pulumi.Input<pulumi.Input<string>[] | undefined>;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* The set of arguments for constructing a CatalogEntries resource.
|
|
224
|
+
*/
|
|
225
|
+
export interface CatalogEntriesArgs {
|
|
226
|
+
/**
|
|
227
|
+
* ID of this catalog type
|
|
228
|
+
*/
|
|
229
|
+
catalogEntriesId: pulumi.Input<string>;
|
|
230
|
+
/**
|
|
231
|
+
* Map of external ID to entry in the catalog.
|
|
232
|
+
*/
|
|
233
|
+
entries: pulumi.Input<{
|
|
234
|
+
[key: string]: pulumi.Input<inputs.CatalogEntriesEntries>;
|
|
235
|
+
}>;
|
|
236
|
+
/**
|
|
237
|
+
* The set of attributes that are managed by this resource. By default, all attributes are managed by this resource.
|
|
238
|
+
*/
|
|
239
|
+
managedAttributes?: pulumi.Input<pulumi.Input<string>[] | undefined>;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=catalogEntries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogEntries.d.ts","sourceRoot":"","sources":["../catalogEntries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+JG;AACH,qBAAa,cAAe,SAAQ,MAAM,CAAC,cAAc;IACrD;;;;;;;;OAQG;WACW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,qBAAqB,GAAG,cAAc;IAO9I;;;OAGG;WACW,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc;IAOzD;;OAEG;IACH,SAAwB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChE;;OAEG;IACH,SAAwB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAA;KAAC,CAAC,CAAC;IAC/F;;OAEG;IACH,SAAwB,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAE/E;;;;;;OAMG;gBACS,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,qBAAqB;CAwB1F;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;KAAC,GAAG,SAAS,CAAC,CAAC;IAChG;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;KAAC,CAAC,CAAC;IACnF;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;CACxE"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *** WARNING: this file was generated by pulumi-language-nodejs. ***
|
|
3
|
+
// *** Do not edit by hand unless you're certain you know what you are doing! ***
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
21
|
+
if (mod && mod.__esModule) return mod;
|
|
22
|
+
var result = {};
|
|
23
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
24
|
+
__setModuleDefault(result, mod);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.CatalogEntries = void 0;
|
|
29
|
+
const pulumi = __importStar(require("@pulumi/pulumi"));
|
|
30
|
+
const utilities = __importStar(require("./utilities"));
|
|
31
|
+
/**
|
|
32
|
+
* This resource manages all entries for a given catalog type and should be used when
|
|
33
|
+
* loading many (>100) catalog entries to ensure fast and reliable plans.
|
|
34
|
+
*
|
|
35
|
+
* Please note that this resource is authoritative, in that it will delete _all_ entries from
|
|
36
|
+
* the catalog type that it doesn't manage, even those created outside of Terraform.
|
|
37
|
+
*
|
|
38
|
+
* If you have a catalog source such as Backstage or some custom catalog you'd like to sync
|
|
39
|
+
* into incident.io, this is the recommended way of achieving that.
|
|
40
|
+
*
|
|
41
|
+
* ## External IDs
|
|
42
|
+
*
|
|
43
|
+
* As this resource loads content from an existing catalog source into the incident.io
|
|
44
|
+
* catalog, it requires that each entry is given a stable identifier that can uniquely
|
|
45
|
+
* identify it in the upstream system.
|
|
46
|
+
*
|
|
47
|
+
* We call this the 'external ID' and it might be something like:
|
|
48
|
+
*
|
|
49
|
+
* - The ID of the entry in a custom catalog, often the primary key of the entry
|
|
50
|
+
* - Any stable human identifier (often called a slug) that uniquely reference the entry
|
|
51
|
+
*
|
|
52
|
+
* This external ID is what we use as a map key for the entries attribute, and how we map
|
|
53
|
+
* changes to one entry to an update to that same entry when the upstream changes.
|
|
54
|
+
*
|
|
55
|
+
* ## Example Usage
|
|
56
|
+
*
|
|
57
|
+
* ```typescript
|
|
58
|
+
* import * as pulumi from "@pulumi/pulumi";
|
|
59
|
+
* import * as incident from "@incident-io/pulumi";
|
|
60
|
+
* import * as std from "@pulumi/std";
|
|
61
|
+
*
|
|
62
|
+
* function tryOutput_(
|
|
63
|
+
* ...fns: Array<() => pulumi.Input<any>>
|
|
64
|
+
* ): pulumi.Output<any> {
|
|
65
|
+
* if (fns.length === 0) {
|
|
66
|
+
* throw new Error("try: all parameters failed");
|
|
67
|
+
* }
|
|
68
|
+
* const [fn, ...rest] = fns;
|
|
69
|
+
* try {
|
|
70
|
+
* return pulumi.output(fn()).apply(result => result !== undefined ? result : tryOutput_(...rest));
|
|
71
|
+
* } catch {
|
|
72
|
+
* return tryOutput_(...rest);
|
|
73
|
+
* }
|
|
74
|
+
* throw new Error("try: all parameters failed");
|
|
75
|
+
* }
|
|
76
|
+
*
|
|
77
|
+
*
|
|
78
|
+
* function try_(
|
|
79
|
+
* ...fns: Array<() => any>
|
|
80
|
+
* ): any {
|
|
81
|
+
* for (const fn of fns) {
|
|
82
|
+
* try {
|
|
83
|
+
* const result = fn();
|
|
84
|
+
* if (result === undefined) {
|
|
85
|
+
* continue;
|
|
86
|
+
* }
|
|
87
|
+
* return result;
|
|
88
|
+
* } catch (e) {
|
|
89
|
+
* continue;
|
|
90
|
+
* }
|
|
91
|
+
* }
|
|
92
|
+
* throw new Error("try: all parameters failed");
|
|
93
|
+
* }
|
|
94
|
+
*
|
|
95
|
+
*
|
|
96
|
+
* //###############################################################################
|
|
97
|
+
* // Simple Example
|
|
98
|
+
* //###############################################################################
|
|
99
|
+
* const simpleExample = new incident.CatalogType("simple_example", {
|
|
100
|
+
* name: "Simple Example",
|
|
101
|
+
* description: "A simple example catalog type",
|
|
102
|
+
* sourceRepoUrl: "https://example.com/myrepo",
|
|
103
|
+
* });
|
|
104
|
+
* const exampleUrl = new incident.CatalogTypeAttribute("example_url", {
|
|
105
|
+
* catalogTypeId: simpleExample.id,
|
|
106
|
+
* name: "url",
|
|
107
|
+
* type: "String",
|
|
108
|
+
* });
|
|
109
|
+
* const simpleExampleCatalogEntries = new incident.CatalogEntries("simple_example", {
|
|
110
|
+
* catalogEntriesId: simpleExample.id,
|
|
111
|
+
* entries: {
|
|
112
|
+
* foo: {
|
|
113
|
+
* name: "Foo",
|
|
114
|
+
* attributeValues: exampleUrl.id.apply(id => {
|
|
115
|
+
* [id]: {
|
|
116
|
+
* value: "https://example.com/foo",
|
|
117
|
+
* },
|
|
118
|
+
* }),
|
|
119
|
+
* },
|
|
120
|
+
* bar: {
|
|
121
|
+
* name: "Bar",
|
|
122
|
+
* attributeValues: exampleUrl.id.apply(id => {
|
|
123
|
+
* [id]: {
|
|
124
|
+
* value: "https://example.com/bar",
|
|
125
|
+
* },
|
|
126
|
+
* }),
|
|
127
|
+
* },
|
|
128
|
+
* },
|
|
129
|
+
* });
|
|
130
|
+
* const catalog = .reduce((__obj, entry) => ({ ...__obj, [String(entry.uid)]: entry }), {});
|
|
131
|
+
* // Define the catalog type, creating attributes that map to the values in the
|
|
132
|
+
* // catalog data source.
|
|
133
|
+
* const service = new incident.CatalogType("service", {
|
|
134
|
+
* name: "Service",
|
|
135
|
+
* description: "All services that we run at Example Org",
|
|
136
|
+
* sourceRepoUrl: "",
|
|
137
|
+
* });
|
|
138
|
+
* const serviceOwner = new incident.CatalogTypeAttribute("service_owner", {
|
|
139
|
+
* catalogTypeId: service.id,
|
|
140
|
+
* name: "Owner",
|
|
141
|
+
* type: "String",
|
|
142
|
+
* });
|
|
143
|
+
* const serviceDescription = new incident.CatalogTypeAttribute("service_description", {
|
|
144
|
+
* catalogTypeId: service.id,
|
|
145
|
+
* name: "Description",
|
|
146
|
+
* type: "String",
|
|
147
|
+
* });
|
|
148
|
+
* const serviceTags = new incident.CatalogTypeAttribute("service_tags", {
|
|
149
|
+
* catalogTypeId: service.id,
|
|
150
|
+
* name: "Tags",
|
|
151
|
+
* type: "String",
|
|
152
|
+
* array: true,
|
|
153
|
+
* });
|
|
154
|
+
* //###############################################################################
|
|
155
|
+
* // Provision the entries
|
|
156
|
+
* //###############################################################################
|
|
157
|
+
* // This is where we create all the entries. If we have any entries in Service
|
|
158
|
+
* // that are not defined in this resource, we will delete them.
|
|
159
|
+
* const services = new incident.CatalogEntries("services", {
|
|
160
|
+
* catalogEntriesId: service.id,
|
|
161
|
+
* entries: Object.entries(catalog).sort().reduce((__obj, [externalId, entry]) => ({ ...__obj, [externalId]: {
|
|
162
|
+
* name: entry.metadata.name,
|
|
163
|
+
* aliases: [entry.metadata.name],
|
|
164
|
+
* attributeValues: pulumi.all([serviceOwner.id, tryOutput_(
|
|
165
|
+
* () => entry.spec.owner,
|
|
166
|
+
* () => null
|
|
167
|
+
* ), serviceDescription.id, tryOutput_(
|
|
168
|
+
* () => entry.metadata.description,
|
|
169
|
+
* () => null
|
|
170
|
+
* ), serviceTags.id, tryOutput_(
|
|
171
|
+
* () => entry.metadata.tags,
|
|
172
|
+
* () => null
|
|
173
|
+
* )]).apply(([serviceOwnerId, _try, serviceDescriptionId, _try1, serviceTagsId, _try2]) => Object.entries({
|
|
174
|
+
* [serviceOwnerId]: {
|
|
175
|
+
* value: _try,
|
|
176
|
+
* },
|
|
177
|
+
* [serviceDescriptionId]: {
|
|
178
|
+
* value: _try1,
|
|
179
|
+
* },
|
|
180
|
+
* [serviceTagsId]: {
|
|
181
|
+
* arrayValue: _try2,
|
|
182
|
+
* },
|
|
183
|
+
* }).sort().filter(([attribute, binding]) => try_(
|
|
184
|
+
* () => binding.value,
|
|
185
|
+
* () => binding.arrayValue
|
|
186
|
+
* ) != null).reduce((__obj, [attribute, binding]) => ({ ...__obj, [attribute]: binding }), {})),
|
|
187
|
+
* } }), {}),
|
|
188
|
+
* });
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
class CatalogEntries extends pulumi.CustomResource {
|
|
192
|
+
/**
|
|
193
|
+
* Get an existing CatalogEntries resource's state with the given name, ID, and optional extra
|
|
194
|
+
* properties used to qualify the lookup.
|
|
195
|
+
*
|
|
196
|
+
* @param name The _unique_ name of the resulting resource.
|
|
197
|
+
* @param id The _unique_ provider ID of the resource to lookup.
|
|
198
|
+
* @param state Any extra arguments used during the lookup.
|
|
199
|
+
* @param opts Optional settings to control the behavior of the CustomResource.
|
|
200
|
+
*/
|
|
201
|
+
static get(name, id, state, opts) {
|
|
202
|
+
return new CatalogEntries(name, state, { ...opts, id: id });
|
|
203
|
+
}
|
|
204
|
+
/** @internal */
|
|
205
|
+
static __pulumiType = 'incident:index/catalogEntries:CatalogEntries';
|
|
206
|
+
/**
|
|
207
|
+
* Returns true if the given object is an instance of CatalogEntries. This is designed to work even
|
|
208
|
+
* when multiple copies of the Pulumi SDK have been loaded into the same process.
|
|
209
|
+
*/
|
|
210
|
+
static isInstance(obj) {
|
|
211
|
+
if (obj === undefined || obj === null) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
return obj['__pulumiType'] === CatalogEntries.__pulumiType;
|
|
215
|
+
}
|
|
216
|
+
constructor(name, argsOrState, opts) {
|
|
217
|
+
let resourceInputs = {};
|
|
218
|
+
opts = opts || {};
|
|
219
|
+
if (opts.id) {
|
|
220
|
+
const state = argsOrState;
|
|
221
|
+
resourceInputs["catalogEntriesId"] = state?.catalogEntriesId;
|
|
222
|
+
resourceInputs["entries"] = state?.entries;
|
|
223
|
+
resourceInputs["managedAttributes"] = state?.managedAttributes;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
const args = argsOrState;
|
|
227
|
+
if (args?.catalogEntriesId === undefined && !opts.urn) {
|
|
228
|
+
throw new Error("Missing required property 'catalogEntriesId'");
|
|
229
|
+
}
|
|
230
|
+
if (args?.entries === undefined && !opts.urn) {
|
|
231
|
+
throw new Error("Missing required property 'entries'");
|
|
232
|
+
}
|
|
233
|
+
resourceInputs["catalogEntriesId"] = args?.catalogEntriesId;
|
|
234
|
+
resourceInputs["entries"] = args?.entries;
|
|
235
|
+
resourceInputs["managedAttributes"] = args?.managedAttributes;
|
|
236
|
+
}
|
|
237
|
+
opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
|
|
238
|
+
super(CatalogEntries.__pulumiType, name, resourceInputs, opts);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
exports.CatalogEntries = CatalogEntries;
|
|
242
|
+
//# sourceMappingURL=catalogEntries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogEntries.js","sourceRoot":"","sources":["../catalogEntries.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,iFAAiF;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjF,uDAAyC;AAGzC,uDAAyC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+JG;AACH,MAAa,cAAe,SAAQ,MAAM,CAAC,cAAc;IACrD;;;;;;;;OAQG;IACI,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAA2B,EAAE,KAA2B,EAAE,IAAmC;QACzH,OAAO,IAAI,cAAc,CAAC,IAAI,EAAO,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,gBAAgB;IACT,MAAM,CAAU,YAAY,GAAG,8CAA8C,CAAC;IAErF;;;OAGG;IACI,MAAM,CAAC,UAAU,CAAC,GAAQ;QAC7B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;YACnC,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,cAAc,CAAC,YAAY,CAAC;IAC/D,CAAC;IAuBD,YAAY,IAAY,EAAE,WAAsD,EAAE,IAAmC;QACjH,IAAI,cAAc,GAAkB,EAAE,CAAC;QACvC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,EAAE,EAAE;YACT,MAAM,KAAK,GAAG,WAA8C,CAAC;YAC7D,cAAc,CAAC,kBAAkB,CAAC,GAAG,KAAK,EAAE,gBAAgB,CAAC;YAC7D,cAAc,CAAC,SAAS,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC;YAC3C,cAAc,CAAC,mBAAmB,CAAC,GAAG,KAAK,EAAE,iBAAiB,CAAC;SAClE;aAAM;YACH,MAAM,IAAI,GAAG,WAA6C,CAAC;YAC3D,IAAI,IAAI,EAAE,gBAAgB,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;aACnE;YACD,IAAI,IAAI,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aAC1D;YACD,cAAc,CAAC,kBAAkB,CAAC,GAAG,IAAI,EAAE,gBAAgB,CAAC;YAC5D,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC;YAC1C,cAAc,CAAC,mBAAmB,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC;SACjE;QACD,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,CAAC;QACnE,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;;AAvEL,wCAwEC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
2
|
+
import * as inputs from "./types/input";
|
|
3
|
+
import * as outputs from "./types/output";
|
|
4
|
+
/**
|
|
5
|
+
* This resource manages a single entry for a given catalog type. It should be used when
|
|
6
|
+
* you're loading a small number (<100) of catalog entries and want to do so with a Terraform
|
|
7
|
+
* for_each, or you don't want terraform to remove any entries that it is not managing.
|
|
8
|
+
*
|
|
9
|
+
* If you're working with a large number of entries (>100) or want to be authoritative
|
|
10
|
+
* (remove anything Terraform does not manage) then prefer `incident.CatalogEntries`.
|
|
11
|
+
*
|
|
12
|
+
* ## Managing attributes on internal catalog types
|
|
13
|
+
*
|
|
14
|
+
* Some catalog types like Schedule are managed internally by incident.io - their entries are
|
|
15
|
+
* created and maintained by the product (e.g., the on-call system). You can't create or delete
|
|
16
|
+
* these entries via Terraform, but you can extend them with custom attributes.
|
|
17
|
+
*
|
|
18
|
+
* To do this:
|
|
19
|
+
* 1. Add a custom attribute to the catalog type via the incident.io web UI
|
|
20
|
+
* 2. Use data sources to look up the existing type, attribute, and entry
|
|
21
|
+
* 3. Set `managedAttributes` to manage only your custom attribute
|
|
22
|
+
*
|
|
23
|
+
* When you run `terraform destroy`, Terraform will clear the managed attributes rather than
|
|
24
|
+
* attempting to delete the entry.
|
|
25
|
+
*
|
|
26
|
+
* ## Example Usage
|
|
27
|
+
*
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import * as pulumi from "@pulumi/pulumi";
|
|
30
|
+
* import * as incident from "@incident-io/pulumi";
|
|
31
|
+
*
|
|
32
|
+
* const serviceTiers = [
|
|
33
|
+
* {
|
|
34
|
+
* name: "tier_1",
|
|
35
|
+
* description: "Critical customer-facing services",
|
|
36
|
+
* externalId: "service-tier-1",
|
|
37
|
+
* },
|
|
38
|
+
* {
|
|
39
|
+
* name: "tier_2",
|
|
40
|
+
* description: "Either customers or internal user processes are impacted if this service fails",
|
|
41
|
+
* externalId: "service-tier-2",
|
|
42
|
+
* },
|
|
43
|
+
* {
|
|
44
|
+
* name: "tier_3",
|
|
45
|
+
* description: "Non-essential services",
|
|
46
|
+
* externalId: "service-tier-3",
|
|
47
|
+
* },
|
|
48
|
+
* ];
|
|
49
|
+
* const serviceTier = new incident.CatalogType("service_tier", {
|
|
50
|
+
* name: "Service Tier",
|
|
51
|
+
* description: "Level of importance for each service",
|
|
52
|
+
* sourceRepoUrl: "",
|
|
53
|
+
* });
|
|
54
|
+
* const serviceTierDescription = new incident.CatalogTypeAttribute("service_tier_description", {
|
|
55
|
+
* catalogTypeId: serviceTier.id,
|
|
56
|
+
* name: "Description",
|
|
57
|
+
* type: "Text",
|
|
58
|
+
* });
|
|
59
|
+
* const serviceTierCatalogEntry: {[key: string]: incident.CatalogEntry} = {};
|
|
60
|
+
* for (const range of Object.entries(serviceTiers.reduce((__obj, tier) => ({ ...__obj, [tier.name]: tier }), {})).sort().map(([k, v]) => ({key: k, value: v}))) {
|
|
61
|
+
* serviceTierCatalogEntry[range.key] = new incident.CatalogEntry(`service_tier-${range.key}`, {
|
|
62
|
+
* catalogTypeId: serviceTier.id,
|
|
63
|
+
* name: range.value.name,
|
|
64
|
+
* externalId: range.value.externalId,
|
|
65
|
+
* attributeValues: [{
|
|
66
|
+
* attribute: serviceTierDescription.id,
|
|
67
|
+
* value: range.value.description,
|
|
68
|
+
* }],
|
|
69
|
+
* });
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare class CatalogEntry extends pulumi.CustomResource {
|
|
74
|
+
/**
|
|
75
|
+
* Get an existing CatalogEntry resource's state with the given name, ID, and optional extra
|
|
76
|
+
* properties used to qualify the lookup.
|
|
77
|
+
*
|
|
78
|
+
* @param name The _unique_ name of the resulting resource.
|
|
79
|
+
* @param id The _unique_ provider ID of the resource to lookup.
|
|
80
|
+
* @param state Any extra arguments used during the lookup.
|
|
81
|
+
* @param opts Optional settings to control the behavior of the CustomResource.
|
|
82
|
+
*/
|
|
83
|
+
static get(name: string, id: pulumi.Input<pulumi.ID>, state?: CatalogEntryState, opts?: pulumi.CustomResourceOptions): CatalogEntry;
|
|
84
|
+
/**
|
|
85
|
+
* Returns true if the given object is an instance of CatalogEntry. This is designed to work even
|
|
86
|
+
* when multiple copies of the Pulumi SDK have been loaded into the same process.
|
|
87
|
+
*/
|
|
88
|
+
static isInstance(obj: any): obj is CatalogEntry;
|
|
89
|
+
/**
|
|
90
|
+
* Optional aliases that can be used to reference this entry
|
|
91
|
+
*/
|
|
92
|
+
readonly aliases: pulumi.Output<string[]>;
|
|
93
|
+
readonly attributeValues: pulumi.Output<outputs.CatalogEntryAttributeValue[]>;
|
|
94
|
+
/**
|
|
95
|
+
* ID of this catalog type
|
|
96
|
+
*/
|
|
97
|
+
readonly catalogTypeId: pulumi.Output<string>;
|
|
98
|
+
/**
|
|
99
|
+
* An optional alternative ID for this entry, which is ensured to be unique for the type
|
|
100
|
+
*/
|
|
101
|
+
readonly externalId: pulumi.Output<string>;
|
|
102
|
+
/**
|
|
103
|
+
* The set of attributes that are managed by this resource. By default, all attributes are managed by this resource.
|
|
104
|
+
*/
|
|
105
|
+
readonly managedAttributes: pulumi.Output<string[] | undefined>;
|
|
106
|
+
/**
|
|
107
|
+
* Name is the human readable name of this entry
|
|
108
|
+
*/
|
|
109
|
+
readonly name: pulumi.Output<string>;
|
|
110
|
+
/**
|
|
111
|
+
* When catalog type is ranked, this is used to help order things
|
|
112
|
+
*/
|
|
113
|
+
readonly rank: pulumi.Output<number>;
|
|
114
|
+
/**
|
|
115
|
+
* Create a CatalogEntry resource with the given unique name, arguments, and options.
|
|
116
|
+
*
|
|
117
|
+
* @param name The _unique_ name of the resource.
|
|
118
|
+
* @param args The arguments to use to populate this resource's properties.
|
|
119
|
+
* @param opts A bag of options that control this resource's behavior.
|
|
120
|
+
*/
|
|
121
|
+
constructor(name: string, args: CatalogEntryArgs, opts?: pulumi.CustomResourceOptions);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Input properties used for looking up and filtering CatalogEntry resources.
|
|
125
|
+
*/
|
|
126
|
+
export interface CatalogEntryState {
|
|
127
|
+
/**
|
|
128
|
+
* Optional aliases that can be used to reference this entry
|
|
129
|
+
*/
|
|
130
|
+
aliases?: pulumi.Input<pulumi.Input<string>[] | undefined>;
|
|
131
|
+
attributeValues?: pulumi.Input<pulumi.Input<inputs.CatalogEntryAttributeValue>[] | undefined>;
|
|
132
|
+
/**
|
|
133
|
+
* ID of this catalog type
|
|
134
|
+
*/
|
|
135
|
+
catalogTypeId?: pulumi.Input<string | undefined>;
|
|
136
|
+
/**
|
|
137
|
+
* An optional alternative ID for this entry, which is ensured to be unique for the type
|
|
138
|
+
*/
|
|
139
|
+
externalId?: pulumi.Input<string | undefined>;
|
|
140
|
+
/**
|
|
141
|
+
* The set of attributes that are managed by this resource. By default, all attributes are managed by this resource.
|
|
142
|
+
*/
|
|
143
|
+
managedAttributes?: pulumi.Input<pulumi.Input<string>[] | undefined>;
|
|
144
|
+
/**
|
|
145
|
+
* Name is the human readable name of this entry
|
|
146
|
+
*/
|
|
147
|
+
name?: pulumi.Input<string | undefined>;
|
|
148
|
+
/**
|
|
149
|
+
* When catalog type is ranked, this is used to help order things
|
|
150
|
+
*/
|
|
151
|
+
rank?: pulumi.Input<number | undefined>;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The set of arguments for constructing a CatalogEntry resource.
|
|
155
|
+
*/
|
|
156
|
+
export interface CatalogEntryArgs {
|
|
157
|
+
/**
|
|
158
|
+
* Optional aliases that can be used to reference this entry
|
|
159
|
+
*/
|
|
160
|
+
aliases?: pulumi.Input<pulumi.Input<string>[] | undefined>;
|
|
161
|
+
attributeValues: pulumi.Input<pulumi.Input<inputs.CatalogEntryAttributeValue>[]>;
|
|
162
|
+
/**
|
|
163
|
+
* ID of this catalog type
|
|
164
|
+
*/
|
|
165
|
+
catalogTypeId: pulumi.Input<string>;
|
|
166
|
+
/**
|
|
167
|
+
* An optional alternative ID for this entry, which is ensured to be unique for the type
|
|
168
|
+
*/
|
|
169
|
+
externalId?: pulumi.Input<string | undefined>;
|
|
170
|
+
/**
|
|
171
|
+
* The set of attributes that are managed by this resource. By default, all attributes are managed by this resource.
|
|
172
|
+
*/
|
|
173
|
+
managedAttributes?: pulumi.Input<pulumi.Input<string>[] | undefined>;
|
|
174
|
+
/**
|
|
175
|
+
* Name is the human readable name of this entry
|
|
176
|
+
*/
|
|
177
|
+
name?: pulumi.Input<string | undefined>;
|
|
178
|
+
/**
|
|
179
|
+
* When catalog type is ranked, this is used to help order things
|
|
180
|
+
*/
|
|
181
|
+
rank?: pulumi.Input<number | undefined>;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=catalogEntry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogEntry.d.ts","sourceRoot":"","sources":["../catalogEntry.ts"],"names":[],"mappings":"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"}
|