pmcf 3.10.25 → 3.11.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 (64) hide show
  1. package/bin/pmcf-info +2 -1
  2. package/package.json +5 -5
  3. package/src/base.mjs +32 -29
  4. package/src/cluster.mjs +3 -2
  5. package/src/host.mjs +3 -5
  6. package/src/location.mjs +1 -0
  7. package/src/network-interfaces/ethernet.mjs +1 -0
  8. package/src/network-interfaces/loopback.mjs +4 -6
  9. package/src/network-interfaces/network-interface.mjs +11 -2
  10. package/src/network-interfaces/tun.mjs +1 -1
  11. package/src/network-interfaces/wireguard.mjs +1 -1
  12. package/src/network-interfaces/wlan.mjs +1 -0
  13. package/src/network-support.mjs +8 -3
  14. package/src/network.mjs +2 -1
  15. package/src/owner.mjs +3 -1
  16. package/src/root.mjs +1 -3
  17. package/src/service-owner.mjs +11 -3
  18. package/src/service.mjs +4 -2
  19. package/src/services/bind.mjs +6 -3
  20. package/src/services/chrony.mjs +4 -6
  21. package/src/services/headscale.mjs +1 -1
  22. package/src/services/influxdb.mjs +1 -0
  23. package/src/services/kea.mjs +14 -12
  24. package/src/services/mosquitto.mjs +1 -0
  25. package/src/services/openldap.mjs +1 -0
  26. package/src/services/systemd-journal-remote.mjs +1 -1
  27. package/src/services/systemd-journal-upload.mjs +1 -0
  28. package/src/services/systemd-journal.mjs +2 -2
  29. package/src/services/systemd-resolved.mjs +8 -6
  30. package/src/services/systemd-timesyncd.mjs +7 -7
  31. package/src/subnet.mjs +3 -1
  32. package/src/types.mjs +16 -38
  33. package/types/base.d.mts +5 -3
  34. package/types/cluster.d.mts +56 -10
  35. package/types/extra-source-service.d.mts +510 -9
  36. package/types/host.d.mts +20 -7
  37. package/types/location.d.mts +71 -6
  38. package/types/network-interfaces/ethernet.d.mts +630 -26
  39. package/types/network-interfaces/loopback.d.mts +629 -27
  40. package/types/network-interfaces/network-interface.d.mts +628 -26
  41. package/types/network-interfaces/tun.d.mts +629 -27
  42. package/types/network-interfaces/wireguard.d.mts +629 -27
  43. package/types/network-interfaces/wlan.d.mts +947 -40
  44. package/types/network-support.d.mts +54 -11
  45. package/types/network.d.mts +324 -8
  46. package/types/owner.d.mts +35 -3
  47. package/types/root.d.mts +71 -8
  48. package/types/service-owner.d.mts +1 -0
  49. package/types/service.d.mts +363 -13
  50. package/types/services/bind.d.mts +706 -23
  51. package/types/services/chrony.d.mts +689 -15
  52. package/types/services/headscale.d.mts +689 -15
  53. package/types/services/influxdb.d.mts +527 -14
  54. package/types/services/kea.d.mts +539 -18
  55. package/types/services/mosquitto.d.mts +530 -15
  56. package/types/services/openldap.d.mts +524 -13
  57. package/types/services/systemd-journal-remote.d.mts +524 -14
  58. package/types/services/systemd-journal-upload.d.mts +524 -13
  59. package/types/services/systemd-journal.d.mts +524 -14
  60. package/types/services/systemd-resolved.d.mts +689 -15
  61. package/types/services/systemd-timesyncd.d.mts +763 -90
  62. package/types/subnet.d.mts +14 -0
  63. package/src/filter.mjs +0 -91
  64. package/types/filter.d.mts +0 -1
