@fnndsc/stratus 0.0.0 → 0.2.0

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.
Files changed (134) hide show
  1. package/README.md +6 -1
  2. package/dist/args.d.ts +20 -6
  3. package/dist/args.js +45 -2
  4. package/dist/args.js.map +1 -1
  5. package/dist/backend.d.ts +35 -4
  6. package/dist/backend.js +77 -12
  7. package/dist/backend.js.map +1 -1
  8. package/dist/cloud/builder.d.ts +172 -0
  9. package/dist/cloud/builder.js +41 -0
  10. package/dist/cloud/builder.js.map +1 -0
  11. package/dist/cloud/driver.d.ts +149 -0
  12. package/dist/cloud/fake/builder.d.ts +147 -0
  13. package/dist/cloud/fake/builder.js +213 -0
  14. package/dist/cloud/fake/builder.js.map +1 -0
  15. package/dist/cloud/fake/driver.d.ts +73 -1
  16. package/dist/cloud/fake/driver.js +122 -0
  17. package/dist/cloud/fake/driver.js.map +1 -1
  18. package/dist/cloud/oci/api.d.ts +3 -2
  19. package/dist/cloud/oci/api.js +2 -0
  20. package/dist/cloud/oci/api.js.map +1 -1
  21. package/dist/cloud/oci/buildApi.d.ts +61 -0
  22. package/dist/cloud/oci/buildApi.js +132 -0
  23. package/dist/cloud/oci/buildApi.js.map +1 -0
  24. package/dist/cloud/oci/builder.d.ts +172 -0
  25. package/dist/cloud/oci/builder.js +370 -0
  26. package/dist/cloud/oci/builder.js.map +1 -0
  27. package/dist/cloud/oci/driver.d.ts +23 -2
  28. package/dist/cloud/oci/driver.js +107 -1
  29. package/dist/cloud/oci/driver.js.map +1 -1
  30. package/dist/cloud/oci/planRead.d.ts +38 -0
  31. package/dist/cloud/oci/planRead.js +67 -0
  32. package/dist/cloud/oci/planRead.js.map +1 -0
  33. package/dist/cloud/oci/prices.d.ts +22 -1
  34. package/dist/cloud/oci/prices.js +35 -0
  35. package/dist/cloud/oci/prices.js.map +1 -1
  36. package/dist/cloud/oci/resourceApi.d.ts +114 -0
  37. package/dist/cloud/oci/resourceApi.js +261 -0
  38. package/dist/cloud/oci/resourceApi.js.map +1 -0
  39. package/dist/cloud/oci/resourceMap.d.ts +44 -0
  40. package/dist/cloud/oci/resourceMap.js +70 -0
  41. package/dist/cloud/oci/resourceMap.js.map +1 -0
  42. package/dist/cloud/oci/rmApi.d.ts +74 -0
  43. package/dist/cloud/oci/rmApi.js +141 -0
  44. package/dist/cloud/oci/rmApi.js.map +1 -0
  45. package/dist/cloud/oci/stackVars.d.ts +49 -0
  46. package/dist/cloud/oci/stackVars.js +70 -0
  47. package/dist/cloud/oci/stackVars.js.map +1 -0
  48. package/dist/cluster/fakeKube.d.ts +43 -0
  49. package/dist/cluster/fakeKube.js +86 -0
  50. package/dist/cluster/fakeKube.js.map +1 -0
  51. package/dist/cluster/kube.d.ts +40 -0
  52. package/dist/cluster/kube.js +46 -0
  53. package/dist/cluster/kube.js.map +1 -0
  54. package/dist/cluster/kubeHttp.d.ts +16 -0
  55. package/dist/cluster/kubeHttp.js +86 -0
  56. package/dist/cluster/kubeHttp.js.map +1 -0
  57. package/dist/commands/build.d.ts +90 -0
  58. package/dist/commands/build.js +358 -0
  59. package/dist/commands/build.js.map +1 -0
  60. package/dist/commands/capacity.d.ts +37 -0
  61. package/dist/commands/capacity.js +93 -0
  62. package/dist/commands/capacity.js.map +1 -0
  63. package/dist/commands/domain.d.ts +45 -0
  64. package/dist/commands/domain.js +150 -0
  65. package/dist/commands/domain.js.map +1 -0
  66. package/dist/commands/spend.d.ts +22 -0
  67. package/dist/commands/spend.js +65 -0
  68. package/dist/commands/spend.js.map +1 -0
  69. package/dist/commands/teardown.d.ts +10 -0
  70. package/dist/commands/teardown.js +72 -0
  71. package/dist/commands/teardown.js.map +1 -0
  72. package/dist/commands/verify.d.ts +28 -0
  73. package/dist/commands/verify.js +98 -0
  74. package/dist/commands/verify.js.map +1 -0
  75. package/dist/domain/adopt.d.ts +60 -0
  76. package/dist/domain/adopt.js +143 -0
  77. package/dist/domain/adopt.js.map +1 -0
  78. package/dist/domain/sizing.d.ts +55 -0
  79. package/dist/domain/sizing.js +66 -0
  80. package/dist/domain/sizing.js.map +1 -0
  81. package/dist/domain/spec.d.ts +101 -0
  82. package/dist/domain/spec.js +191 -0
  83. package/dist/domain/spec.js.map +1 -0
  84. package/dist/domain/spend.d.ts +84 -0
  85. package/dist/domain/spend.js +109 -0
  86. package/dist/domain/spend.js.map +1 -0
  87. package/dist/domain/state.d.ts +149 -0
  88. package/dist/domain/state.js +182 -0
  89. package/dist/domain/state.js.map +1 -0
  90. package/dist/domain/steps.d.ts +82 -0
  91. package/dist/domain/steps.js +311 -0
  92. package/dist/domain/steps.js.map +1 -0
  93. package/dist/domain/teardown.d.ts +38 -0
  94. package/dist/domain/teardown.js +48 -0
  95. package/dist/domain/teardown.js.map +1 -0
  96. package/dist/domain/verify.d.ts +68 -0
  97. package/dist/domain/verify.js +216 -0
  98. package/dist/domain/verify.js.map +1 -0
  99. package/dist/domain/view.d.ts +24 -0
  100. package/dist/domain/view.js +38 -0
  101. package/dist/domain/view.js.map +1 -0
  102. package/dist/domains/harborOci.d.ts +75 -0
  103. package/dist/domains/harborOci.js +165 -0
  104. package/dist/domains/harborOci.js.map +1 -0
  105. package/dist/index.d.ts +7 -0
  106. package/dist/index.js +6 -0
  107. package/dist/index.js.map +1 -1
  108. package/dist/installer/assisted.d.ts +97 -0
  109. package/dist/installer/assisted.js +171 -0
  110. package/dist/installer/assisted.js.map +1 -0
  111. package/dist/installer/installer.d.ts +86 -0
  112. package/dist/installer/installer.js +15 -0
  113. package/dist/installer/installer.js.map +1 -0
  114. package/dist/prompt.d.ts +33 -0
  115. package/dist/prompt.js +46 -0
  116. package/dist/prompt.js.map +1 -0
  117. package/dist/session.d.ts +2 -0
  118. package/dist/session.js +4 -0
  119. package/dist/session.js.map +1 -1
  120. package/dist/stratus.js +75 -3
  121. package/dist/stratus.js.map +1 -1
  122. package/dist/vfs/domains.d.ts +39 -0
  123. package/dist/vfs/domains.js +128 -0
  124. package/dist/vfs/domains.js.map +1 -0
  125. package/dist/vfs/look.d.ts +10 -0
  126. package/dist/vfs/look.js +43 -8
  127. package/dist/vfs/look.js.map +1 -1
  128. package/dist/vfs/resources.d.ts +136 -0
  129. package/dist/vfs/resources.js +325 -0
  130. package/dist/vfs/resources.js.map +1 -0
  131. package/dist/vfs/tenancy.d.ts +15 -2
  132. package/dist/vfs/tenancy.js +53 -17
  133. package/dist/vfs/tenancy.js.map +1 -1
  134. package/package.json +14 -7
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @file A Terraform plan, as Resource Manager returns it in JSON, read into
3
+ * the rows the operator is asked about (docs/stratus.adoc, D6).
4
+ *
5
+ * OCI writes its own `Oracle-Tags` (who made a resource and when) after an
6
+ * apply; Terraform then wants to strip them on every re-plan. An update whose
7
+ * only difference is those tags is drift, counted apart; anything else is a
8
+ * real change, and the apply is refused unless asked for by name. A replace
9
+ * (delete then create) is never drift, whatever caused it: `harbor-oci` saw
10
+ * tag drift on instances recreate every load-balancer backend.
11
+ *
12
+ * @module
13
+ */
14
+ import type { PlanRow } from '../builder.js';
15
+ /** The tag namespace OCI writes on its own. */
16
+ export declare const ORACLE_TAGS: string;
17
+ /**
18
+ * A Terraform type's neutral kind, or the type itself.
19
+ *
20
+ * @param type - The resource type (`oci_core_instance`).
21
+ * @returns The kind.
22
+ */
23
+ export declare function terraformType_kind(type: string): string;
24
+ /**
25
+ * Whether an update changes nothing but OCI's own tags.
26
+ *
27
+ * @param before - The resource before.
28
+ * @param after - The resource after.
29
+ * @returns True when only `Oracle-Tags.*` defined tags differ.
30
+ */
31
+ export declare function update_isDrift(before: Record<string, unknown> | null | undefined, after: Record<string, unknown> | null | undefined): boolean;
32
+ /**
33
+ * A plan's rows.
34
+ *
35
+ * @param plan - Terraform's plan JSON.
36
+ * @returns One row per resource the plan touches (a replace is a destroy and a create); none for no-ops and reads.
37
+ */
38
+ export declare function planRows_read(plan: unknown): PlanRow[];
@@ -0,0 +1,67 @@
1
+ /** The tag namespace OCI writes on its own. */
2
+ export const ORACLE_TAGS = 'Oracle-Tags';
3
+ /** The neutral kind a Terraform resource type is listed under. */
4
+ const TYPE_KINDS = [
5
+ [/^oci_core_instance$/, 'instances'],
6
+ [/^oci_core_vcn$/, 'networks'],
7
+ [/^oci_core_subnet$/, 'subnets'],
8
+ [/^oci_core_network_security_group/, 'securitygroups'],
9
+ [/^oci_load_balancer|^oci_network_load_balancer/, 'loadbalancers'],
10
+ [/^oci_core_volume|^oci_core_boot_volume/, 'volumes'],
11
+ [/^oci_objectstorage_bucket$/, 'buckets'],
12
+ [/^oci_dns_/, 'dns'],
13
+ ];
14
+ /**
15
+ * A Terraform type's neutral kind, or the type itself.
16
+ *
17
+ * @param type - The resource type (`oci_core_instance`).
18
+ * @returns The kind.
19
+ */
20
+ export function terraformType_kind(type) {
21
+ return TYPE_KINDS.find(([pattern]) => pattern.test(type))?.[1] ?? type;
22
+ }
23
+ /**
24
+ * Whether an update changes nothing but OCI's own tags.
25
+ *
26
+ * @param before - The resource before.
27
+ * @param after - The resource after.
28
+ * @returns True when only `Oracle-Tags.*` defined tags differ.
29
+ */
30
+ export function update_isDrift(before, after) {
31
+ if (before === null || before === undefined || after === null || after === undefined)
32
+ return false;
33
+ const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
34
+ const changed = [...keys].filter((key) => JSON.stringify(before[key]) !== JSON.stringify(after[key]));
35
+ if (changed.length === 0 || changed.some((key) => key !== 'defined_tags'))
36
+ return false;
37
+ const tagsBefore = (before['defined_tags'] ?? {});
38
+ const tagsAfter = (after['defined_tags'] ?? {});
39
+ const tagKeys = new Set([...Object.keys(tagsBefore), ...Object.keys(tagsAfter)]);
40
+ return [...tagKeys]
41
+ .filter((key) => JSON.stringify(tagsBefore[key]) !== JSON.stringify(tagsAfter[key]))
42
+ .every((key) => key.startsWith(`${ORACLE_TAGS}.`));
43
+ }
44
+ /**
45
+ * A plan's rows.
46
+ *
47
+ * @param plan - Terraform's plan JSON.
48
+ * @returns One row per resource the plan touches (a replace is a destroy and a create); none for no-ops and reads.
49
+ */
50
+ export function planRows_read(plan) {
51
+ const changes = (plan?.resource_changes) ?? [];
52
+ const rows = [];
53
+ for (const change of changes) {
54
+ const actions = change.change?.actions ?? [];
55
+ const kind = terraformType_kind(change.type ?? '');
56
+ const name = change.address ?? `${change.type ?? '?'}.${change.name ?? '?'}`;
57
+ if (actions.includes('delete'))
58
+ rows.push({ action: 'destroy', kind, name });
59
+ if (actions.includes('create'))
60
+ rows.push({ action: 'create', kind, name });
61
+ if (actions.length === 1 && actions[0] === 'update') {
62
+ rows.push({ action: 'change', kind, name, ...(update_isDrift(change.change?.before, change.change?.after) ? { drift: true } : {}) });
63
+ }
64
+ }
65
+ return rows;
66
+ }
67
+ //# sourceMappingURL=planRead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planRead.js","sourceRoot":"","sources":["../../../src/cloud/oci/planRead.ts"],"names":[],"mappings":"AAeA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAW,aAAa,CAAC;AAUjD,kEAAkE;AAClE,MAAM,UAAU,GAAoC;IAClD,CAAC,qBAAqB,EAAE,WAAW,CAAC;IACpC,CAAC,gBAAgB,EAAE,UAAU,CAAC;IAC9B,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAChC,CAAC,kCAAkC,EAAE,gBAAgB,CAAC;IACtD,CAAC,+CAA+C,EAAE,eAAe,CAAC;IAClE,CAAC,wCAAwC,EAAE,SAAS,CAAC;IACrD,CAAC,4BAA4B,EAAE,SAAS,CAAC;IACzC,CAAC,WAAW,EAAE,KAAK,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAmB,EAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACpG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkD,EAAE,KAAiD;IAClI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnG,MAAM,IAAI,GAAgB,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAa,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAW,EAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAW,EAAW,EAAE,CAAC,GAAG,KAAK,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACzG,MAAM,UAAU,GAA4B,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAA4B,CAAC;IACtG,MAAM,SAAS,GAA4B,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAA4B,CAAC;IACpG,MAAM,OAAO,GAAgB,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,OAAO,CAAC;SAChB,MAAM,CAAC,CAAC,GAAW,EAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;SACpG,KAAK,CAAC,CAAC,GAAW,EAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,OAAO,GAAqB,CAAE,IAAuD,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACrH,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAa,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QACvD,MAAM,IAAI,GAAW,kBAAkB,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAW,MAAM,CAAC,OAAO,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QACrF,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvI,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- import type { CloudPrice } from '../driver.js';
13
+ import type { CloudPrice, ServicePrices } from '../driver.js';
14
14
  /** Where Oracle publishes its prices. */
