pmcf 3.19.10 → 3.20.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmcf",
3
- "version": "3.19.10",
3
+ "version": "3.20.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "ip-utilties": "^2.0.2",
57
- "npm-pkgbuild": "^19.1.2",
57
+ "npm-pkgbuild": "^19.1.3",
58
58
  "pacc": "^6.8.1",
59
59
  "package-directory": "^8.1.0"
60
60
  },
package/src/base.mjs CHANGED
@@ -43,6 +43,7 @@ export class Base {
43
43
  _packaging = new Set();
44
44
  _directory;
45
45
  _finalize;
46
+ _extends = [];
46
47
  _properties;
47
48
 
48
49
  static {
@@ -61,14 +62,10 @@ export class Base {
61
62
  return this.typeName + ".json";
62
63
  }
63
64
 
64
- static get fileNameGlob() {
65
- return "**/" + this.typeFileName;
66
- }
67
-
68
65
  /**
69
66
  *
70
67
  * @param {Base} owner
71
- * @param {object} data
68
+ * @param {object} [data]
72
69
  */
73
70
  constructor(owner, data) {
74
71
  this.owner = owner;
@@ -210,7 +207,7 @@ export class Base {
210
207
  this.error(
211
208
  "Not found",
212
209
  name,
213
- attribute.type.map(t => t.name),
210
+ attribute.type?.map && attribute.type.map(t => t.name),
214
211
  value
215
212
  );
216
213
  });
@@ -270,6 +267,30 @@ export class Base {
270
267
  instantiateAndAssign(name, attribute, value);
271
268
  }
272
269
  }
270
+
271
+ if (data?.extends) {
272
+ this.finalize(() => {
273
+ for (const object of this.extends) {
274
+ object.execFinalize();
275
+ this._applyExtends(object);
276
+ }
277
+ });
278
+ }
279
+
280
+ /*if(this.type) {
281
+ console.log(this.toString(),this.name,this.fullName);
282
+ }*/
283
+ }
284
+
285
+ _applyExtends() {
286
+ }
287
+
288
+ set extends(value) {
289
+ this._extends.push(value);
290
+ }
291
+
292
+ get extends() {
293
+ return this._extends;
273
294
  }
274
295
 
275
296
  named(name) {}
@@ -318,13 +339,6 @@ export class Base {
318
339
  return this.constructor.typeDefinition.name;
319
340
  }
320
341
 