@@ -23,6 +23,7 @@ const KeaServiceTypeDefinition = {
23
23
  owners: ServiceTypeDefinition.owners,
24
24
  extends: ServiceTypeDefinition,
25
25
  priority: 0.1,
26
+ key: "name",
26
27
  attributes: {
27
28
  "ddns-send-updates": {
28
29
  ...boolean_attribute_writable_true,
@@ -154,11 +155,8 @@ export class KeaService extends Service {
154
155
  console.log("kea", name, network.name);
155
156
 
156
157
  const dnsServerEndpoints = serviceEndpoints(network, {
157
- services: {
158
- types: "dns",
159
- priority: ">=300"
160
- },
161
- endpoints: endpoint => endpoint.networkInterface.kind !== "loopback"
158
+ services: 'type="dns" && priority >= 300',
159
+ endpoints: endpoint => endpoint.networkInterface?.kind !== "loopback"
162
160
  });
163
161
 
164
162
  const packageData = {
@@ -176,10 +174,11 @@ export class KeaService extends Service {
176
174
  const peers = async family =>
177
175
  (
178
176
  await Array.fromAsync(
179
- network.findServices({
180
- type: "kea",
181
- priority: ">=" + (this.priority < 100 ? this.priority : 100)
182
- })
177
+ network.findServices(
178
+ `type="kea" && priority>=${
179
+ this.priority < 100 ? this.priority : 100
180
+ }`
181
+ )
183
182
  )
184
183
  )
185
184
  .sort(sortDescendingByPriority)
@@ -422,9 +421,12 @@ export class KeaService extends Service {
422
421
  Dhcp4: {
423
422
  ...(await commonConfig("4")),
424
423
  subnet4: subnets
425
- .filter(s => s.family === "IPv4" &&
426
- // TODO keep out tailscale
427
- s.cidr !== "100.64.0.2/32")
424
+ .filter(
425
+ s =>
426
+ s.family === "IPv4" &&
427
+ // TODO keep out tailscale
428
+ s.cidr !== "100.64.0.2/32"
429
+ )
428
430
  .map((subnet, index) => {
429
431
  return {
430
432
  id: index + 1,
@@ -11,6 +11,7 @@ const MosquittoServiceTypeDefinition = {
11
11
  owners: ServiceTypeDefinition.owners,
12
12
  extends: ServiceTypeDefinition,
13
13
  priority: 0.1,
14
+ key: "name",
14
15
  attributes: {
15
16
  log_timestamp: {
16
17
  ...boolean_attribute_writable_true,
@@ -12,6 +12,7 @@ const OpenLDAPServiceTypeDefinition = {
12
12
  owners: ServiceTypeDefinition.owners,
13
13
  extends: ServiceTypeDefinition,
14
14
  priority: 0.1,
15
+ key: "name",
15
16
  attributes: {
16
17
  baseDN: string_attribute_writable,
17
18
  rootDN: string_attribute_writable,
@@ -7,7 +7,7 @@ const SystemdJournalRemoteServiceTypeDefinition = {
7
7
  owners: ServiceTypeDefinition.owners,
8
8
  extends: ServiceTypeDefinition,
9
9
  priority: 0.1,
10
- attributes: {},
10
+ key: "name",
11
11
  services: {
12
12
  endpoints: [
13
13
  {
@@ -8,6 +8,7 @@ const SystemdJournalUploadServiceTypeDefinition = {
8
8
  owners: ServiceTypeDefinition.owners,
9
9
  extends: ServiceTypeDefinition,
10
10
  priority: 0.1,
11
+ key: "name",
11
12
  attributes: {
12
13
  url: string_attribute_writable
13
14
  },
@@ -7,7 +7,7 @@ const SystemdJournalServiceTypeDefinition = {
7
7
  owners: ServiceTypeDefinition.owners,
8
8
  extends: ServiceTypeDefinition,
9
9
  priority: 0.1,
10
- attributes: {},
10
+ key: "name",
11
11
  service: {}
12
12
  };
13
13
 
@@ -30,7 +30,7 @@ export class SystemdJournalService extends Service {
30
30
 
31
31
  systemdConfigs(name) {
32
32
  return {
33
- serviceName: "systemd-journald",
33
+ serviceName: "systemd-journald",
34
34
  configFileName: `etc/systemd/journal.conf.d/${name}.conf`,
35
35
  content: [
36
36
  "Journal",
@@ -12,7 +12,7 @@ const SystemdResolvedServiceTypeDefinition = {
12
12
  owners: ServiceTypeDefinition.owners,
13
13
  extends: ExtraSourceServiceTypeDefinition,
14
14
  priority: 0.1,
15
- attributes: {},
15
+ key: "name",
16
16
  service: {}
17
17
  };
18
18
 
@@ -34,11 +34,13 @@ export class SystemdResolvedService extends ExtraSourceService {
34
34
  }
35
35
 
36
36
  systemdConfigs(name) {
37
- const options = (priority, limit) => {
37
+ const options = (lower, upper, limit) => {
38
38
  return {
39
- services: { types: "dns", priority },
39
+ services: `(type="dns" || type="bind") && priority>=${lower} && priority<=${upper}`,
40
40
  endpoints: e =>
41
- e.networkInterface.kind !== "loopback" && e.family !== "dns",
41
+ e.networkInterface &&
42
+ e.networkInterface.kind !== "loopback" &&
43
+ e.family !== "dns",
42
44
  select: endpoint => endpoint.address,
43
45
  join: " ",
44
46
  limit
@@ -51,8 +53,8 @@ export class SystemdResolvedService extends ExtraSourceService {
51
53
  content: [
52
54
  "Resolve",
53
55
  {
54
- DNS: serviceEndpoints(this, options("[300:399]", 4)),
55
- FallbackDNS: serviceEndpoints(this, options("[100:199]", 4)),
56
+ DNS: serviceEndpoints(this, options(300, 399, 4)),
57
+ FallbackDNS: serviceEndpoints(this, options(100, 199, 4)),
56
58
  Domains: [...this.localDomains].join(" "),
57
59
  DNSSEC: "no",
58
60
  MulticastDNS: this.network.multicastDNS ? "yes" : "no",
@@ -8,11 +8,10 @@ import { addType } from "../types.mjs";
8
8
 
9
9
  const SystemdTimesyncdServiceTypeDefinition = {
10
10
  name: "systemd-timesyncd",
11
+ extends: ExtraSourceServiceTypeDefinition,
11
12
  specializationOf: ServiceTypeDefinition,
12
13
  owners: ServiceTypeDefinition.owners,
13
- extends: ExtraSourceServiceTypeDefinition,
14
14
  priority: 0.1,
15
- attributes: {},
16
15
  service: {}
17
16
  };
18
17
 
@@ -34,10 +33,11 @@ export class SystemdTimesyncdService extends ExtraSourceService {
34
33
  }
35
34
 
36
35
  systemdConfigs(name) {
37
- const options = priority => {
36
+ const options = (lower, upper) => {
38
37
  return {
39
- services: { types: "ntp", priority },
40
- endpoints: e => e.networkInterface?.kind !== "loopback",
38
+ services: `type='ntp' && priority >= ${lower} && priority <= ${upper}`,
39
+ endpoints: e =>
40
+ e.networkInterface && e.networkInterface.kind !== "loopback",
41
41
  select: endpoint => endpoint.address,
42
42
  join: " ",
43
43
  limit: 2
@@ -50,8 +50,8 @@ export class SystemdTimesyncdService extends ExtraSourceService {
50
50
  content: [
51
51
  "Time",
52
52
  {
53
- NTP: serviceEndpoints(this, options("[300:399]")),
54
- FallbackNTP: serviceEndpoints(this, options("[100:199]"))
53
+ NTP: serviceEndpoints(this, options(300, 399)),
54
+ FallbackNTP: serviceEndpoints(this, options(100, 199))
55
55
  }
56
56
  ]
57
57
  };
package/src/subnet.mjs CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  matchPrefixIP
8
8
  } from "ip-utilties";
9
9
  import { string_attribute, name_attribute, number_attribute } from "pacc";
10
+ import { networks_attribute } from "./network-support.mjs";
10
11
  import { Base } from "./base.mjs";
11
12
  import { addType } from "./types.mjs";
12
13
 
@@ -15,9 +16,10 @@ const SubnetTypeDefinition = {
15
16
  owners: ["location", "owner", "network", "root"],
16
17
  priority: 0.6,
17
18
  constructWithIdentifierOnly: true,
19
+ key: "address",
18
20
  attributes: {
19
21
  address: name_attribute,
20
- networks: { type: "network", collection: true, writable: true },
22
+ networks: networks_attribute,
21
23
  prefixLength: number_attribute,
22
24
  family: string_attribute
23
25
  }
package/src/types.mjs CHANGED
@@ -1,10 +1,15 @@
1
- import { baseTypes, attributeIterator, types } from "pacc";
2
- import { asArray } from "./utils.mjs";
1
+ import {
2
+ attributeIterator,
3
+ types,
4
+ oneOfType,
5
+ addType as paccAddType
6
+ } from "pacc";
3
7
  import { addServiceTypes } from "./service-types.mjs";
4
8
  export { types };
5
9
 
6
10
  export function addType(clazz) {
7
11
  const type = clazz.typeDefinition;
12
+ type.clazz = clazz;
8
13
 
9
14
  if (type.specializationOf) {
10
15
  type.specializationOf.specializations[type.name] = type;
@@ -14,52 +19,24 @@ export function addType(clazz) {
14
19
  addServiceTypes({ [type.name]: type.service });
15
20
  }
16
21
 
17
- types[type.name] = type;
18
-
19
- type.clazz = clazz;
22
+ paccAddType(type);
20
23
  }
21
24
 
22
25
  export function resolveTypeLinks() {
23
26
  for (const type of Object.values(types)) {
27
+ if (typeof type.extends === "string") {
28
+ type.extends = types[type.extends];
29
+ }
30
+
24
31
  if (type.owners) {
25
32
  type.owners = type.owners.map(owner =>
26
33
  typeof owner === "string" ? types[owner] : owner
27
34
  );
28
- } else {
29
- type.owners = [];
30
- }
31
- for (const [path, attribute] of attributeIterator(type.attributes)) {
32
- const name = path.join(".");
33
- const ts = [];
34
-
35
- for (const type of asArray(attribute.type)) {
36
- if (typeof type === "string") {
37
- if (baseTypes.has(type)) {
38
- ts.push(type);
39
- } else {
40
- const t = types[type];
41
- if (t) {
42
- ts.push(t);
43
- } else {
44
- console.error("Unknown type", attribute.type, type.name, name);
45
- }
46
- }
47
- } else {
48
- ts.push(type);
49
- }
50
- }
51
- attribute.type = ts;
52
-
53
- if (attribute.isKey) {
54
- type.identifier = { name, ...attribute };
55
- }
56
35
  }
57
- }
58
36
 
59
- for (const type of Object.values(types)) {
60
- if (!type.identifier) {
61
- if (type.extends?.identifier) {
62
- type.identifier = type.extends.identifier;
37
+ for (const [path, attribute] of attributeIterator(type.attributes)) {
38
+ if (typeof attribute.type === "string") {
39
+ attribute.type = oneOfType(attribute.type);
63
40
  }
64
41
  }
65
42
  }
@@ -67,6 +44,7 @@ export function resolveTypeLinks() {
67
44
 
68
45
  export function typeFactory(type, owner, data) {
69
46
  const factory = type.factoryFor?.(owner, data) || type.clazz;
47
+ //console.log(factory, type, owner, data);
70
48
  const object = new factory(owner);
71
49
  object.read(data);
72
50
  owner.addObject(object);
package/types/base.d.mts CHANGED
@@ -6,7 +6,7 @@ export class Base {
6
6
  static get typeName(): string;
7
7
  static get typeDefinition(): {
8
8
  name: string;
9
- owners: any[];
9
+ key: string;
10
10
  attributes: {
11
11
  owner: {
12
12
  type: string;
@@ -17,7 +17,7 @@ export class Base {
17
17
  name: import("pacc").AttributeDefinition;
18
18
  description: {
19
19
  writable: boolean;
20
- type: string;
20
+ type: object;
21
21
  isKey: boolean;
22
22
  mandatory: boolean;
23
23
  collection: boolean;
@@ -27,9 +27,11 @@ export class Base {
27
27
  default?: any;
28
28
  set?: Function;
29
29
  get?: Function;
30
+ prepareValue?: Function;
30
31
  values?: Set<any>;
31
32
  externalName?: string;
32
33
  env?: string[] | string;
34
+ additionalValues?: object;
33
35
  };
34
36
  priority: import("pacc").AttributeDefinition;
35
37
  directory: import("pacc").AttributeDefinition;
@@ -49,7 +51,7 @@ export class Base {
49
51
  _directory: any;
50
52
  _finalize: any;
51
53
  _properties: any;
52
- ownerFor(property: any, data: any): any;
54
+ ownerFor(attribute: any, data: any): any;
53
55
  read(data: any, type?: any): void;
54
56
  named(name: any): void;
55
57
  typeNamed(typeName: any, name: any): any;
@@ -7,7 +7,7 @@ export class Cluster extends Host {
7
7
  priority: number;
8
8
  extends: {
9
9
  name: string;
10
- owners: any[];
10
+ key: string;
11
11
  attributes: {
12
12
  owner: {
13
13
  type: string;
@@ -18,7 +18,7 @@ export class Cluster extends Host {
18
18
  name: import("pacc").AttributeDefinition;
19
19
  description: {
20
20
  writable: boolean;
21
- type: string;
21
+ type: object;
22
22
  isKey: boolean;
23
23
  mandatory: boolean;
24
24
  collection: boolean;
@@ -28,9 +28,11 @@ export class Cluster extends Host {
28
28
  default?: any;
29
29
  set?: Function;
30
30
  get?: Function;
31
+ prepareValue?: Function;
31
32
  values?: Set<any>;
32
33
  externalName?: string;
33
34
  env?: string[] | string;
35
+ additionalValues?: object;
34
36
  };
35
37
  priority: import("pacc").AttributeDefinition;
36
38
  directory: import("pacc").AttributeDefinition;
@@ -39,11 +41,25 @@ export class Cluster extends Host {
39
41
  tags: import("pacc").AttributeDefinition;
40
42
  };
41
43
  };
44
+ key: string;
42
45
  attributes: {
43
46
  networks: {
44
47
  type: string;
45
48
  collection: boolean;
49
+ isKey: boolean;
46
50
  writable: boolean;
51
+ mandatory: boolean;
52
+ private?: boolean;
53
+ depends?: string;
54
+ description?: string;
55
+ default?: any;
56
+ set?: Function;
57
+ get?: Function;
58
+ prepareValue?: Function;
59
+ values?: Set<any>;
60
+ externalName?: string;
61
+ env?: string[] | string;
62
+ additionalValues?: object;
47
63
  };
48
64
  hosts: {
49
65
  type: string;
@@ -61,12 +77,26 @@ export class Cluster extends Host {
61
77
  owners: string[];
62
78
  priority: number;
63
79
  constructWithIdentifierOnly: boolean;
80
+ key: string;
64
81
  attributes: {
65
82
  address: import("pacc").AttributeDefinition;
66
83
  networks: {
67
84
  type: string;
68
85
  collection: boolean;
86
+ isKey: boolean;
69
87
  writable: boolean;
88
+ mandatory: boolean;
89
+ private?: boolean;
90
+ depends?: string;
91
+ description?: string;
92
+ default?: any;
93
+ set?: Function;
94
+ get?: Function;
95
+ prepareValue?: Function;
96
+ values?: Set<any>;
97
+ externalName?: string;
98
+ env?: string[] | string;
99
+ additionalValues?: object;
70
100
  };
71
101
  prefixLength: import("pacc").AttributeDefinition;
72
102
  family: import("pacc").AttributeDefinition;
@@ -83,7 +113,7 @@ export class Cluster extends Host {
83
113
  locales: import("pacc").AttributeDefinition;
84
114
  administratorEmail: {
85
115
  writable: boolean;
86
- type: string;
116
+ type: object;
87
117
  isKey: boolean;
88
118
  mandatory: boolean;
89
119
  collection: boolean;
@@ -93,9 +123,11 @@ export class Cluster extends Host {
93
123
  default?: any;
94
124
  set?: Function;
95
125
  get?: Function;
126
+ prepareValue?: Function;
96
127
  values?: Set<any>;
97
128
  externalName?: string;
98
129
  env?: string[] | string;
130
+ additionalValues?: object;
99
131
  };
100
132
  };
101
133
  })[];
@@ -106,7 +138,7 @@ export class Cluster extends Host {
106
138
  owners: string[];
107
139
  extends: {
108
140
  name: string;
109
- owners: any[];
141
+ key: string;
110
142
  attributes: {
111
143
  owner: {
112
144
  type: string;
@@ -117,7 +149,7 @@ export class Cluster extends Host {
117
149
  name: import("pacc").AttributeDefinition;
118
150
  description: {
119
151
  writable: boolean;
120
- type: string;
152
+ type: object;
121
153
  isKey: boolean;
122
154
  mandatory: boolean;
123
155
  collection: boolean;
@@ -127,9 +159,11 @@ export class Cluster extends Host {
127
159
  default?: any;
128
160
  set?: Function;
129
161
  get?: Function;
162
+ prepareValue?: Function;
130
163
  values?: Set<any>;
131
164
  externalName?: string;
132
165
  env?: string[] | string;
166
+ additionalValues?: object;
133
167
  };
134
168
  priority: import("pacc").AttributeDefinition;
135
169
  directory: import("pacc").AttributeDefinition;
@@ -138,6 +172,7 @@ export class Cluster extends Host {
138
172
  tags: import("pacc").AttributeDefinition;
139
173
  };
140
174
  };
175
+ key: string;
141
176
  attributes: {
142
177
  networkInterfaces: {
143
178
  type: string;
@@ -152,7 +187,7 @@ export class Cluster extends Host {
152
187
  aliases: import("pacc").AttributeDefinition;
153
188
  os: {
154
189
  values: string[];
155
- type: string;
190
+ type: object;
156
191
  isKey: boolean;
157
192
  writable: boolean;
158
193
  mandatory: boolean;
@@ -163,14 +198,16 @@ export class Cluster extends Host {
163
198
  default?: any;
164
199
  set?: Function;
165
200
  get?: Function;
201
+ prepareValue?: Function;
166
202
  externalName?: string;
167
203
  env?: string[] | string;
204
+ additionalValues?: object;
168
205
  };
169
206
  "machine-id": import("pacc").AttributeDefinition;
170
207
  distribution: import("pacc").AttributeDefinition;
171
208
  deployment: {
172
209
  values: string[];
173
- type: string;
210
+ type: object;
174
211
  isKey: boolean;
175
212
  writable: boolean;
176
213
  mandatory: boolean;
@@ -181,8 +218,10 @@ export class Cluster extends Host {
181
218
  default?: any;
182
219
  set?: Function;
183
220
  get?: Function;
221
+ prepareValue?: Function;
184
222
  externalName?: string;
185
223
  env?: string[] | string;
224
+ additionalValues?: object;
186
225
  };
187
226
  weight: import("pacc").AttributeDefinition;
188
227
  serial: import("pacc").AttributeDefinition;
@@ -190,7 +229,7 @@ export class Cluster extends Host {
190
229
  keymap: import("pacc").AttributeDefinition;
191
230
  chassis: {
192
231
  values: string[];
193
- type: string;
232
+ type: object;
194
233
  isKey: boolean;
195
234
  writable: boolean;
196
235
  mandatory: boolean;
@@ -201,12 +240,14 @@ export class Cluster extends Host {
201
240
  default?: any;
202
241
  set?: Function;
203
242
  get?: Function;
243
+ prepareValue?: Function;
204
244
  externalName?: string;
205
245
  env?: string[] | string;
246
+ additionalValues?: object;
206
247
  };
207
248
  architecture: {
208
249
  values: string[];
209
- type: string;
250
+ type: object;
210
251
  isKey: boolean;
211
252
  writable: boolean;
212
253
  mandatory: boolean;
@@ -217,8 +258,10 @@ export class Cluster extends Host {
217
258
  default?: any;
218
259
  set?: Function;
219
260
  get?: Function;
261
+ prepareValue?: Function;
220
262
  externalName?: string;
221
263
  env?: string[] | string;
264
+ additionalValues?: object;
222
265
  };
223
266
  replaces: import("pacc").AttributeDefinition;
224
267
  depends: import("pacc").AttributeDefinition;
@@ -232,7 +275,7 @@ export class Cluster extends Host {
232
275
  isModel: import("pacc").AttributeDefinition;
233
276
  hostName: {
234
277
  writable: boolean;
235
- type: string;
278
+ type: object;
236
279
  isKey: boolean;
237
280
  mandatory: boolean;
238
281
  collection: boolean;
@@ -242,9 +285,11 @@ export class Cluster extends Host {
242
285
  default?: any;
243
286
  set?: Function;
244
287
  get?: Function;
288
+ prepareValue?: Function;
245
289
  values?: Set<any>;
246
290
  externalName?: string;
247
291
  env?: string[] | string;
292
+ additionalValues?: object;
248
293
  };
249
294
  cidrAddresses: import("pacc").AttributeDefinition;
250
295
  cidrAddress: import("pacc").AttributeDefinition;
@@ -252,6 +297,7 @@ export class Cluster extends Host {
252
297
  address: import("pacc").AttributeDefinition;
253
298
  };
254
299
  };
300
+ key: string;
255
301
  attributes: {
256
302
  routerId: import("pacc").AttributeDefinition;
257
303
  masters: {