@ydkn/pulumi-components 0.8.0 → 0.8.2

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 (110) hide show
  1. package/index.d.ts +2 -1
  2. package/index.js +2 -1
  3. package/index.js.map +1 -1
  4. package/lib/alpine/deployment.d.ts +6 -2
  5. package/lib/alpine/deployment.js.map +1 -1
  6. package/lib/avahi/deployment.d.ts +4 -2
  7. package/lib/avahi/deployment.js +9 -2
  8. package/lib/avahi/deployment.js.map +1 -1
  9. package/lib/avahi/service.d.ts +6 -4
  10. package/lib/avahi/service.js +14 -11
  11. package/lib/avahi/service.js.map +1 -1
  12. package/lib/blocky/deployment.d.ts +3 -1
  13. package/lib/certManager/operator.d.ts +3 -1
  14. package/lib/certManager/operator.js.map +1 -1
  15. package/lib/common/componentResource.js.map +1 -1
  16. package/lib/cups/deployment.d.ts +6 -2
  17. package/lib/dhcpd/deployment.d.ts +3 -1
  18. package/lib/externalDns/dnsEndpoint.d.ts +3 -1
  19. package/lib/fcos/config.d.ts +2 -45
  20. package/lib/fcos/config.js +39 -44
  21. package/lib/fcos/config.js.map +1 -1
  22. package/lib/fcos/host.d.ts +3 -10
  23. package/lib/fcos/host.js +11 -2
  24. package/lib/fcos/host.js.map +1 -1
  25. package/lib/fcos/index.d.ts +2 -2
  26. package/lib/fcos/index.js +2 -2
  27. package/lib/fcos/index.js.map +1 -1
  28. package/lib/flatcar/config.d.ts +18 -0
  29. package/lib/flatcar/config.js +153 -0
  30. package/lib/flatcar/config.js.map +1 -0
  31. package/lib/flatcar/host.d.ts +25 -0
  32. package/lib/flatcar/host.js +53 -0
  33. package/lib/flatcar/host.js.map +1 -0
  34. package/lib/flatcar/index.d.ts +3 -0
  35. package/lib/flatcar/index.js +4 -0
  36. package/lib/flatcar/index.js.map +1 -0
  37. package/lib/freeradius/deployment.js.map +1 -1
  38. package/lib/grafana/alloy.js +3 -4
  39. package/lib/grafana/alloy.js.map +1 -1
  40. package/lib/grafana/dashboard.js.map +1 -1
  41. package/lib/grafana/datasource.js.map +1 -1
  42. package/lib/grafana/deployment.js +2 -2
  43. package/lib/grafana/deployment.js.map +1 -1
  44. package/lib/hcloud/assets/fcos-install.sh +15 -13
  45. package/lib/hcloud/assets/flatcar-install.sh +19 -0
  46. package/lib/hcloud/cluster.d.ts +10 -16
  47. package/lib/hcloud/cluster.js +255 -117
  48. package/lib/hcloud/cluster.js.map +1 -1
  49. package/lib/hcloud/kubernetes.js +0 -2
  50. package/lib/hcloud/kubernetes.js.map +1 -1
  51. package/lib/k0s/cluster.d.ts +1 -0
  52. package/lib/k0s/cluster.js +18 -3
  53. package/lib/k0s/cluster.js.map +1 -1
  54. package/lib/k0s/index.d.ts +2 -2
  55. package/lib/k0s/index.js.map +1 -1
  56. package/lib/localPathProvisioner/deployment.d.ts +3 -1
  57. package/lib/localPathProvisioner/sharedFilesystem.js +1 -1
  58. package/lib/localPathProvisioner/sharedFilesystem.js.map +1 -1
  59. package/lib/loki/deployment.js +1 -0
  60. package/lib/loki/deployment.js.map +1 -1
  61. package/lib/minio/tenant.d.ts +12 -6
  62. package/lib/minio/tenant.js +2 -2
  63. package/lib/minio/tenant.js.map +1 -1
  64. package/lib/mongodb/cluster.d.ts +6 -2
  65. package/lib/mongodb/cluster.js.map +1 -1
  66. package/lib/netbird/agent.d.ts +3 -1
  67. package/lib/netbird/agent.js +1 -0
  68. package/lib/netbird/agent.js.map +1 -1
  69. package/lib/netbird/assets/nftables.sh +12 -8
  70. package/lib/netbird/management.d.ts +3 -1
  71. package/lib/netbird/management.js.map +1 -1
  72. package/lib/node/ignition.d.ts +49 -0
  73. package/lib/node/ignition.js +2 -0
  74. package/lib/node/ignition.js.map +1 -0
  75. package/lib/node/index.d.ts +2 -1
  76. package/lib/node/index.js.map +1 -1
  77. package/lib/node/node.d.ts +9 -2
  78. package/lib/node/node.js.map +1 -1
  79. package/lib/nodeExporter/deployment.js +1 -4
  80. package/lib/nodeExporter/deployment.js.map +1 -1
  81. package/lib/plex/mediaServer.d.ts +6 -2
  82. package/lib/plex/mediaServer.js.map +1 -1
  83. package/lib/plex/playlists.d.ts +2 -1
  84. package/lib/plex/playlists.js +15 -15
  85. package/lib/plex/playlists.js.map +1 -1
  86. package/lib/postgresql/index.d.ts +2 -2
  87. package/lib/postgresql/index.js.map +1 -1
  88. package/lib/prometheus/operator.js +2 -2
  89. package/lib/raspberrypi/cluster.d.ts +11 -8
  90. package/lib/raspberrypi/cluster.js +206 -67
  91. package/lib/raspberrypi/cluster.js.map +1 -1
  92. package/lib/rook/cluster.js +1 -1
  93. package/lib/samba/dc.d.ts +12 -1
  94. package/lib/samba/dc.js +50 -10
  95. package/lib/samba/dc.js.map +1 -1
  96. package/lib/samba/deployment.d.ts +6 -2
  97. package/lib/samba/deployment.js.map +1 -1
  98. package/lib/traefik/middleware.d.ts +6 -2
  99. package/lib/transmission/deployment.d.ts +6 -2
  100. package/lib/transmission/deployment.js.map +1 -1
  101. package/lib/ubuntu/deployment.d.ts +6 -2
  102. package/lib/ubuntu/deployment.js.map +1 -1
  103. package/lib/unifi/networkServer.d.ts +10 -0
  104. package/lib/unifi/networkServer.js +107 -7
  105. package/lib/unifi/networkServer.js.map +1 -1
  106. package/lib/versitygw/deployment.d.ts +6 -2
  107. package/lib/versitygw/deployment.js.map +1 -1
  108. package/lib/wireguard/deployment.d.ts +3 -1
  109. package/lib/wireguard/deployment.js.map +1 -1
  110. package/package.json +17 -17