15
15
  export declare const PRICE_LIST_URL: string;
16
16
  /** What the shape list does not say about a flexible shape. */
@@ -63,6 +63,27 @@ export declare function shapePrices_map(parts: ReadonlyMap<string, number>): Clo
63
63
  export type JsonFetch = (url: string) => Promise<unknown>;
64
64
  /** The default fetch: Node's, thirty seconds. */
65
65
  export declare const jsonFetch_default: JsonFetch;
66
+ /** The price list's parts for storage and load balancing, as `harbor-oci` reads them. */
67
+ export declare const SERVICE_PARTS: {
68
+ readonly volumeGibMonth: "B91961";
69
+ readonly vpuGibMonth: "B91962";
70
+ readonly balancerHour: "B93030";
71
+ readonly balancerMbpsHour: "B93031";
72
+ };
73
+ /**
74
+ * Storage and load-balancing prices from part prices.
75
+ *
76
+ * @param parts - Price per part number.
77
+ * @returns The prices, or null when a part is missing.
78
+ */
79
+ export declare function servicePrices_map(parts: ReadonlyMap<string, number>): ServicePrices | null;
80
+ /**
81
+ * Oracle's list prices for storage and load balancing.
82
+ *
83
+ * @param fetchJson - How the list is fetched.
84
+ * @returns The prices, or null when the list lacks a part.
85
+ */
86
+ export declare function ociServicePrices_read(fetchJson?: JsonFetch): Promise<ServicePrices | null>;
66
87
  /**
67
88
  * Oracle's list prices for the flexible shapes, per hour.
68
89
  *
@@ -89,6 +89,41 @@ export const jsonFetch_default = async (url) => {
89
89
  throw new Error(`price list: ${response.status} ${response.statusText}`);
90
90
  return response.json();
91
91
  };
92
+ /** The price list's parts for storage and load balancing, as `harbor-oci` reads them. */
93
+ export const SERVICE_PARTS = {
94
+ volumeGibMonth: 'B91961',
95
+ vpuGibMonth: 'B91962',
96
+ balancerHour: 'B93030',
97
+ balancerMbpsHour: 'B93031',
98
+ };
99
+ /**
100
+ * Storage and load-balancing prices from part prices.
101
+ *
102
+ * @param parts - Price per part number.
103
+ * @returns The prices, or null when a part is missing.
104
+ */
105
+ export function servicePrices_map(parts) {
106
+ const volumeGibMonth = parts.get(SERVICE_PARTS.volumeGibMonth);
107
+ const vpuGibMonth = parts.get(SERVICE_PARTS.vpuGibMonth);
108
+ const balancerHour = parts.get(SERVICE_PARTS.balancerHour);
109
+ const balancerMbpsHour = parts.get(SERVICE_PARTS.balancerMbpsHour);
110
+ if (volumeGibMonth === undefined || vpuGibMonth === undefined || balancerHour === undefined || balancerMbpsHour === undefined)
111
+ return null;
112
+ return { volumeGibMonth, vpuGibMonth, balancerHour, balancerMbpsHour, currency: PRICE_CURRENCY };
113
+ }
114
+ /**
115
+ * Oracle's list prices for storage and load balancing.
116
+ *
117
+ * @param fetchJson - How the list is fetched.
118
+ * @returns The prices, or null when the list lacks a part.
119
+ */
120
+ export async function ociServicePrices_read(fetchJson = jsonFetch_default) {
121
+ const reply = await fetchJson(PRICE_LIST_URL);
122
+ const items = typeof reply === 'object' && reply !== null ? reply.items : undefined;
123
+ if (!Array.isArray(items))
124
+ throw new Error('price list: no items in the reply');
125
+ return servicePrices_map(partPrices_index(items));
126
+ }
92
127
  /**
93
128
  * Oracle's list prices for the flexible shapes, per hour.
94
129
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/cloud/oci/prices.ts"],"names":[],"mappings":"AAcA,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAW,+DAA+D,CAAC;AACtG,0CAA0C;AAC1C,MAAM,WAAW,GAAW,eAAe,CAAC;AAC5C,yBAAyB;AACzB,MAAM,cAAc,GAAW,KAAK,CAAC;AAcrC,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAyC;IAC/D,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjG,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjG,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjG,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;IACnG,wBAAwB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;IACzG,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjG,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;IACnG,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;IACnG,wBAAwB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;IACzG,mBAAmB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtG,sBAAsB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;IAC9G,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxG,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxG,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxG,uBAAuB,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;CACjH,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,IAAI,GAAW,KAAK,CAAC;IACzB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAClH,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmC;IAClE,MAAM,KAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,SAAS;QAC5C,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,yBAAyB,IAAI,EAAE,EAAE,CAAC;YAChE,IAAI,YAAY,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,YAAY,KAAK,cAAc;gBAAE,SAAS;YACtG,MAAM,MAAM,GAAa,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,CAAC;iBACjD,MAAM,CAAC,CAAC,KAAK,EAAW,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC;iBACvD,GAAG,CAAC,CAAC,KAAK,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC3C,MAAM,CAAC,CAAC,KAAa,EAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkC;IAChE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAuB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAuB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACzD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAa,EAAE,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/F,CAAC;AAKD,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAc,KAAK,EAAE,GAAW,EAAoB,EAAE;IAClF,MAAM,QAAQ,GAAa,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,YAAuB,iBAAiB;IAC3E,MAAM,KAAK,GAAY,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,KAAK,GAAY,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAChF,OAAO,eAAe,CAAC,gBAAgB,CAAC,KAAwB,CAAC,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/cloud/oci/prices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import type * as common from 'oci-common';
2
+ /** Tags as OCI keeps them on every resource. */
3
+ export interface OciTags {
4
+ readonly freeformTags: Readonly<Record<string, string>>;
5
+ readonly definedTags: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
6
+ }
7
+ /** What every resource record carries. */
8
+ export interface OciResourceRecord extends OciTags {
9
+ readonly id: string;
10
+ readonly displayName: string;
11
+ readonly lifecycleState: string;
12
+ /** ISO 8601, or empty. */
13
+ readonly timeCreated: string;
14
+ readonly raw: unknown;
15
+ }
16
+ /** An instance. */
17
+ export interface OciInstanceRecord extends OciResourceRecord {
18
+ readonly shape: string;
19
+ readonly availabilityDomain: string;
20
+ /** Its OCPUs and memory, when the cloud says (a flexible shape's choice). */
21
+ readonly ocpus?: number;
22
+ readonly memoryInGBs?: number;
23
+ }
24
+ /** A VNIC attached to an instance. */
25
+ export interface OciVnicAttachmentRecord {
26
+ readonly instanceId: string;
27
+ readonly vnicId: string;
28
+ readonly lifecycleState: string;
29
+ }
30
+ /** A VNIC's addresses. */
31
+ export interface OciVnicRecord {
32
+ readonly privateIp: string | null;
33
+ readonly publicIp: string | null;
34
+ }
35
+ /** A subnet or a network security group: a member of a VCN. */
36
+ export interface OciVcnMemberRecord extends OciResourceRecord {
37
+ readonly vcnId: string;
38
+ }
39
+ /** A load balancer. */
40
+ export interface OciLoadBalancerRecord extends OciResourceRecord {
41
+ readonly ipAddresses: ReadonlyArray<string>;
42
+ readonly shapeName: string;
43
+ /** A flexible shape's minimum bandwidth, what it bills by. */
44
+ readonly minimumMbps?: number;
45
+ }
46
+ /** A block or boot volume. */
47
+ export interface OciVolumeRecord extends OciResourceRecord {
48
+ readonly sizeInGBs: number;
49
+ readonly availabilityDomain: string;
50
+ /** Its performance, in volume performance units per GB. */
51
+ readonly vpusPerGB?: number;
52
+ }
53
+ /** A volume's attachment to an instance. */
54
+ export interface OciAttachmentRecord {
55
+ readonly volumeId: string;
56
+ readonly instanceId: string;
57
+ readonly lifecycleState: string;
58
+ }
59
+ /** An object in a bucket. */
60
+ export interface OciObjectRecord {
61
+ readonly name: string;
62
+ readonly size: number;
63
+ /** ISO 8601, or empty. */
64
+ readonly timeModified: string;
65
+ }
66
+ /** A pre-authenticated request. */
67
+ export interface OciParRecord {
68
+ readonly name: string;
69
+ readonly objectName: string | null;
70
+ readonly accessType: string;
71
+ /** ISO 8601. */
72
+ readonly timeExpires: string;
73
+ }
74
+ /** A DNS record. */
75
+ export interface OciDnsRecord {
76
+ readonly domain: string;
77
+ readonly rtype: string;
78
+ readonly ttl: number;
79
+ readonly rdata: string;
80
+ }
81
+ /** One hit of a structured search. */
82
+ export interface OciSearchRecord {
83
+ readonly resourceType: string;
84
+ readonly lifecycleState: string;
85
+ }
86
+ /** The resource calls the driver makes; every list is in one compartment and region. */
87
+ export interface OciResourceApi {
88
+ instances_list(region: string, compartmentId: string): Promise<OciInstanceRecord[]>;
89
+ vnicAttachments_list(region: string, compartmentId: string): Promise<OciVnicAttachmentRecord[]>;
90
+ vnic_get(region: string, vnicId: string): Promise<OciVnicRecord>;
91
+ vcns_list(region: string, compartmentId: string): Promise<OciResourceRecord[]>;
92
+ subnets_list(region: string, compartmentId: string): Promise<OciVcnMemberRecord[]>;
93
+ nsgs_list(region: string, compartmentId: string): Promise<OciVcnMemberRecord[]>;
94
+ loadBalancers_list(region: string, compartmentId: string): Promise<OciLoadBalancerRecord[]>;
95
+ volumes_list(region: string, compartmentId: string): Promise<OciVolumeRecord[]>;
96
+ bootVolumes_list(region: string, compartmentId: string, availabilityDomain: string): Promise<OciVolumeRecord[]>;
97
+ volumeAttachments_list(region: string, compartmentId: string): Promise<OciAttachmentRecord[]>;
98
+ bootVolumeAttachments_list(region: string, compartmentId: string, availabilityDomain: string): Promise<OciAttachmentRecord[]>;
99
+ namespace_get(region: string): Promise<string>;
100
+ buckets_list(region: string, namespace: string, compartmentId: string): Promise<OciResourceRecord[]>;
101
+ objects_list(region: string, namespace: string, bucket: string): Promise<OciObjectRecord[]>;
102
+ pars_list(region: string, namespace: string, bucket: string): Promise<OciParRecord[]>;
103
+ object_get(region: string, namespace: string, bucket: string, object: string): Promise<Buffer>;
104
+ zones_list(region: string, compartmentId: string): Promise<OciResourceRecord[]>;
105
+ zoneRecords_list(region: string, zoneId: string): Promise<OciDnsRecord[]>;
106
+ search_list(region: string, query: string): Promise<OciSearchRecord[]>;
107
+ }
108
+ /**
109
+ * The resource calls over the SDK.
110
+ *
111
+ * @param provider - The credential the clients sign with.
112
+ * @returns The calls.
113
+ */
114
+ export declare function ociResourceApi_make(provider: common.AuthenticationDetailsProvider): OciResourceApi;
@@ -0,0 +1,261 @@
1
+ import * as core from 'oci-core';
2
+ import * as dns from 'oci-dns';
3
+ import * as loadbalancer from 'oci-loadbalancer';
4
+ import * as objectstorage from 'oci-objectstorage';
5
+ import * as resourcesearch from 'oci-resourcesearch';
6
+ /** Every item of a paged call. */
7
+ async function pages_drain(page_get) {
8
+ const items = [];
9
+ let token = undefined;
10
+ do {
11
+ const page = await page_get(token);
12
+ items.push(...page.items);
13
+ token = page.next === '' ? undefined : page.next;
14
+ } while (token !== undefined);
15
+ return items;
16
+ }
17
+ /** The page argument, when there is one. */
18
+ function page_arg(page) {
19
+ return page !== undefined ? { page } : {};
20
+ }
21
+ /** A date as ISO 8601, or empty. */
22
+ function iso_of(value) {
23
+ return value === undefined ? '' : new Date(value).toISOString();
24
+ }
25
+ /** The fields every resource record carries, from an SDK model. */
26
+ function resource_of(model) {
27
+ return {
28
+ id: model.id,
29
+ displayName: model.displayName ?? '',
30
+ lifecycleState: String(model.lifecycleState ?? ''),
31
+ timeCreated: iso_of(model.timeCreated),
32
+ freeformTags: model.freeformTags ?? {},
33
+ definedTags: model.definedTags ?? {},
34
+ raw: model,
35
+ };
36
+ }
37
+ /** A response body's bytes, whichever stream the SDK handed back. */
38
+ async function body_read(value) {
39
+ const chunks = [];
40
+ if ('getReader' in value) {
41
+ const reader = value.getReader();
42
+ for (;;) {
43
+ const next = await reader.read();
44
+ if (next.done)
45
+ break;
46
+ chunks.push(Buffer.from(next.value));
47
+ }
48
+ return Buffer.concat(chunks);
49
+ }
50
+ for await (const chunk of value)
51
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
52
+ return Buffer.concat(chunks);
53
+ }
54
+ /** The service clients, one per service and region. */
55
+ class Clients {
56
+ provider;
57
+ made = new Map();
58
+ constructor(provider) {
59
+ this.provider = provider;
60
+ }
61
+ /** The client for a service in a region, made on first use. */
62
+ client_for(service, region, make) {
63
+ const key = `${service}/${region}`;
64
+ const found = this.made.get(key);
65
+ if (found !== undefined)
66
+ return found;
67
+ const client = make(this.provider);
68
+ client.regionId = region;
69
+ this.made.set(key, client);
70
+ return client;
71
+ }
72
+ compute(region) {
73
+ return this.client_for('compute', region, (provider) => new core.ComputeClient({ authenticationDetailsProvider: provider }));
74
+ }
75
+ network(region) {
76
+ return this.client_for('network', region, (provider) => new core.VirtualNetworkClient({ authenticationDetailsProvider: provider }));
77
+ }
78
+ storage(region) {
79
+ return this.client_for('storage', region, (provider) => new core.BlockstorageClient({ authenticationDetailsProvider: provider }));
80
+ }
81
+ balancer(region) {
82
+ return this.client_for('balancer', region, (provider) => new loadbalancer.LoadBalancerClient({ authenticationDetailsProvider: provider }));
83
+ }
84
+ objects(region) {
85
+ return this.client_for('objects', region, (provider) => new objectstorage.ObjectStorageClient({ authenticationDetailsProvider: provider }));
86
+ }
87
+ dns(region) {
88
+ return this.client_for('dns', region, (provider) => new dns.DnsClient({ authenticationDetailsProvider: provider }));
89
+ }
90
+ search(region) {
91
+ return this.client_for('search', region, (provider) => new resourcesearch.ResourceSearchClient({ authenticationDetailsProvider: provider }));
92
+ }
93
+ }
94
+ /**
95
+ * The resource calls over the SDK.
96
+ *
97
+ * @param provider - The credential the clients sign with.
98
+ * @returns The calls.
99
+ */
100
+ export function ociResourceApi_make(provider) {
101
+ const clients = new Clients(provider);
102
+ return {
103
+ async instances_list(region, compartmentId) {
104
+ const items = await pages_drain(async (page) => {
105
+ const answer = await clients.compute(region).listInstances({ compartmentId, ...page_arg(page) });
106
+ return { items: answer.items, next: answer.opcNextPage };
107
+ });
108
+ return items.map((instance) => ({
109
+ ...resource_of(instance), shape: instance.shape, availabilityDomain: instance.availabilityDomain,
110
+ ...(instance.shapeConfig?.ocpus !== undefined ? { ocpus: instance.shapeConfig.ocpus } : {}),
111
+ ...(instance.shapeConfig?.memoryInGBs !== undefined ? { memoryInGBs: instance.shapeConfig.memoryInGBs } : {}),
112
+ }));
113
+ },
114
+ async vnicAttachments_list(region, compartmentId) {
115
+ const items = await pages_drain(async (page) => {
116
+ const answer = await clients.compute(region).listVnicAttachments({ compartmentId, ...page_arg(page) });
117
+ return { items: answer.items, next: answer.opcNextPage };
118
+ });
119
+ return items.map((attachment) => ({
120
+ instanceId: attachment.instanceId, vnicId: attachment.vnicId ?? '', lifecycleState: String(attachment.lifecycleState),
121
+ }));
122
+ },
123
+ async vnic_get(region, vnicId) {
124
+ const answer = await clients.network(region).getVnic({ vnicId });
125
+ return { privateIp: answer.vnic.privateIp ?? null, publicIp: answer.vnic.publicIp ?? null };
126
+ },
127
+ async vcns_list(region, compartmentId) {
128
+ const items = await pages_drain(async (page) => {
129
+ const answer = await clients.network(region).listVcns({ compartmentId, ...page_arg(page) });
130
+ return { items: answer.items, next: answer.opcNextPage };
131
+ });
132
+ return items.map(resource_of);
133
+ },
134
+ async subnets_list(region, compartmentId) {
135
+ const items = await pages_drain(async (page) => {
136
+ const answer = await clients.network(region).listSubnets({ compartmentId, ...page_arg(page) });
137
+ return { items: answer.items, next: answer.opcNextPage };
138
+ });
139
+ return items.map((subnet) => ({ ...resource_of(subnet), vcnId: subnet.vcnId }));
140
+ },
141
+ async nsgs_list(region, compartmentId) {
142
+ const items = await pages_drain(async (page) => {
143
+ const answer = await clients.network(region).listNetworkSecurityGroups({ compartmentId, ...page_arg(page) });
144
+ return { items: answer.items, next: answer.opcNextPage };
145
+ });
146
+ return items.map((group) => ({ ...resource_of(group), vcnId: group.vcnId }));
147
+ },
148
+ async loadBalancers_list(region, compartmentId) {
149
+ const items = await pages_drain(async (page) => {
150
+ const answer = await clients.balancer(region).listLoadBalancers({ compartmentId, ...page_arg(page) });
151
+ return { items: answer.items, next: answer.opcNextPage };
152
+ });
153
+ return items.map((balancer) => ({
154
+ ...resource_of(balancer),
155
+ ipAddresses: (balancer.ipAddresses ?? []).map((address) => address.ipAddress),
156
+ shapeName: balancer.shapeName,
157
+ ...(balancer.shapeDetails?.minimumBandwidthInMbps !== undefined ? { minimumMbps: balancer.shapeDetails.minimumBandwidthInMbps } : {}),
158
+ }));
159
+ },
160
+ async volumes_list(region, compartmentId) {
161
+ const items = await pages_drain(async (page) => {
162
+ const answer = await clients.storage(region).listVolumes({ compartmentId, ...page_arg(page) });
163
+ return { items: answer.items, next: answer.opcNextPage };
164
+ });
165
+ return items.map((volume) => ({ ...resource_of(volume), sizeInGBs: volume.sizeInGBs ?? 0, availabilityDomain: volume.availabilityDomain ?? '', ...(volume.vpusPerGB !== undefined ? { vpusPerGB: volume.vpusPerGB } : {}) }));
166
+ },
167
+ async bootVolumes_list(region, compartmentId, availabilityDomain) {
168
+ const items = await pages_drain(async (page) => {
169
+ const answer = await clients.storage(region).listBootVolumes({ compartmentId, availabilityDomain, ...page_arg(page) });
170
+ return { items: answer.items, next: answer.opcNextPage };
171
+ });
172
+ return items.map((volume) => ({ ...resource_of(volume), sizeInGBs: volume.sizeInGBs ?? 0, availabilityDomain: volume.availabilityDomain ?? '', ...(volume.vpusPerGB !== undefined ? { vpusPerGB: volume.vpusPerGB } : {}) }));
173
+ },
174
+ async volumeAttachments_list(region, compartmentId) {
175
+ const items = await pages_drain(async (page) => {
176
+ const answer = await clients.compute(region).listVolumeAttachments({ compartmentId, ...page_arg(page) });
177
+ return { items: answer.items, next: answer.opcNextPage };
178
+ });
179
+ return items.map((attachment) => ({
180
+ volumeId: attachment.volumeId, instanceId: attachment.instanceId, lifecycleState: String(attachment.lifecycleState),
181
+ }));
182
+ },
183
+ async bootVolumeAttachments_list(region, compartmentId, availabilityDomain) {
184
+ const items = await pages_drain(async (page) => {
185
+ const answer = await clients.compute(region).listBootVolumeAttachments({ compartmentId, availabilityDomain, ...page_arg(page) });
186
+ return { items: answer.items, next: answer.opcNextPage };
187
+ });
188
+ return items.map((attachment) => ({
189
+ volumeId: attachment.bootVolumeId, instanceId: attachment.instanceId, lifecycleState: String(attachment.lifecycleState),
190
+ }));
191
+ },
192
+ async namespace_get(region) {
193
+ const answer = await clients.objects(region).getNamespace({});
194
+ return answer.value;
195
+ },
196
+ async buckets_list(region, namespace, compartmentId) {
197
+ const summaries = await pages_drain(async (page) => {
198
+ const answer = await clients.objects(region).listBuckets({ namespaceName: namespace, compartmentId, fields: [objectstorage.requests.ListBucketsRequest.Fields.Tags], ...page_arg(page) });
199
+ return { items: answer.items, next: answer.opcNextPage };
200
+ });
201
+ // A summary carries no id; the bucket itself does.
202
+ const buckets = [];
203
+ for (const summary of summaries) {
204
+ const answer = await clients.objects(region).getBucket({ namespaceName: namespace, bucketName: summary.name });
205
+ const bucket = answer.bucket;
206
+ buckets.push({ ...resource_of({ ...bucket, id: bucket.id ?? `${namespace}/${bucket.name}`, displayName: bucket.name, lifecycleState: 'ACTIVE' }), raw: bucket });
207
+ }
208
+ return buckets;
209
+ },
210
+ async objects_list(region, namespace, bucket) {
211
+ const items = await pages_drain(async (page) => {
212
+ const answer = await clients.objects(region).listObjects({
213
+ namespaceName: namespace, bucketName: bucket, fields: 'name,size,timeModified', ...(page !== undefined ? { start: page } : {}),
214
+ });
215
+ return { items: answer.listObjects.objects, next: answer.listObjects.nextStartWith };
216
+ });
217
+ return items.map((object) => ({ name: object.name, size: object.size ?? 0, timeModified: iso_of(object.timeModified) }));
218
+ },
219
+ async pars_list(region, namespace, bucket) {
220
+ const items = await pages_drain(async (page) => {
221
+ const answer = await clients.objects(region).listPreauthenticatedRequests({ namespaceName: namespace, bucketName: bucket, ...page_arg(page) });
222
+ return { items: answer.items, next: answer.opcNextPage };
223
+ });
224
+ return items.map((par) => ({
225
+ name: par.name, objectName: par.objectName ?? null, accessType: String(par.accessType), timeExpires: iso_of(par.timeExpires),
226
+ }));
227
+ },
228
+ async object_get(region, namespace, bucket, object) {
229
+ const answer = await clients.objects(region).getObject({ namespaceName: namespace, bucketName: bucket, objectName: object });
230
+ return body_read(answer.value);
231
+ },
232
+ async zones_list(region, compartmentId) {
233
+ const zones = [];
234
+ for (const scope of [dns.models.Scope.Global, dns.models.Scope.Private]) {
235
+ const items = await pages_drain(async (page) => {
236
+ const answer = await clients.dns(region).listZones({ compartmentId, scope, ...page_arg(page) });
237
+ return { items: answer.items, next: answer.opcNextPage };
238
+ });
239
+ zones.push(...items.map((zone) => resource_of({ ...zone, displayName: zone.name })));
240
+ }
241
+ return zones;
242
+ },
243
+ async zoneRecords_list(region, zoneId) {
244
+ const items = await pages_drain(async (page) => {
245
+ const answer = await clients.dns(region).getZoneRecords({ zoneNameOrId: zoneId, ...page_arg(page) });
246
+ return { items: answer.recordCollection.items, next: answer.opcNextPage };
247
+ });
248
+ return items.map((record) => ({ domain: record.domain ?? '', rtype: record.rtype ?? '', ttl: record.ttl ?? 0, rdata: record.rdata ?? '' }));
249
+ },
250
+ async search_list(region, query) {
251
+ const items = await pages_drain(async (page) => {
252
+ const answer = await clients.search(region).searchResources({
253
+ searchDetails: { type: 'Structured', query }, limit: 1000, ...page_arg(page),
254
+ });
255
+ return { items: answer.resourceSummaryCollection.items ?? [], next: answer.opcNextPage };
256
+ });
257
+ return items.map((item) => ({ resourceType: item.resourceType, lifecycleState: item.lifecycleState ?? '' }));
258
+ },
259
+ };
260
+ }
261
+ //# sourceMappingURL=resourceApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceApi.js","sourceRoot":"","sources":["../../../src/cloud/oci/resourceApi.ts"],"names":[],"mappings":"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"}