321
- /**
322
- * @return {Iterable<Base>}
323
- */
324
- get extends() {
325
- return [];
326
- }
327
-
328
342
  *_extendedPropertyIterator(propertyName, seen) {
329
343
  if (!seen.has(this)) {
330
344
  seen.add(this);
@@ -410,6 +424,9 @@ export class Base {
410
424
  this._priority = value;
411
425
  }
412
426
 
427
+ /**
428
+ * @return {number}
429
+ */
413
430
  get priority() {
414
431
  return this._priority ?? this.owner?.priority;
415
432
  }
@@ -499,7 +516,7 @@ export class Base {
499
516
  }
500
517
 
501
518
  get isTemplate() {
502
- return false;
519
+ return this.name?.indexOf("*") >= 0 || this.owner?.isTemplate || false;
503
520
  }
504
521
 
505
522
  get properties() {
@@ -518,7 +535,11 @@ export class Base {
518
535
  }
519
536
 
520
537
  property(name) {
521
- return this._properties?.[name] ?? this.owner?.property(name) ?? this.owner?.owner?.property(name);
538
+ return (
539
+ this._properties?.[name] ??
540
+ this.owner?.property(name) ??
541
+ this.owner?.owner?.property(name)
542
+ );
522
543
  }
523
544
 
524
545
  /**
@@ -634,6 +655,9 @@ export function extractFrom(
634
655
 
635
656
  do {
636
657
  for (const [path, def] of attributeIterator(typeDefinition.attributes)) {
658
+ if (def.private) {
659
+ continue;
660
+ }
637
661
  const name = path.join(".");
638
662
  let value = object[name];
639
663
 
package/src/host.mjs CHANGED
@@ -88,7 +88,6 @@ const HostTypeDefinition = {
88
88
  };
89
89
 
90
90
  export class Host extends ServiceOwner {
91
- _extends = [];
92
91
  _aliases = new Set();
93
92
  _networkInterfaces = new Map();
94
93
  _provides = new Set();
@@ -114,27 +113,13 @@ export class Host extends ServiceOwner {
114
113
  read(data, type) {
115
114
  super.read(data, type);
116
115
 
117
- if (data?.extends) {
118
- this.finalize(() => {
119
- for (const host of this.extends) {
120
- host.execFinalize();
121
- this._applyExtends(host);
122
- }
123
- });
124
- }
125
116
  this.extra = data.extra;
126
117
  }
127
118
 
128
119
  _applyExtends(host) {
129
- for (const service of host.services) {
130
- //present.extends.push(service);
131
-
132
- this.services = service.forOwner(this);
133
- }
134
-
120
+ super._applyExtends(host);
135
121
  for (const [name, ni] of host.networkInterfaces) {
136
- if (ni.isTemplate) {
137
- } else {
122
+ if (!ni.isTemplate) {
138
123
  let present = this._networkInterfaces.get(name);
139
124
 
140
125
  if (!present) {
@@ -210,7 +195,7 @@ export class Host extends ServiceOwner {
210
195
  }
211
196
 
212
197
  get isTemplate() {
213
- return this.isModel || this.name?.match(/services\//); // TODO
198
+ return this.isModel || super.isTemplate;
214
199
  }
215
200
 
216
201
  get isModel() {
@@ -233,14 +218,6 @@ export class Host extends ServiceOwner {
233
218
  return this.extends.reduce((a, c) => a.union(c.aliases), this._aliases);
234
219
  }
235
220
 
236
- set extends(value) {
237
- this._extends.push(value);
238
- }
239
-
240
- get extends() {
241
- return this._extends;
242
- }
243
-
244
221
  set provides(value) {
245
222
  if (value instanceof Set) {
246
223
  this._provides = this._provides.union(value);
package/src/location.mjs CHANGED
@@ -53,7 +53,7 @@ export class Location extends Owner {
53
53
  name: `${this.typeName}-${this.name}`,
54
54
  description: `${this.typeName} definitions for ${this.fullName}`,
55
55
  access: "private",
56
- dependencies: { jq: ">=1.6" },
56
+ dependencies: { jq: ">=1.8" },
57
57
  provides: ["location", "mf-location"],
58
58
  replaces: [`mf-location-${this.name}`],
59
59
  hooks: await loadHooks(
@@ -7,7 +7,6 @@ import { ServiceOwner } from "../service-owner.mjs";
7
7
  *
8
8
  */
9
9
  export class SkeletonNetworkInterface extends ServiceOwner {
10
- _extends = [];
11
10
  _network;
12
11
 
13
12
  static get typeName() {
@@ -18,18 +17,6 @@ export class SkeletonNetworkInterface extends ServiceOwner {
18
17
  return "network_interface";
19
18
  }
20
19
 
21
- set extends(value) {
22
- this._extends.push(value);
23
- }
24
-
25
- get extends() {
26
- return this._extends;
27
- }
28
-
29
- get isTemplate() {
30
- return this.name?.indexOf("*") >= 0;
31
- }
32
-
33
20
  get host() {
34
21
  if (this.owner instanceof Host) {
35
22
  return this.owner;
package/src/owner.mjs CHANGED
@@ -4,7 +4,9 @@ import {
4
4
  string_collection_attribute_writable,
5
5
  string_attribute_writable,
6
6
  email_attribute,
7
- addType, types
7
+ addType,
8
+ types,
9
+ boolean_attribute_writable_false
8
10
  } from "pacc";
9
11
  import { asIterator } from "./utils.mjs";
10
12
  import { Base } from "./base.mjs";
@@ -35,7 +37,8 @@ const OwnerTypeDefinition = {
35
37
  timezone: string_attribute_writable,
36
38
  architectures: string_collection_attribute_writable,
37
39
  locales: string_collection_attribute_writable,
38
- administratorEmail: { ...email_attribute, writable: true }
40
+ administratorEmail: { ...email_attribute, writable: true },
41
+ template: { ...boolean_attribute_writable_false, private: true }
39
42
  }
40
43
  };
41
44
 
@@ -53,6 +56,13 @@ export class Owner extends Base {
53
56
  return OwnerTypeDefinition;
54
57
  }
55
58
 
59
+ /**
60
+ * @return {boolean}
61
+ */
62
+ get isTemplate() {
63
+ return this.template ?? super.isTemplate;
64
+ }
65
+
56
66
  _traverse(...args) {
57
67
  if (super._traverse(...args)) {
58
68
  for (const typeSlot of this._membersByType.values()) {
package/src/root.mjs CHANGED
@@ -74,8 +74,8 @@ export class Root extends Location {
74
74
  for (const type of Object.values(types).sort(
75
75
  (a, b) => (b.priority || 1.0) - (a.priority || 1.0)
76
76
  )) {
77
- if (type.clazz?.fileNameGlob) {
78
- for await (const name of glob(type.clazz.fileNameGlob, {
77
+ if (type.clazz?.typeFileName) {
78
+ for await (const name of glob( "**/" + type.clazz.typeFileName, {
79
79
  cwd: this.directory
80
80
  })) {
81
81
  await this.load(name, { type });
@@ -1,4 +1,4 @@
1
- import { Base } from "pmcf";
1
+ import { Base, Service } from "pmcf";
2
2
 
3
3
  export class ServiceOwner extends Base {
4
4
  _services = [];
@@ -7,21 +7,26 @@ export class ServiceOwner extends Base {
7
7
  return this._services;
8
8
  }
9
9
 
10
+ /**
11
+ * @param {Service} service
12
+ */
10
13
  set services(service) {
11
- const present = this._services.find(s => s.name === service.name);
12
-
13
- if (!present) {
14
- this._services.push(service);
15
- }
14
+ this._services.push(service);
16
15
  }
17
16
 
18
- *findServices(filter) {
19
- const services = filter
20
- ? this.expression(`services[${filter}]`)
21
- : this.services;
17
+ _applyExtends(owner) {
18
+ super._applyExtends(owner);
22
19
 
23
- for (const service of services) {
24
- yield service;
20
+ for (const service of owner.services) {
21
+ const present = this._services.find(s => s.name === service.name);
22
+
23
+ if (present && service.isTemplate) {
24
+ if (present.extends.indexOf(service) < 0) {
25
+ present.extends.push(service);
26
+ }
27
+ } else {
28
+ this.services = service.forOwner(this);
29
+ }
25
30
  }
26
31
  }
27
32
 
@@ -36,6 +41,16 @@ export class ServiceOwner extends Base {
36
41
  return false;
37
42
  }
38
43
 
44
+ *findServices(filter) {
45
+ const services = filter
46
+ ? this.expression(`services[${filter}]`)
47
+ : this.services;
48
+
49
+ for (const service of services) {
50
+ yield service;
51
+ }
52
+ }
53
+
39
54
  typeNamed(typeName, name) {
40
55
  if (typeName === "service") {
41
56
  const service = this.services.find(s => s.name === name);
@@ -45,16 +60,17 @@ export class ServiceOwner extends Base {
45
60
  }
46
61
 
47
62
  if (typeName === "number") {
48
- throw new Error("invalidType");
63
+ throw new Error("invalidType", { cause: typeName });
49
64
  }
50
- //console.log("TN***",typeName, name);
51
65
  return super.typeNamed(typeName, name);
52
66
  }
53
67
 
68
+ /**
69
+ *
70
+ * @param {string} name
71
+ * @returns {Service|undefined}
72
+ */
54
73
  named(name) {
55
- const service = this.services.find(s => s.name === name);
56
- if (service) {
57
- return service;
58
- }
74
+ return this._services.find(s => s.name === name);
59
75
  }
60
76
  }
package/src/service.mjs CHANGED
@@ -89,16 +89,8 @@ export class Service extends Base {
89
89
  return ServiceTypeDefinition;
90
90
  }
91
91
 
92
- get isTemplate() {
93
- // TODO
94
- if (this.fullName.startsWith("/services")) {
95
- return true;
96
- }
97
- return super.isTemplate;
98
- }
99
-
100
92
  toString() {
101
- return `${super.toString()}[${this.type}]`;
93
+ return `${this.fullName}(${this.type})`;
102
94
  }
103
95
 
104
96
  get network() {
@@ -152,8 +152,9 @@ export class KeaService extends Service {
152
152
  const network = this.network;
153
153
  const host = this.host;
154
154
  const name = host.name;
155
+ const pkgName = `kea-${this.location.name}-${name}`;
155
156
 
156
- console.log("kea", name, network.name);
157
+ console.log(pkgName, this.fullName, network.name);
157
158
 
158
159
  const dnsServerEndpoints = serviceEndpoints(network, {
159
160
  services: 'in("dns",types) && priority>=300',
@@ -165,7 +166,7 @@ export class KeaService extends Service {
165
166
  sources: [new FileContentProvider(dir + "/")],
166
167
  outputs: this.outputs,
167
168
  properties: {
168
- name: `kea-${this.location.name}-${name}`,
169
+ name: pkgName,
169
170
  description: `kea definitions for ${this.fullName}@${name}`,
170
171
  access: "private",
171
172
  dependencies: [`kea>=${keaVersion}`]
@@ -82,28 +82,38 @@ export class OpenLDAPService extends Service {
82
82
  const network = this.network;
83
83
  const host = this.host;
84
84
  const name = host.name;
85
-
86
- console.log("openldap", name, network.name);
87
-
88
- const filePermissions = [
89
- {
90
- mode: 0o644,
91
- owner: "ldap",
92
- group: "ldap"
93
- },
94
- {
95
- mode: 0o755,
96
- owner: "ldap",
97
- group: "ldap"
98
- }
99
- ];
85
+ const pkgName = `openldap-${this.location.name}-${name}`;
86
+ const owner = "ldap";
87
+ const group = "ldap";
88
+
89
+ console.log(
90
+ pkgName,
91
+ this.fullName,
92
+ this.alias,
93
+ network.name,
94
+ this.extends.map(o => o.fullName)
95
+ );
100
96
 
101
97
  const packageData = {
102
98
  dir,
103
- sources: [new FileContentProvider(dir + "/", ...filePermissions)],
99
+ sources: [
100
+ new FileContentProvider(
101
+ dir + "/",
102
+ {
103
+ mode: 0o644,
104
+ owner,
105
+ group
106
+ },
107
+ {
108
+ mode: 0o755,
109
+ owner,
110
+ group
111
+ }
112
+ )
113
+ ],
104
114
  outputs: this.outputs,
105
115
  properties: {
106
- name: `openldap-${this.location.name}-${name}`,
116
+ name: pkgName,
107
117
  description: `openldap definitions for ${this.fullName}@${name}`,
108
118
  access: "private",
109
119
  dependencies: ["openldap>=2.6.10"],
@@ -114,13 +124,13 @@ export class OpenLDAPService extends Service {
114
124
  addHook(
115
125
  packageData.properties.hooks,
116
126
  "post_upgrade",
117
- "setfacl -m u:ldap:r /etc/letsencrypt/archive/*/privkey*.pem"
127
+ `setfacl -m u:${owner}:r /etc/letsencrypt/archive/*/privkey*.pem`
118
128
  );
119
129
 
120
130
  addHook(
121
131
  packageData.properties.hooks,
122
132
  "post_install",
123
- "setfacl -m u:ldap:r /etc/letsencrypt/archive/*/privkey*.pem"
133
+ `setfacl -m u:${owner}:r /etc/letsencrypt/archive/*/privkey*.pem`
124
134
  );
125
135
 
126
136
  await writeLines(
@@ -104,15 +104,22 @@ export class SystemdJournalRemoteService extends Service {
104
104
  configFileName: `etc/systemd/journal-remote.conf.d/${name}.conf`,
105
105
  content: [
106
106
  "Remote",
107
- getAttributesJSON(
108
- this,
109
- SystemdJournalRemoteServiceTypeDefinition.attributes
110
- )
107
+ {
108
+ ...getAttributesJSON(
109
+ this,
110
+ SystemdJournalRemoteServiceTypeDefinition.attributes
111
+ ),
112
+ // TODO extendet properties with getAttribute()
113
+ ...Object.fromEntries(
114
+ Object.entries(
115
+ SystemdJournalRemoteServiceTypeDefinition.attributes
116
+ )
117
+ .map(([k, v]) => [k, this.extendedProperty(k)])
118
+ .filter(([k, v]) => v !== undefined)
119
+ )
120
+ }
111
121
  ]
112
- } /*,
113
- {
114
- serviceName: "systemd-journal-remote.socket"
115
- }*/
122
+ }
116
123
  ];
117
124
  }
118
125
  }
package/types/base.d.mts CHANGED
@@ -38,13 +38,12 @@ export class Base {
38
38
  static get typeName(): string;
39
39
  static get typeDefinition(): typeof Base;
40
40
  static get typeFileName(): string;
41
- static get fileNameGlob(): string;
42
41
  /**
43
42
  *
44
43
  * @param {Base} owner
45
- * @param {object} data
44
+ * @param {object} [data]
46
45
  */
47
- constructor(owner: Base, data: object);
46
+ constructor(owner: Base, data?: object);
48
47
  owner: Base;
49
48
  description: any;
50
49
  name: string;
@@ -52,9 +51,13 @@ export class Base {
52
51
  _packaging: Set<any>;
53
52
  _directory: any;
54
53
  _finalize: any;
54
+ _extends: any[];
55
55
  _properties: any;
56
56
  ownerFor(attribute: any, data: any): any;
57
57
  read(data: any, type?: any): void;
58
+ _applyExtends(): void;
59
+ set extends(value: any[]);
60
+ get extends(): any[];
58
61
  named(name: any): void;
59
62
  typeNamed(typeName: any, name: any): any;
60
63
  addObject(object: any): any;
@@ -62,11 +65,7 @@ export class Base {
62
65
  isNamed(name: any): boolean;
63
66
  relativeName(name: any): any;
64
67
  get typeName(): any;
65
- /**
66
- * @return {Iterable<Base>}
67
- */
68
- get extends(): Iterable<Base>;
69
- _extendedPropertyIterator(propertyName: any, seen: any): any;
68
+ _extendedPropertyIterator(propertyName: any, seen: any): Generator<any, void, any>;
70
69
  _extendedProperty(propertyName: any, seen: any): any;
71
70
  extendedProperty(propertyName: any): any;
72
71
  get root(): any;
@@ -80,9 +79,12 @@ export class Base {
80
79
  get locales(): any;
81
80
  get country(): any;
82
81
  get timezone(): any;
83
- set priority(value: any);
84
- get priority(): any;
85
- _priority: any;
82
+ set priority(value: number);
83
+ /**
84
+ * @return {number}
85
+ */
86
+ get priority(): number;
87
+ _priority: number;
86
88
  get smtp(): any;
87
89
  /**
88
90
  *
@@ -108,7 +110,7 @@ export class Base {
108
110
  preparePackages(stagingDir: any): AsyncGenerator<never, void, unknown>;
109
111
  set tags(value: Set<any>);
110
112
  get tags(): Set<any>;
111
- get isTemplate(): boolean;
113
+ get isTemplate(): any;
112
114
  get properties(): any;
113
115
  get globals(): any;
114
116
  property(name: any): any;
@@ -143,6 +143,26 @@ export class Cluster extends Host {
143
143
  env?: string[] | string;
144
144
  additionalValues?: object;
145
145
  };
146
+ template: {
147
+ private: boolean;
148
+ type: object;
149
+ isKey: boolean;
150
+ writable: boolean;
151
+ mandatory: boolean;
152
+ collection: boolean;
153
+ credential?: boolean;
154
+ persistent?: boolean;
155
+ depends?: string;
156
+ description?: string;
157
+ default?: any;
158
+ set?: Function;
159
+ get?: Function;
160
+ prepareValue?: Function;
161
+ values?: Set<any>;
162
+ externalName?: string;
163
+ env?: string[] | string;
164
+ additionalValues?: object;
165
+ };
146
166
  };
147
167
  })[];
148
168
  extends: {
package/types/host.d.mts CHANGED
@@ -183,7 +183,6 @@ export class Host extends ServiceOwner {
183
183
  address: import("pacc").AttributeDefinition;
184
184
  };
185
185
  };
186
- _extends: any[];
187
186
  _aliases: Set<any>;
188
187
  _networkInterfaces: Map<any, any>;
189
188
  _provides: Set<any>;
@@ -198,7 +197,6 @@ export class Host extends ServiceOwner {
198
197
  _serial: any;
199
198
  _keymap: any;
200
199
  extra: any;
201
- _applyExtends(host: any): void;
202
200
  set serial(value: any);
203
201
  get serial(): any;
204
202
  set deployment(value: any);
@@ -211,13 +209,10 @@ export class Host extends ServiceOwner {
211
209
  get keymap(): any;
212
210
  set architecture(value: any);
213
211
  get architecture(): any;
214
- get isTemplate(): true | RegExpMatchArray;
215
212
  get isModel(): boolean;
216
213
  get model(): any;
217
214
  set aliases(value: any);
218
215
  get aliases(): any;
219
- set extends(value: any[]);
220
- get extends(): any[];
221
216
  set provides(value: any);
222
217
  get provides(): any;
223
218
  set replaces(value: any);
@@ -240,6 +235,7 @@ export class Host extends ServiceOwner {
240
235
  get clusters(): Set<any>;
241
236
  get host(): this;
242
237
  hosts(): Generator<this, void, unknown>;
238
+ named(name: any): any;
243
239
  get networks(): Set<any>;
244
240
  set networkInterfaces(networkInterface: Map<any, any>);
245
241
  get networkInterfaces(): Map<any, any>;
@@ -143,6 +143,26 @@ export class Location extends Owner {
143
143
  env?: string[] | string;
144
144
  additionalValues?: object;
145
145
  };
146
+ template: {
147
+ private: boolean;
148
+ type: object;
149
+ isKey: boolean;
150
+ writable: boolean;
151
+ mandatory: boolean;
152
+ collection: boolean;
153
+ credential?: boolean;
154
+ persistent?: boolean;
155
+ depends?: string;
156
+ description?: string;
157
+ default?: any;
158
+ set?: Function;
159
+ get?: Function;
160
+ prepareValue?: Function;
161
+ values?: Set<any>;
162
+ externalName?: string;
163
+ env?: string[] | string;
164
+ additionalValues?: object;
165
+ };
146
166
  };
147
167
  })[];
148
168
  extends: {
@@ -287,6 +307,26 @@ export class Location extends Owner {
287
307
  env?: string[] | string;
288
308
  additionalValues?: object;
289
309
  };
310
+ template: {
311
+ private: boolean;
312
+ type: object;
313
+ isKey: boolean;
314
+ writable: boolean;
315
+ mandatory: boolean;
316
+ collection: boolean;
317
+ credential?: boolean;
318
+ persistent?: boolean;
319
+ depends?: string;
320
+ description?: string;
321
+ default?: any;
322
+ set?: Function;
323
+ get?: Function;
324
+ prepareValue?: Function;
325
+ values?: Set<any>;
326
+ externalName?: string;
327
+ env?: string[] | string;
328
+ additionalValues?: object;
329
+ };
290
330
  };
291
331
  };
292
332
  key: string;
@@ -226,6 +226,26 @@ export class EthernetNetworkInterface extends NetworkInterface {
226
226
  env?: string[] | string;
227
227
  additionalValues?: object;
228
228
  };
229
+ template: {
230
+ private: boolean;
231
+ type: object;
232
+ isKey: boolean;
233
+ writable: boolean;
234
+ mandatory: boolean;
235
+ collection: boolean;
236
+ credential?: boolean;
237
+ persistent?: boolean;
238
+ depends?: string;
239
+ description?: string;
240
+ default?: any;
241
+ set?: Function;
242
+ get?: Function;
243
+ prepareValue?: Function;
244
+ values?: Set<any>;
245
+ externalName?: string;
246
+ env?: string[] | string;
247
+ additionalValues?: object;
248
+ };
229
249
  };
230
250
  };
231
251
  key: string;
@@ -721,6 +741,26 @@ export class EthernetNetworkInterface extends NetworkInterface {
721
741
  env?: string[] | string;
722
742
  additionalValues?: object;
723
743
  };
744
+ template: {
745
+ private: boolean;
746
+ type: object;
747
+ isKey: boolean;
748
+ writable: boolean;
749
+ mandatory: boolean;
750
+ collection: boolean;
751
+ credential?: boolean;
752
+ persistent?: boolean;
753
+ depends?: string;
754
+ description?: string;
755
+ default?: any;
756
+ set?: Function;
757
+ get?: Function;
758
+ prepareValue?: Function;
759
+ values?: Set<any>;
760
+ externalName?: string;
761
+ env?: string[] | string;
762
+ additionalValues?: object;
763
+ };
724
764
  };
725
765
  };
726
766
  key: string;
@@ -197,6 +197,26 @@ export class LoopbackNetworkInterface extends SkeletonNetworkInterface {
197
197
  env?: string[] | string;
198
198
  additionalValues?: object;
199
199
  };
200
+ template: {
201
+ private: boolean;
202
+ type: object;
203
+ isKey: boolean;
204
+ writable: boolean;
205
+ mandatory: boolean;
206
+ collection: boolean;
207
+ credential?: boolean;
208
+ persistent?: boolean;
209
+ depends?: string;
210
+ description?: string;
211
+ default?: any;
212
+ set?: Function;
213
+ get?: Function;
214
+ prepareValue?: Function;
215
+ values?: Set<any>;
216
+ externalName?: string;
217
+ env?: string[] | string;
218
+ additionalValues?: object;
219
+ };
200
220
  };
201
221
  };
202
222
  key: string;
@@ -692,6 +712,26 @@ export class LoopbackNetworkInterface extends SkeletonNetworkInterface {
692
712
  env?: string[] | string;
693
713
  additionalValues?: object;
694
714
  };
715
+ template: {
716
+ private: boolean;
717
+ type: object;
718
+ isKey: boolean;
719
+ writable: boolean;
720
+ mandatory: boolean;
721
+ collection: boolean;
722
+ credential?: boolean;
723
+ persistent?: boolean;
724
+ depends?: string;
725
+ description?: string;
726
+ default?: any;
727
+ set?: Function;
728
+ get?: Function;
729
+ prepareValue?: Function;
730
+ values?: Set<any>;
731
+ externalName?: string;
732
+ env?: string[] | string;
733
+ additionalValues?: object;
734
+ };
695
735
  };
696
736
  };
697
737
  key: string;
@@ -195,6 +195,26 @@ export namespace NetworkInterfaceTypeDefinition {
195
195
  env?: string[] | string;
196
196
  additionalValues?: object;
197
197
  };
198
+ template: {
199
+ private: boolean;
200
+ type: object;
201
+ isKey: boolean;
202
+ writable: boolean;
203
+ mandatory: boolean;
204
+ collection: boolean;
205
+ credential?: boolean;
206
+ persistent?: boolean;
207
+ depends?: string;
208
+ description?: string;
209
+ default?: any;
210
+ set?: Function;
211
+ get?: Function;
212
+ prepareValue?: Function;
213
+ values?: Set<any>;
214
+ externalName?: string;
215
+ env?: string[] | string;
216
+ additionalValues?: object;
217
+ };
198
218
  };
199
219
  };
200
220
  key: string;
@@ -691,6 +711,26 @@ export class NetworkInterface extends SkeletonNetworkInterface {
691
711
  env?: string[] | string;
692
712
  additionalValues?: object;
693
713
  };
714
+ template: {
715
+ private: boolean;
716
+ type: object;
717
+ isKey: boolean;
718
+ writable: boolean;
719
+ mandatory: boolean;
720
+ collection: boolean;
721
+ credential?: boolean;
722
+ persistent?: boolean;
723
+ depends?: string;
724
+ description?: string;
725
+ default?: any;
726
+ set?: Function;
727
+ get?: Function;
728
+ prepareValue?: Function;
729
+ values?: Set<any>;
730
+ externalName?: string;
731
+ env?: string[] | string;
732
+ additionalValues?: object;
733
+ };
694
734
  };
695
735
  };
696
736
  key: string;
@@ -2,11 +2,8 @@
2
2
  *
3
3
  */
4
4
  export class SkeletonNetworkInterface extends ServiceOwner {
5
- _extends: any[];
6
5
  _network: any;
7
6
  get typeName(): string;
8
- set extends(value: any[]);
9
- get extends(): any[];
10
7
  get host(): Host;
11
8
  hosts(): Generator<Host, void, unknown>;
12
9
  get network_interface(): this;
@@ -197,6 +197,26 @@ export class TUNNetworkInterface extends NetworkInterface {
197
197
  env?: string[] | string;
198
198
  additionalValues?: object;
199
199
  };
200
+ template: {
201
+ private: boolean;
202
+ type: object;
203
+ isKey: boolean;
204
+ writable: boolean;
205
+ mandatory: boolean;
206
+ collection: boolean;
207
+ credential?: boolean;
208
+ persistent?: boolean;
209
+ depends?: string;
210
+ description?: string;
211
+ default?: any;
212
+ set?: Function;
213
+ get?: Function;
214
+ prepareValue?: Function;
215
+ values?: Set<any>;
216
+ externalName?: string;
217
+ env?: string[] | string;
218
+ additionalValues?: object;
219
+ };
200
220
  };
201
221
  };
202
222
  key: string;
@@ -692,6 +712,26 @@ export class TUNNetworkInterface extends NetworkInterface {
692
712
  env?: string[] | string;
693
713
  additionalValues?: object;
694
714
  };
715
+ template: {
716
+ private: boolean;
717
+ type: object;
718
+ isKey: boolean;
719
+ writable: boolean;
720
+ mandatory: boolean;
721
+ collection: boolean;
722
+ credential?: boolean;
723
+ persistent?: boolean;
724
+ depends?: string;
725
+ description?: string;
726
+ default?: any;
727
+ set?: Function;
728
+ get?: Function;
729
+ prepareValue?: Function;
730
+ values?: Set<any>;
731
+ externalName?: string;
732
+ env?: string[] | string;
733
+ additionalValues?: object;
734
+ };
695
735
  };
696
736
  };
697
737
  key: string;
@@ -197,6 +197,26 @@ export class WireguardNetworkInterface extends SkeletonNetworkInterface {
197
197
  env?: string[] | string;
198
198
  additionalValues?: object;
199
199
  };
200
+ template: {
201
+ private: boolean;
202
+ type: object;
203
+ isKey: boolean;
204
+ writable: boolean;
205
+ mandatory: boolean;
206
+ collection: boolean;
207
+ credential?: boolean;
208
+ persistent?: boolean;
209
+ depends?: string;
210
+ description?: string;
211
+ default?: any;
212
+ set?: Function;
213
+ get?: Function;
214
+ prepareValue?: Function;
215
+ values?: Set<any>;
216
+ externalName?: string;
217
+ env?: string[] | string;
218
+ additionalValues?: object;
219
+ };
200
220
  };
201
221
  };
202
222
  key: string;
@@ -692,6 +712,26 @@ export class WireguardNetworkInterface extends SkeletonNetworkInterface {
692
712
  env?: string[] | string;
693
713
  additionalValues?: object;
694
714
  };
715
+ template: {
716
+ private: boolean;
717
+ type: object;
718
+ isKey: boolean;
719
+ writable: boolean;
720
+ mandatory: boolean;
721
+ collection: boolean;
722
+ credential?: boolean;
723
+ persistent?: boolean;
724
+ depends?: string;
725
+ description?: string;
726
+ default?: any;
727
+ set?: Function;
728
+ get?: Function;
729
+ prepareValue?: Function;
730
+ values?: Set<any>;
731
+ externalName?: string;
732
+ env?: string[] | string;
733
+ additionalValues?: object;
734
+ };
695
735
  };
696
736
  };
697
737
  key: string;
@@ -199,6 +199,26 @@ export class WLANNetworkInterface extends EthernetNetworkInterface {
199
199
  env?: string[] | string;
200
200
  additionalValues?: object;
201
201
  };
202
+ template: {
203
+ private: boolean;
204
+ type: object;
205
+ isKey: boolean;
206
+ writable: boolean;
207
+ mandatory: boolean;
208
+ collection: boolean;
209
+ credential?: boolean;
210
+ persistent?: boolean;
211
+ depends?: string;
212
+ description?: string;
213
+ default?: any;
214
+ set?: Function;
215
+ get?: Function;
216
+ prepareValue?: Function;
217
+ values?: Set<any>;
218
+ externalName?: string;
219
+ env?: string[] | string;
220
+ additionalValues?: object;
221
+ };
202
222
  };
203
223
  };
204
224
  key: string;
@@ -694,6 +714,26 @@ export class WLANNetworkInterface extends EthernetNetworkInterface {
694
714
  env?: string[] | string;
695
715
  additionalValues?: object;
696
716
  };
717
+ template: {
718
+ private: boolean;
719
+ type: object;
720
+ isKey: boolean;
721
+ writable: boolean;
722
+ mandatory: boolean;
723
+ collection: boolean;
724
+ credential?: boolean;
725
+ persistent?: boolean;
726
+ depends?: string;
727
+ description?: string;
728
+ default?: any;
729
+ set?: Function;
730
+ get?: Function;
731
+ prepareValue?: Function;
732
+ values?: Set<any>;
733
+ externalName?: string;
734
+ env?: string[] | string;
735
+ additionalValues?: object;
736
+ };
697
737
  };
698
738
  };
699
739
  key: string;
@@ -1214,6 +1254,26 @@ export class WLANNetworkInterface extends EthernetNetworkInterface {
1214
1254
  env?: string[] | string;
1215
1255
  additionalValues?: object;
1216
1256
  };
1257
+ template: {
1258
+ private: boolean;
1259
+ type: object;
1260
+ isKey: boolean;
1261
+ writable: boolean;
1262
+ mandatory: boolean;
1263
+ collection: boolean;
1264
+ credential?: boolean;
1265
+ persistent?: boolean;
1266
+ depends?: string;
1267
+ description?: string;
1268
+ default?: any;
1269
+ set?: Function;
1270
+ get?: Function;
1271
+ prepareValue?: Function;
1272
+ values?: Set<any>;
1273
+ externalName?: string;
1274
+ env?: string[] | string;
1275
+ additionalValues?: object;
1276
+ };
1217
1277
  };
1218
1278
  };
1219
1279
  key: string;
@@ -143,6 +143,26 @@ export namespace NetworkTypeDefinition {
143
143
  env?: string[] | string;
144
144
  additionalValues?: object;
145
145
  };
146
+ template: {
147
+ private: boolean;
148
+ type: object;
149
+ isKey: boolean;
150
+ writable: boolean;
151
+ mandatory: boolean;
152
+ collection: boolean;
153
+ credential?: boolean;
154
+ persistent?: boolean;
155
+ depends?: string;
156
+ description?: string;
157
+ default?: any;
158
+ set?: Function;
159
+ get?: Function;
160
+ prepareValue?: Function;
161
+ values?: Set<any>;
162
+ externalName?: string;
163
+ env?: string[] | string;
164
+ additionalValues?: object;
165
+ };
146
166
  };
147
167
  };
148
168
  export { _extends as extends };
@@ -440,6 +460,26 @@ export class Network extends Owner {
440
460
  env?: string[] | string;
441
461
  additionalValues?: object;
442
462
  };
463
+ template: {
464
+ private: boolean;
465
+ type: object;
466
+ isKey: boolean;
467
+ writable: boolean;
468
+ mandatory: boolean;
469
+ collection: boolean;
470
+ credential?: boolean;
471
+ persistent?: boolean;
472
+ depends?: string;
473
+ description?: string;
474
+ default?: any;
475
+ set?: Function;
476
+ get?: Function;
477
+ prepareValue?: Function;
478
+ values?: Set<any>;
479
+ externalName?: string;
480
+ env?: string[] | string;
481
+ additionalValues?: object;
482
+ };
443
483
  };
444
484
  };
445
485
  key: string;
package/types/owner.d.mts CHANGED
@@ -141,10 +141,34 @@ export class Owner extends Base {
141
141
  env?: string[] | string;
142
142
  additionalValues?: object;
143
143
  };
144
+ template: {
145
+ private: boolean;
146
+ type: object;
147
+ isKey: boolean;
148
+ writable: boolean;
149
+ mandatory: boolean;
150
+ collection: boolean;
151
+ credential?: boolean;
152
+ persistent?: boolean;
153
+ depends?: string;
154
+ description?: string;
155
+ default?: any;
156
+ set?: Function;
157
+ get?: Function;
158
+ prepareValue?: Function;
159
+ values?: Set<any>;
160
+ externalName?: string;
161
+ env?: string[] | string;
162
+ additionalValues?: object;
163
+ };
144
164
  };
145
165
  };
146
166
  _membersByType: Map<any, any>;
147
167
  _bridges: Set<any>;
168
+ /**
169
+ * @return {boolean}
170
+ */
171
+ get isTemplate(): boolean;
148
172
  _traverse(...args: any[]): boolean;
149
173
  find(pattern: any): Generator<any, void, unknown>;
150
174
  named(name: any): any;
@@ -1,9 +1,19 @@
1
1
  export class ServiceOwner extends Base {
2
2
  _services: any[];
3
- set services(service: any[]);
4
- get services(): any[];
5
- findServices(filter: any): Generator<any, void, unknown>;
3
+ /**
4
+ * @param {Service} service
5
+ */
6
+ set services(service: Service);
7
+ get services(): Service;
8
+ _applyExtends(owner: any): void;
6
9
  _traverse(...args: any[]): boolean;
7
- named(name: any): any;
10
+ findServices(filter: any): Generator<any, void, unknown>;
11
+ /**
12
+ *
13
+ * @param {string} name
14
+ * @returns {Service|undefined}
15
+ */
16
+ named(name: string): Service | undefined;
8
17
  }
9
18
  import { Base } from "pmcf";
19
+ import { Service } from "pmcf";