@@ -3,10 +3,15 @@ import * as random from "@pulumi/random";
3
3
  import * as k8s from "@pulumi/kubernetes";
4
4
  import { ComponentResource } from "../common/index.js";
5
5
  import * as fcos from "../fcos/index.js";
6
+ import * as flatcar from "../flatcar/index.js";
6
7
  import * as k0s from "../k0s/index.js";
7
8
  export class Cluster extends ComponentResource {
9
+ static defaultOperatingSystem = "fcos";
8
10
  static sshUsername = "pulumi";
9
- static ethernetInterfaceName = "end0";
11
+ static interfacesMap = {
12
+ fcos: "end0",
13
+ flatcar: "enabcm6e4ei0",
14
+ };
10
15
  name;
11
16
  nodes;
12
17
  kubeconfig;
@@ -27,12 +32,13 @@ export class Cluster extends ComponentResource {
27
32
  else {
28
33
  this.name = pulumi.output(args.name);
29
34
  }
30
- const servers = this.createServers(args.nodes, args.modules, args.packages, args.disks, args.filesystems, args.files, args.systemdUnits, args.sshAuthorizedKeys);
31
- this.nodes = servers.apply((servers) => servers.map((s) => s.node));
35
+ const nodes = this.createServers(args.nodes, args.disks, args.filesystems, args.files, args.links, args.systemdUnits, args.sshAuthorizedKeys);
36
+ const enabledNodes = nodes.apply((nodes) => pulumi.all(nodes).apply((nodes) => nodes.filter((n) => n.disabled !== true)));
37
+ this.nodes = nodes;
32
38
  const k0sCluster = new k0s.Cluster(name, {
33
39
  name: this.name,
34
- nodes: servers.apply((servers) => pulumi.all(servers.map((s) => s.node)).apply((nodes) => nodes.filter((n) => n.disabled !== true))),
35
- k0s: pulumi.all([args.k0s]).apply(([k0s]) => {
40
+ nodes: enabledNodes,
41
+ k0s: pulumi.all([enabledNodes, args.k0s]).apply(([nodes, k0s]) => {
36
42
  if (k0s === undefined) {
37
43
  k0s = {};
38
44
  }
@@ -59,7 +65,16 @@ export class Cluster extends ComponentResource {
59
65
  k0s.config.spec.network.calico.wireguard = false;
60
66
  }
61
67
  if (k0s.config.spec.network.calico.ipAutodetectionMethod === undefined) {
62
- k0s.config.spec.network.calico.ipAutodetectionMethod = `interface=${Cluster.ethernetInterfaceName}$`;
68
+ const interfaces = new Set();
69
+ for (const iface of Object.values(Cluster.interfacesMap)) {
70
+ interfaces.add(iface);
71
+ }
72
+ for (const node of nodes) {
73
+ if (node.ethernetInterfaceName !== undefined) {
74
+ interfaces.add(node.ethernetInterfaceName);
75
+ }
76
+ }
77
+ k0s.config.spec.network.calico.ipAutodetectionMethod = `interface=^(${Array.from(interfaces).join("|")})$`;
63
78
  }
64
79
  }
65
80
  return k0s;
@@ -67,79 +82,131 @@ export class Cluster extends ComponentResource {
67
82
  hooks: args.hooks,
68
83
  cloudProvider: false,
69
84
  protect: args.protect,
70
- }, { ...emptyOpts, dependsOn: servers.apply((servers) => pulumi.all(servers.map((s) => s.depends))) });
85
+ }, emptyOpts);
71
86
  this.kubeletDirPath = k0sCluster.kubeletDirPath;
72
87
  this.kubeconfig = k0sCluster.kubeconfig;
73
88
  this.provider = new k8s.Provider(`${name}-k8s`, { kubeconfig: this.kubeconfig, suppressHelmHookWarnings: true }, emptyOpts);
74
89
  this.registerOutputs();
75
90
  }
76
- createServers(nodes, modules, packages, disks, filesystems, files, systemdUnits, sshAuthorizedKeys) {
91
+ createServers(nodes, disks, filesystems, files, links, systemdUnits, sshAuthorizedKeys) {
77
92
  const emptyOpts = this.opts();
78
93
  return pulumi.all([nodes]).apply(([nodes]) => {
79
- const results = [];
94
+ const outputNodes = [];
80
95
  for (const key in nodes) {
81
96
  // eslint-disable-next-line security/detect-object-injection
82
97
  const node = nodes[key];
83
98
  const sanitizedKey = key.replaceAll(":", "").toLowerCase();
84
99
  const nodeId = new random.RandomId(`node-${sanitizedKey}`, { byteLength: 3 }, emptyOpts).hex;
85
100
  const hostname = pulumi.interpolate `${this.name}-${k0s.Cluster.rolesHostname(node.roles)}-${nodeId}`;
101
+ node.operatingSystem = node.operatingSystem ?? Cluster.defaultOperatingSystem;
102
+ const roles = node.roles ?? [];
103
+ let isController = false;
104
+ for (const role of roles) {
105
+ if (role === "controller") {
106
+ isController = true;
107
+ break;
108
+ }
109
+ }
110
+ if (isController) {
111
+ roles.push("etcd");
112
+ }
86
113
  const host = pulumi
87
- .all([hostname, modules, packages, files, disks, filesystems, systemdUnits, sshAuthorizedKeys])
88
- .apply(([hostname, modules, packages, files, disks, filesystems, systemdUnits, sshAuthorizedKeys]) => {
89
- const fcosHost = new fcos.Host(hostname, {
90
- hostname,
91
- disks: pulumi
92
- .all(disks ?? [])
93
- .apply((disks) => pulumi.all(node.disks ?? []).apply((nodeDisks) => disks.concat(nodeDisks))),
94
- filesystems: pulumi
95
- .all(filesystems ?? [])
96
- .apply((filesystems) => pulumi.all(node.filesystems ?? []).apply((nodeFilesystems) => filesystems.concat(nodeFilesystems))),
97
- files: pulumi
98
- .all(files ?? [])
99
- .apply((files) => pulumi
100
- .all(node.files ?? [])
101
- .apply((nodeFiles) => pulumi
102
- .all([this.networkManagerConfigFiles(node)])
103
- .apply(([networkManagerFiles]) => files.concat(nodeFiles).concat(networkManagerFiles)))),
104
- systemdUnits: pulumi
105
- .all(systemdUnits ?? [])
106
- .apply((systemdUnits) => pulumi
107
- .all(node.systemdUnits ?? [])
108
- .apply((nodeSystemdUnits) => systemdUnits.concat(nodeSystemdUnits))),
109
- packages: pulumi
110
- .all(packages ?? [])
111
- .apply((packages) => pulumi.all(node.packages ?? []).apply((nodePackages) => packages.concat(nodePackages))),
112
- modules: pulumi
113
- .all(modules ?? [])
114
- .apply((modules) => pulumi.all(node.modules ?? []).apply((nodeModules) => modules.concat(nodeModules))),
115
- users: pulumi.all(node.users ?? []).apply((users) => {
116
- return users.concat([{ name: "core", sshAuthorizedKeys: (sshAuthorizedKeys ?? []).map((k) => k) }]);
117
- }),
118
- sshUsers: [{ name: Cluster.sshUsername, groups: ["sudo"] }],
119
- }, emptyOpts);
120
- const roles = node.roles ?? [];
121
- let isController = false;
122
- for (const role of roles) {
123
- if (role === "controller") {
124
- isController = true;
114
+ .all([hostname, files, links, disks, filesystems, systemdUnits, sshAuthorizedKeys])
115
+ .apply(([hostname, files, links, disks, filesystems, systemdUnits, sshAuthorizedKeys]) => {
116
+ let osHost;
117
+ switch (node.operatingSystem) {
118
+ case "fcos":
119
+ osHost = new fcos.Host(hostname, {
120
+ hostname,
121
+ disks: pulumi
122
+ .all(disks ?? [])
123
+ .apply((disks) => pulumi.all(node.disks ?? []).apply((nodeDisks) => disks.concat(nodeDisks))),
124
+ filesystems: pulumi
125
+ .all(filesystems ?? [])
126
+ .apply((filesystems) => pulumi
127
+ .all(node.filesystems ?? [])
128
+ .apply((nodeFilesystems) => filesystems.concat(nodeFilesystems))),
129
+ files: pulumi
130
+ .all(files ?? [])
131
+ .apply((files) => pulumi
132
+ .all(node.files ?? [])
133
+ .apply((nodeFiles) => pulumi
134
+ .all([this.networkManagerConfigFiles(node)])
135
+ .apply(([networkManagerFiles]) => files.concat(nodeFiles).concat(networkManagerFiles)))),
136
+ links,
137
+ systemdUnits: pulumi
138
+ .all(systemdUnits ?? [])
139
+ .apply((systemdUnits) => pulumi
140
+ .all(node.systemdUnits ?? [])
141
+ .apply((nodeSystemdUnits) => systemdUnits.concat(nodeSystemdUnits))),
142
+ users: pulumi.all(node.users ?? []).apply((users) => {
143
+ return users.concat([
144
+ { name: "core", sshAuthorizedKeys: (sshAuthorizedKeys ?? []).map((k) => k) },
145
+ ]);
146
+ }),
147
+ sshUsers: [{ name: Cluster.sshUsername, groups: ["sudo"] }],
148
+ }, emptyOpts);
125
149
  break;
126
- }
127
- }
128
- if (isController) {
129
- roles.push("etcd");
150
+ case "flatcar":
151
+ osHost = new flatcar.Host(hostname, {
152
+ hostname,
153
+ disks: pulumi
154
+ .all(disks ?? [])
155
+ .apply((disks) => pulumi.all(node.disks ?? []).apply((nodeDisks) => disks.concat(nodeDisks))),
156
+ filesystems: pulumi
157
+ .all(filesystems ?? [])
158
+ .apply((filesystems) => pulumi
159
+ .all(node.filesystems ?? [])
160
+ .apply((nodeFilesystems) => filesystems.concat(nodeFilesystems))),
161
+ files: pulumi
162
+ .all(files ?? [])
163
+ .apply((files) => pulumi
164
+ .all(node.files ?? [])
165
+ .apply((nodeFiles) => pulumi
166
+ .all([this.networkdConfigFiles(node)])
167
+ .apply(([networkManagerFiles]) => files.concat(nodeFiles).concat(networkManagerFiles)))),
168
+ links,
169
+ systemdUnits: pulumi
170
+ .all(systemdUnits ?? [])
171
+ .apply((systemdUnits) => pulumi
172
+ .all(node.systemdUnits ?? [])
173
+ .apply((nodeSystemdUnits) => systemdUnits.concat(nodeSystemdUnits))),
174
+ users: pulumi.all(node.users ?? []).apply((users) => {
175
+ return users.concat([
176
+ { name: "core", sshAuthorizedKeys: (sshAuthorizedKeys ?? []).map((k) => k) },
177
+ ]);
178
+ }),
179
+ sshUsers: [{ name: Cluster.sshUsername, groups: ["sudo"] }],
180
+ }, emptyOpts);
181
+ break;
182
+ default:
183
+ throw new Error(`Unsupported operating system ${node.operatingSystem}`);
130
184
  }
131
185
  return {
132
- id: hostname,
133
- hostname,
134
- roles,
186
+ id: pulumi.output(hostname),
187
+ hostname: pulumi.output(hostname),
188
+ roles: pulumi.output(roles.map((role) => pulumi.output(role))),
135
189
  ipv4Address: node.ipv4Address,
136
190
  privateIpv4Address: node.privateIpv4Address,
137
191
  ipv6Address: node.ipv6Address,
138
192
  privateIpv6Address: node.privateIpv6Address,
139
- labels: node.labels ?? {},
140
- taints: node.taints ?? [],
141
- username: Cluster.sshUsername,
142
- privateKey: fcosHost.sshPrivateKeys.apply((sshPrivateKeys) => {
193
+ labels: pulumi.all([node.labels ?? {}]).apply(([labels]) => {
194
+ const outputLabels = {};
195
+ for (const key in labels) {
196
+ // eslint-disable-next-line security/detect-object-injection
197
+ outputLabels[key] = pulumi.output(labels[key]);
198
+ }
199
+ return outputLabels;
200
+ }),
201
+ taints: pulumi.all([node.taints ?? []]).apply(([taints]) => {
202
+ return taints.map((taint) => pulumi.output({
203
+ effect: pulumi.output(taint.effect),
204
+ key: pulumi.output(taint.key),
205
+ value: pulumi.output(taint.value),
206
+ }));
207
+ }),
208
+ username: pulumi.output(Cluster.sshUsername),
209
+ privateKey: osHost.sshPrivateKeys.apply((sshPrivateKeys) => {
143
210
  for (const username in sshPrivateKeys) {
144
211
  if (username === Cluster.sshUsername) {
145
212
  // eslint-disable-next-line security/detect-object-injection
@@ -148,25 +215,30 @@ export class Cluster extends ComponentResource {
148
215
  }
149
216
  throw new Error(`No private key found for user ${Cluster.sshUsername}`);
150
217
  }),
151
- disabled: node.disabled ?? false,
152
- fcosHost,
218
+ ignitionConfig: osHost.ignitionConfig,
219
+ disabled: pulumi.output(node.disabled ?? false),
220
+ ethernetInterfaceName: node.ethernetInterfaceName,
221
+ vlans: node.vlans,
153
222
  };
154
223
  });
155
- results.push({ node: host, depends: host.fcosHost });
224
+ outputNodes.push(host);
156
225
  }
157
- return results;
226
+ return outputNodes;
158
227
  });
159
228
  }
160
229
  networkManagerConfigFiles(node) {
161
- return pulumi.all([node.ethernetInterfaceName, node.vlans]).apply(([ifaceName, vlans]) => {
230
+ return pulumi
231
+ .all([node.operatingSystem, node.ethernetInterfaceName, node.vlans])
232
+ .apply(([os, ifaceName, vlans]) => {
162
233
  const configs = [];
234
+ const ethernetInterfaceName = Cluster.ethernetInterfaceName(os, ifaceName);
163
235
  configs.push({
164
- path: `/etc/NetworkManager/system-connections/${ifaceName ?? Cluster.ethernetInterfaceName}.nmconnection`,
236
+ path: `/etc/NetworkManager/system-connections/${ethernetInterfaceName}.nmconnection`,
165
237
  contents: [
166
238
  "[connection]",
167
239
  "type=ethernet",
168
- `id=${ifaceName ?? Cluster.ethernetInterfaceName}`,
169
- `interface-name=${ifaceName ?? Cluster.ethernetInterfaceName}`,
240
+ `id=${ethernetInterfaceName}`,
241
+ `interface-name=${ethernetInterfaceName}`,
170
242
  "[ipv4]",
171
243
  "method=auto",
172
244
  "[ipv6]",
@@ -176,7 +248,7 @@ export class Cluster extends ComponentResource {
176
248
  mode: 0o600,
177
249
  });
178
250
  for (const vlan of vlans ?? []) {
179
- const parentInterfaceName = vlan.interface ?? ifaceName ?? Cluster.ethernetInterfaceName;
251
+ const parentInterfaceName = vlan.interface ?? ethernetInterfaceName;
180
252
  const interfaceName = `${parentInterfaceName}.${vlan.id}`;
181
253
  const ipv4 = ["never-default=true"];
182
254
  const ipv6 = ["never-default=true"];
@@ -216,5 +288,72 @@ export class Cluster extends ComponentResource {
216
288
  return configs;
217
289
  });
218
290
  }
291
+ networkdConfigFiles(node) {
292
+ return pulumi
293
+ .all([node.operatingSystem, node.ethernetInterfaceName, node.vlans])
294
+ .apply(([os, ifaceName, vlans]) => {
295
+ const configs = [];
296
+ const ethernetInterfaceName = Cluster.ethernetInterfaceName(os, ifaceName);
297
+ configs.push({
298
+ path: `/etc/systemd/network/10-${ethernetInterfaceName}.network`,
299
+ contents: [
300
+ "[Match]",
301
+ `Name=${ethernetInterfaceName}`,
302
+ "[Link]",
303
+ "RequiredForOnline=routable",
304
+ "[Network]",
305
+ "DHCP=yes",
306
+ "IPv6AcceptRA=true",
307
+ ...(vlans ?? [])
308
+ .filter((vlan) => (vlan.interface ?? ethernetInterfaceName) === ethernetInterfaceName)
309
+ .map((vlan) => `VLAN=${vlan.interface ?? ethernetInterfaceName}.${vlan.id}`),
310
+ ].join("\n"),
311
+ mode: 0o644,
312
+ });
313
+ for (const vlan of vlans ?? []) {
314
+ const parentInterfaceName = vlan.interface ?? ethernetInterfaceName;
315
+ const interfaceName = `${parentInterfaceName}.${vlan.id}`;
316
+ const network = [];
317
+ if (vlan.ipv4Address !== undefined) {
318
+ network.push("DHCP=no", `Address=${vlan.ipv4Address}`);
319
+ }
320
+ else {
321
+ network.push("DHCP=yes");
322
+ }
323
+ configs.push({
324
+ path: `/etc/systemd/network/20-${interfaceName}.netdev`,
325
+ contents: ["[NetDev]", `Name=${interfaceName}`, "Kind=vlan", "[VLAN]", `Id=${vlan.id}`].join("\n"),
326
+ mode: 0o644,
327
+ });
328
+ configs.push({
329
+ path: `/etc/systemd/network/30-${interfaceName}.network`,
330
+ contents: [
331
+ "[Match]",
332
+ `Name=${interfaceName}`,
333
+ "[Network]",
334
+ ...network,
335
+ "IPv6AcceptRA=true",
336
+ "[DHCP]",
337
+ "UseRoutes=false",
338
+ ].join("\n"),
339
+ mode: 0o644,
340
+ });
341
+ }
342
+ return configs;
343
+ });
344
+ }
345
+ static ethernetInterfaceName(os, ifaceName) {
346
+ if (ifaceName !== undefined) {
347
+ return ifaceName;
348
+ }
349
+ switch (os) {
350
+ case "fcos":
351
+ return Cluster.interfacesMap.fcos;
352
+ case "flatcar":
353
+ return Cluster.interfacesMap.flatcar;
354
+ default:
355
+ throw new Error(`Unsupported operating system ${os}`);
356
+ }
357
+ }
219
358
  }
220
359
  //# sourceMappingURL=cluster.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../../lib/raspberrypi/cluster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../../lib/raspberrypi/cluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAwBvC,MAAM,OAAO,OAAQ,SAAQ,iBAAiB;IACpC,MAAM,CAAU,sBAAsB,GAAG,MAAM,CAAC;IAChD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC;IACvC,MAAM,CAAU,aAAa,GAAG;QACtC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;KACxB,CAAC;IAEc,IAAI,CAAwB;IAC5B,KAAK,CAA4C;IACjD,UAAU,CAAwB;IAClC,QAAQ,CAAe;IACvB,cAAc,CAAwB;IAEtD;;;;;OAKG;IACH,YAAY,IAAY,EAAE,IAAiB,EAAE,IAAsC;QACjF,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;QACxG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAC9B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,iBAAiB,CACvB,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAC7E,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAChC,IAAI,EACJ;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE;gBAC/D,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,GAAG,GAAG,EAAE,CAAC;gBACX,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC7B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;gBAClB,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACvB,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC/B,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACnD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC9C,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAClD,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACjD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;oBACtC,CAAC;oBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACtD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;oBAC/C,CAAC;oBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;wBAC3D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;oBACnD,CAAC;oBAED,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;wBACvE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;wBACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;4BACzD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACxB,CAAC;wBACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;gCAC7C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;4BAC7C,CAAC;wBACH,CAAC;wBAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,GAAG,eAAe,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7G,CAAC;gBACH,CAAC;gBAED,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YACF,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,EACD,SAAS,CACV,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAC9B,GAAG,IAAI,MAAM,EACb,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,EAC/D,SAAS,CACV,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,aAAa,CACnB,KAA0D,EAC1D,KAA2D,EAC3D,WAAuE,EACvE,KAA2D,EAC3D,KAA2D,EAC3D,YAAyE,EACzE,iBAAwD;QAExD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;YAC3C,MAAM,WAAW,GAA0B,EAAE,CAAC;YAE9C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,4DAA4D;gBAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAE3D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC;gBAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAA,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;gBAErG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,sBAAsB,CAAC;gBAE9E,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAEzC,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;wBAC1B,YAAY,GAAG,IAAI,CAAC;wBACpB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,IAAI,YAAY,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM;qBAChB,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;qBAClF,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,EAAE;oBACvF,IAAI,MAAgC,CAAC;oBAErC,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC7B,KAAK,MAAM;4BACT,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CACpB,QAAQ,EACR;gCACE,QAAQ;gCACR,KAAK,EAAE,MAAM;qCACV,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;qCAChB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gCAC/F,WAAW,EAAE,MAAM;qCAChB,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;qCACtB,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CACrB,MAAM;qCACH,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;qCAC3B,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CACnE;gCACH,KAAK,EAAE,MAAM;qCACV,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;qCAChB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACf,MAAM;qCACH,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;qCACrB,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CACnB,MAAM;qCACH,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;qCAC3C,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CACzF,CACJ;gCACH,KAAK;gCACL,YAAY,EAAE,MAAM;qCACjB,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;qCACvB,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE,CACtB,MAAM;qCACH,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;qCAC5B,KAAK,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACtE;gCACH,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oCAClD,OAAO,KAAK,CAAC,MAAM,CAAC;wCAClB,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;qCAC7E,CAAC,CAAC;gCACL,CAAC,CAAC;gCACF,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;6BAC5D,EACD,SAAS,CACV,CAAC;4BAEF,MAAM;wBACR,KAAK,SAAS;4BACZ,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CACvB,QAAQ,EACR;gCACE,QAAQ;gCACR,KAAK,EAAE,MAAM;qCACV,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;qCAChB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gCAC/F,WAAW,EAAE,MAAM;qCAChB,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;qCACtB,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CACrB,MAAM;qCACH,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;qCAC3B,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CACnE;gCACH,KAAK,EAAE,MAAM;qCACV,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;qCAChB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACf,MAAM;qCACH,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;qCACrB,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CACnB,MAAM;qCACH,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;qCACrC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CACzF,CACJ;gCACH,KAAK;gCACL,YAAY,EAAE,MAAM;qCACjB,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;qCACvB,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE,CACtB,MAAM;qCACH,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;qCAC5B,KAAK,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACtE;gCACH,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oCAClD,OAAO,KAAK,CAAC,MAAM,CAAC;wCAClB,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;qCAC7E,CAAC,CAAC;gCACL,CAAC,CAAC;gCACF,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;6BAC5D,EACD,SAAS,CACV,CAAC;4BAEF,MAAM;wBACR;4BACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;oBAC5E,CAAC;oBAED,OAAO;wBACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACjC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC9D,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;4BACzD,MAAM,YAAY,GAA6C,EAAE,CAAC;4BAElE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gCACzB,4DAA4D;gCAC5D,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;4BACjD,CAAC;4BAED,OAAO,YAAY,CAAC;wBACtB,CAAC,CAAC;wBACF,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;4BACzD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,MAAM,CAAC,MAAM,CAAC;gCACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gCACnC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;gCAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;6BAClC,CAAC,CACH,CAAC;wBACJ,CAAC,CAAC;wBACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;wBAC5C,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE;4BACzD,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;gCACtC,IAAI,QAAQ,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;oCACrC,4DAA4D;oCAC5D,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC;gCACpD,CAAC;4BACH,CAAC;4BAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;wBAC1E,CAAC,CAAC;wBACF,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;wBAC/C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;wBACjD,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEL,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,IAAU;QAC1C,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,IAAI,CAAC,eAAgB,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACpE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE;YAChC,MAAM,OAAO,GAA4B,EAAE,CAAC;YAE5C,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAE3E,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,0CAA0C,qBAAqB,eAAe;gBACpF,QAAQ,EAAE;oBACR,cAAc;oBACd,eAAe;oBACf,MAAM,qBAAqB,EAAE;oBAC7B,kBAAkB,qBAAqB,EAAE;oBACzC,QAAQ;oBACR,aAAa;oBACb,QAAQ;oBACR,aAAa;oBACb,qBAAqB;iBACtB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,IAAI,qBAAqB,CAAC;gBACpE,MAAM,aAAa,GAAG,GAAG,mBAAmB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBAE1D,MAAM,IAAI,GAAa,CAAC,oBAAoB,CAAC,CAAC;gBAC9C,MAAM,IAAI,GAAa,CAAC,oBAAoB,CAAC,CAAC;gBAE9C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC3B,CAAC;gBAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;gBAClD,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,0CAA0C,aAAa,eAAe;oBAC5E,QAAQ,EAAE;wBACR,cAAc;wBACd,MAAM,aAAa,EAAE;wBACrB,WAAW;wBACX,kBAAkB,aAAa,EAAE;wBACjC,QAAQ;wBACR,sBAAsB;wBACtB,SAAS;wBACT,MAAM,IAAI,CAAC,EAAE,EAAE;wBACf,uBAAuB;wBACvB,UAAU,mBAAmB,EAAE;wBAC/B,QAAQ;wBACR,GAAG,IAAI;wBACP,QAAQ;wBACR,GAAG,IAAI;qBACR,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB,CAAC,IAAU;QACpC,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,IAAI,CAAC,eAAgB,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACpE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE;YAChC,MAAM,OAAO,GAA4B,EAAE,CAAC;YAE5C,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAE3E,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,2BAA2B,qBAAqB,UAAU;gBAChE,QAAQ,EAAE;oBACR,SAAS;oBACT,QAAQ,qBAAqB,EAAE;oBAC/B,QAAQ;oBACR,4BAA4B;oBAC5B,WAAW;oBACX,UAAU;oBACV,mBAAmB;oBACnB,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;yBACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,qBAAqB,CAAC,KAAK,qBAAqB,CAAC;yBACrF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,qBAAqB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;iBAC/E,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,IAAI,qBAAqB,CAAC;gBACpE,MAAM,aAAa,GAAG,GAAG,mBAAmB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBAE1D,MAAM,OAAO,GAAa,EAAE,CAAC;gBAE7B,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,2BAA2B,aAAa,SAAS;oBACvD,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,aAAa,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAClG,IAAI,EAAE,KAAK;iBACZ,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,2BAA2B,aAAa,UAAU;oBACxD,QAAQ,EAAE;wBACR,SAAS;wBACT,QAAQ,aAAa,EAAE;wBACvB,WAAW;wBACX,GAAG,OAAO;wBACV,mBAAmB;wBACnB,QAAQ;wBACR,iBAAiB;qBAClB,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,EAAU,EAAE,SAAkB;QACjE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;YACpC,KAAK,SAAS;gBACZ,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;YACvC;gBACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC"}
@@ -72,7 +72,7 @@ export class Cluster extends ComponentResource {
72
72
  storageClassDeviceSets: args.storageClassDeviceSets,
73
73
  },
74
74
  resources: {
75
- mgr: { requests: { cpu: "200m", memory: "512Mi" }, limits: { cpu: "4000m", memory: "1536Mi" } },
75
+ mgr: { requests: { cpu: "200m", memory: "768Mi" }, limits: { cpu: "4000m", memory: "1792Mi" } },
76
76
  mon: { requests: { cpu: "200m", memory: "512Mi" }, limits: { cpu: "4000m", memory: "1536Mi" } },
77
77
  osd: { requests: { cpu: "500m", memory: "2560Mi" }, limits: { cpu: "4000m", memory: "4096Mi" } },
78
78
  prepareosd: { requests: { cpu: "500m", memory: "256Mi" }, limits: { cpu: "1000m", memory: "1024Mi" } },
package/lib/samba/dc.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import * as pulumi from "@pulumi/pulumi";
2
2
  import { ComponentResource } from "../common/index.js";
3
+ export declare const ActionProvision = "provision";
4
+ export declare const ActionJoin = "join";
3
5
  export interface SambaDcArgs {
4
6
  namespace?: pulumi.Input<string>;
7
+ action?: pulumi.Input<string>;
5
8
  serverName: pulumi.Input<string>;
6
9
  netbiosName: pulumi.Input<string>;
7
10
  workgroup: pulumi.Input<string>;
@@ -15,8 +18,13 @@ export interface SambaDcArgs {
15
18
  serviceLabels?: pulumi.Input<{
16
19
  [key: string]: pulumi.Input<string>;
17
20
  }>;
18
- nodeSelector?: pulumi.Input<Record<string, pulumi.Input<string>>>;
21
+ nodeSelector?: pulumi.Input<{
22
+ [key: string]: pulumi.Input<string>;
23
+ }>;
19
24
  calicoIpReservations?: pulumi.Input<pulumi.Input<string>[]>;
25
+ domainNameservers?: pulumi.Input<pulumi.Input<string>[]>;
26
+ domainJoinUsername?: pulumi.Input<string>;
27
+ domainJoinPassword?: pulumi.Input<string>;
20
28
  protect?: boolean;
21
29
  }
22
30
  export declare class SambaDc extends ComponentResource {
@@ -34,6 +42,9 @@ export declare class SambaDc extends ComponentResource {
34
42
  readonly nsHostname: pulumi.Output<string>;
35
43
  readonly ldapHostname: pulumi.Output<string>;
36
44
  readonly administratorDN: pulumi.Output<string>;
45
+ readonly workgroup: pulumi.Output<string>;
46
+ readonly domain: pulumi.Output<string>;
47
+ readonly domainNameservers: pulumi.Output<pulumi.Output<string>[]>;
37
48
  readonly administratorUsername: pulumi.Output<string>;
38
49
  readonly administratorPassword: pulumi.Output<string>;
39
50
  /**
package/lib/samba/dc.js CHANGED
@@ -3,6 +3,8 @@ import * as random from "@pulumi/random";
3
3
  import * as k8s from "@pulumi/kubernetes";
4
4
  import { ComponentResource } from "../common/index.js";
5
5
  import * as kubernetes from "../kubernetes/index.js";
6
+ export const ActionProvision = "provision";
7
+ export const ActionJoin = "join";
6
8
  export class SambaDc extends ComponentResource {
7
9
  static ports = [
8
10
  { port: 53, protocol: "UDP", name: "dns-udp" },
@@ -35,6 +37,9 @@ export class SambaDc extends ComponentResource {
35
37
  nsHostname;
36
38
  ldapHostname;
37
39
  administratorDN;
40
+ workgroup;
41
+ domain;
42
+ domainNameservers;
38
43
  administratorUsername;
39
44
  administratorPassword;
40
45
  /**
@@ -45,6 +50,9 @@ export class SambaDc extends ComponentResource {
45
50
  */
46
51
  constructor(name, args, opts) {
47
52
  super("samba:dc", name, args, opts);
53
+ if (args.action === undefined) {
54
+ args.action = ActionProvision;
55
+ }
48
56
  if (args.storage === undefined) {
49
57
  args.storage = "10Gi";
50
58
  }
@@ -54,6 +62,8 @@ export class SambaDc extends ComponentResource {
54
62
  const k8sOpts = this.opts(k8s.Provider);
55
63
  opts = this.opts();
56
64
  this.hostname = pulumi.interpolate `${args.serverName}.${args.domain}`;
65
+ this.workgroup = pulumi.output(args.workgroup);
66
+ this.domain = pulumi.output(args.domain);
57
67
  this.namespace = args.namespace
58
68
  ? pulumi.output(args.namespace)
59
69
  : new k8s.core.v1.Namespace(name, { metadata: { name } }, k8sOpts).metadata.name;
@@ -63,17 +73,26 @@ export class SambaDc extends ComponentResource {
63
73
  labels: {
64
74
  "app.kubernetes.io/name": "samba",
65
75
  "app.kubernetes.io/component": "dc",
66
- "app.kubernetes.io/instance": name,
76
+ "app.kubernetes.io/instance": args.serverName,
67
77
  },
68
78
  };
69
79
  this.baseDN = pulumi.all([args.domain]).apply(([domain]) => `DC=${domain.replace(/\./g, ",DC=")}`);
70
80
  this.nsHostname = pulumi.output(args.nsHostname);
71
81
  this.ldapHostname = pulumi.output(args.ldapHostname);
72
- this.administratorUsername = pulumi.secret(pulumi.output("Administrator"));
73
- this.administratorPassword = pulumi.secret(new random.RandomPassword(`${name}-admin-password`, { length: 24, special: true }, opts).result);
82
+ if (args.action === ActionJoin) {
83
+ if (args.domainJoinUsername === undefined || args.domainJoinPassword === undefined) {
84
+ throw new Error("domainJoinUsername and domainJoinPassword are required for join action");
85
+ }
86
+ this.administratorUsername = pulumi.secret(args.domainJoinUsername);
87
+ this.administratorPassword = pulumi.secret(args.domainJoinPassword);
88
+ }
89
+ else {
90
+ this.administratorUsername = pulumi.secret(pulumi.output("Administrator"));
91
+ this.administratorPassword = pulumi.secret(new random.RandomPassword(`${name}-admin-password`, { length: 24, special: true }, opts).result);
92
+ }
74
93
  this.administratorDN = pulumi.secret(pulumi.interpolate `CN=${this.administratorUsername},CN=Users,${this.baseDN}`);
75
94
  this.adminPasswordSecret = new k8s.core.v1.Secret(`${name}-admin-password`, {
76
- metadata: { ...metadata, name: pulumi.interpolate `${name}-admin-password` },
95
+ metadata: { ...metadata, name: pulumi.interpolate `${metadata.name}-admin-password` },
77
96
  stringData: {
78
97
  "samba-admin-password": this.administratorPassword,
79
98
  },
@@ -88,13 +107,13 @@ export class SambaDc extends ComponentResource {
88
107
  this.calicoIpReservations = new k8s.apiextensions.CustomResource(name, {
89
108
  apiVersion: "crd.projectcalico.org/v1",
90
109
  kind: "IPReservation",
91
- metadata: { name },
110
+ metadata: { ...metadata, namespace: undefined },
92
111
  spec: {
93
112
  reservedCIDRs: args.calicoIpReservations,
94
113
  },
95
114
  }, k8sOpts);
96
115
  }
97
- const dataVolumeClaimName = pulumi.interpolate `${name}-data`;
116
+ const dataVolumeClaimName = pulumi.interpolate `${metadata.name}-data`;
98
117
  this.dataVolumeClaim = new k8s.core.v1.PersistentVolumeClaim(`${name}-data`, {
99
118
  metadata: { ...metadata, name: dataVolumeClaimName },
100
119
  spec: {
@@ -131,6 +150,11 @@ export class SambaDc extends ComponentResource {
131
150
  { key: "node-role.kubernetes.io/control-plane", operator: "Exists", effect: "NoSchedule" },
132
151
  ],
133
152
  hostname: pulumi.all([args.serverName]).apply(([serverName]) => serverName.toLowerCase()),
153
+ dnsPolicy: args.domainNameservers ? "None" : undefined,
154
+ dnsConfig: {
155
+ nameservers: args.domainNameservers,
156
+ searches: args.domain ? [args.domain] : undefined,
157
+ },
134
158
  containers: [
135
159
  {
136
160
  name: "samba-dc",
@@ -143,7 +167,7 @@ export class SambaDc extends ComponentResource {
143
167
  { name: "ALLOW_DNS_UPDATES", value: "secure" },
144
168
  { name: "BIND_INTERFACES_ONLY", value: "no" },
145
169
  { name: "DNS_FORWARDER", value: "1.1.1.1" },
146
- { name: "DOMAIN_ACTION", value: "provision" },
170
+ { name: "DOMAIN_ACTION", value: args.action },
147
171
  { name: "DOMAIN_LOGONS", value: "yes" },
148
172
  { name: "DOMAIN_MASTER", value: "yes" },
149
173
  { name: "INTERFACES", value: "eth0" },
@@ -161,15 +185,15 @@ export class SambaDc extends ComponentResource {
161
185
  })),
162
186
  readinessProbe: {
163
187
  tcpSocket: { port: "smb" },
164
- periodSeconds: 20,
188
+ periodSeconds: 30,
165
189
  failureThreshold: 3,
166
190
  successThreshold: 1,
167
191
  timeoutSeconds: 10,
168
192
  },
169
193
  livenessProbe: {
170
194
  tcpSocket: { port: "smb" },
171
- periodSeconds: 20,
172
- failureThreshold: 3,
195
+ periodSeconds: 30,
196
+ failureThreshold: 10,
173
197
  successThreshold: 1,
174
198
  timeoutSeconds: 10,
175
199
  },
@@ -224,6 +248,22 @@ export class SambaDc extends ComponentResource {
224
248
  },
225
249
  hostnames: [args.nsHostname, args.ldapHostname],
226
250
  }, { ...k8sOpts, dependsOn: [this.deployment] });
251
+ this.domainNameservers = pulumi
252
+ .all([args.domainNameservers, this.service.status.loadBalancer])
253
+ .apply(([domainNameservers, loadBalancer]) => {
254
+ const addresses = [];
255
+ if (loadBalancer?.ingress !== undefined) {
256
+ for (const ingress of loadBalancer.ingress) {
257
+ if (ingress.ip !== undefined && /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/g.test(ingress.ip)) {
258
+ addresses.push(ingress.ip);
259
+ }
260
+ }
261
+ }
262
+ if (domainNameservers !== undefined) {
263
+ addresses.push(...domainNameservers);
264
+ }
265
+ return addresses.map((address) => pulumi.output(address));
266
+ });
227
267
  this.registerOutputs();
228
268
  }
229
269
  }