pmcf 1.57.1 → 1.58.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 +1 -1
- package/src/base.mjs +17 -0
- package/src/cluster.mjs +33 -3
- package/src/dns.mjs +15 -11
- package/src/host.install +20 -0
- package/src/host.mjs +1 -1
- package/src/owner.mjs +0 -11
- package/src/service.mjs +17 -2
- package/types/base.d.mts +2 -0
- package/types/dns.d.mts +0 -1
- package/types/owner.d.mts +0 -1
- package/types/service.d.mts +4 -1
package/package.json
CHANGED
package/src/base.mjs
CHANGED
|
@@ -271,6 +271,23 @@ export class Base {
|
|
|
271
271
|
return this.owner?.timezone;
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
+
findService(filter) {
|
|
275
|
+
let best;
|
|
276
|
+
for (const service of this.findServices(filter)) {
|
|
277
|
+
if (!best || service.priority < best.priority) {
|
|
278
|
+
best = service;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return best;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
*findServices(filter) {
|
|
286
|
+
if (this.owner) {
|
|
287
|
+
yield* this.owner?.findServices(filter);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
274
291
|
#directory;
|
|
275
292
|
set directory(directory) {
|
|
276
293
|
this.#directory = directory;
|
package/src/cluster.mjs
CHANGED
|
@@ -8,15 +8,14 @@ const ClusterTypeDefinition = {
|
|
|
8
8
|
extends: Owner.typeDefinition,
|
|
9
9
|
properties: {
|
|
10
10
|
masters: { type: "host", collection: true, writeable: true },
|
|
11
|
-
backups: { type: "host", collection: true, writeable: true }
|
|
11
|
+
backups: { type: "host", collection: true, writeable: true }
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
export class Cluster extends Owner {
|
|
16
|
-
|
|
17
16
|
masters = new Set();
|
|
18
17
|
backups = new Set();
|
|
19
|
-
|
|
18
|
+
|
|
20
19
|
static {
|
|
21
20
|
addType(this);
|
|
22
21
|
}
|
|
@@ -29,4 +28,35 @@ export class Cluster extends Owner {
|
|
|
29
28
|
super(owner, data);
|
|
30
29
|
this.read(data, ClusterTypeDefinition);
|
|
31
30
|
}
|
|
31
|
+
|
|
32
|
+
get packageName() {
|
|
33
|
+
return `${this.constructor.typeDefinition.name}-${this.owner.name}-${this.name}`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async preparePackage(stagingDir) {
|
|
37
|
+
const result = await super.preparePackage(stagingDir);
|
|
38
|
+
|
|
39
|
+
const cfg = [
|
|
40
|
+
"vrrp_instance VI_1 {",
|
|
41
|
+
" state MASTER",
|
|
42
|
+
" interface end0",
|
|
43
|
+
" virtual_router_id 101",
|
|
44
|
+
" priority 255",
|
|
45
|
+
" advert_int 1",
|
|
46
|
+
" authentication {",
|
|
47
|
+
" auth_type PASS",
|
|
48
|
+
" auth_pass pass1234",
|
|
49
|
+
" }",
|
|
50
|
+
" virtual_ipaddress {",
|
|
51
|
+
" 192.168.1.250",
|
|
52
|
+
" }",
|
|
53
|
+
"}"
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
await writeLines(join(targetDir, "etc/keepalived"), "keepalived.conf", cfg);
|
|
57
|
+
|
|
58
|
+
result.properties.dependencies = ["keepalived"];
|
|
59
|
+
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
32
62
|
}
|
package/src/dns.mjs
CHANGED
|
@@ -22,6 +22,8 @@ const DNSServiceTypeDefinition = {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
+
const DNS_SERVICE_FILTER = { type: DNSServiceTypeDefinition.name };
|
|
26
|
+
|
|
25
27
|
export class DNSService extends Base {
|
|
26
28
|
allowedUpdates = [];
|
|
27
29
|
recordTTL = "1W";
|
|
@@ -65,9 +67,7 @@ export class DNSService extends Base {
|
|
|
65
67
|
return this.#forwardsTo;
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
|
|
69
|
-
const filter = { type: DNSServiceTypeDefinition.name };
|
|
70
|
-
|
|
70
|
+
*findServices(filter) {
|
|
71
71
|
yield* this.owner.findServices(filter);
|
|
72
72
|
|
|
73
73
|
for (const s of this.forwardsTo) {
|
|
@@ -80,17 +80,17 @@ export class DNSService extends Base {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
async resolvedConfig() {
|
|
83
|
-
const dnsServices =
|
|
83
|
+
const dnsServices = Array.from(this.findServices(DNS_SERVICE_FILTER)).sort(
|
|
84
84
|
(a, b) => a.priority - b.priority
|
|
85
85
|
);
|
|
86
86
|
|
|
87
87
|
const master = dnsServices
|
|
88
88
|
.filter(s => s.priority < 10)
|
|
89
|
-
.map(s => s.
|
|
89
|
+
.map(s => s.rawAddresses)
|
|
90
90
|
.flat();
|
|
91
91
|
const fallback = dnsServices
|
|
92
92
|
.filter(s => s.priority >= 10)
|
|
93
|
-
.map(s => s.
|
|
93
|
+
.map(s => s.rawAddresses)
|
|
94
94
|
.flat();
|
|
95
95
|
|
|
96
96
|
return {
|
|
@@ -131,7 +131,7 @@ async function generateNamedDefs(dns, targetDir) {
|
|
|
131
131
|
const zones = [];
|
|
132
132
|
const records = new Set();
|
|
133
133
|
|
|
134
|
-
const
|
|
134
|
+
const nameService = dns.findService(DNS_SERVICE_FILTER);
|
|
135
135
|
const rname = dns.administratorEmail.replace(/@/, ".");
|
|
136
136
|
|
|
137
137
|
let maxKeyLength;
|
|
@@ -157,18 +157,18 @@ async function generateNamedDefs(dns, targetDir) {
|
|
|
157
157
|
);
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
console.log(dns.owner.fullName, domain,
|
|
160
|
+
console.log(dns.owner.fullName, domain, nameService.domainName, rname);
|
|
161
161
|
const reverseZones = new Map();
|
|
162
162
|
|
|
163
163
|
const SOARecord = createRecord(
|
|
164
164
|
"@",
|
|
165
165
|
"SOA",
|
|
166
|
-
fullName(
|
|
166
|
+
fullName(nameService.domainName),
|
|
167
167
|
fullName(rname),
|
|
168
168
|
`(${updates})`
|
|
169
169
|
);
|
|
170
170
|
|
|
171
|
-
const NSRecord = createRecord("@", "NS", fullName(
|
|
171
|
+
const NSRecord = createRecord("@", "NS", fullName(nameService.rawAddress));
|
|
172
172
|
|
|
173
173
|
const catalogZone = {
|
|
174
174
|
id: `catalog.${domain}`,
|
|
@@ -290,7 +290,11 @@ async function generateNamedDefs(dns, targetDir) {
|
|
|
290
290
|
}
|
|
291
291
|
}
|
|
292
292
|
|
|
293
|
-
await writeLines(
|
|
293
|
+
await writeLines(
|
|
294
|
+
join(targetDir, "var/lib/named"),
|
|
295
|
+
zone.file,
|
|
296
|
+
zone.records
|
|
297
|
+
);
|
|
294
298
|
}
|
|
295
299
|
|
|
296
300
|
await writeLines(
|
package/src/host.install
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
config_resolv()
|
|
3
|
+
{
|
|
4
|
+
ls -l /etc/resolv.conf | grep -q /run/systemd/resolve/resolv.conf
|
|
5
|
+
if [ $? = 1 ]
|
|
6
|
+
then
|
|
7
|
+
mv /etc/resolv.conf /etc/resolv.conf.pre
|
|
8
|
+
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
|
|
9
|
+
fi
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
post_install()
|
|
13
|
+
{
|
|
14
|
+
config_resolv
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
post_upgrade()
|
|
18
|
+
{
|
|
19
|
+
config_resolv
|
|
20
|
+
}
|
package/src/host.mjs
CHANGED
|
@@ -109,7 +109,7 @@ export class Host extends Base {
|
|
|
109
109
|
for (const ni of this.networkInterfaces.values()) {
|
|
110
110
|
ni._traverse(...args);
|
|
111
111
|
}
|
|
112
|
-
for (const service of this
|
|
112
|
+
for (const service of this.#services) {
|
|
113
113
|
service._traverse(...args);
|
|
114
114
|
}
|
|
115
115
|
|
package/src/owner.mjs
CHANGED
|
@@ -121,17 +121,6 @@ export class Owner extends Base {
|
|
|
121
121
|
this.addTypeObject(object.typeName, object.name, object);
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
findService(filter) {
|
|
125
|
-
let best;
|
|
126
|
-
for (const service of this.findServices(filter)) {
|
|
127
|
-
if (!best || service.priority < best.priority) {
|
|
128
|
-
best = service;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return best;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
124
|
*findServices(filter) {
|
|
136
125
|
for (const host of this.hosts()) {
|
|
137
126
|
for (const service of host.findServices(filter)) {
|
package/src/service.mjs
CHANGED
|
@@ -79,16 +79,31 @@ export class Service extends Base {
|
|
|
79
79
|
return this;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
get server()
|
|
83
|
+
{
|
|
84
|
+
return this.owner;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
get domainName()
|
|
88
|
+
{
|
|
89
|
+
return this.server.domainName;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
get rawAddress()
|
|
93
|
+
{
|
|
94
|
+
return this.#ipAddresses?.[0] || this.server.rawAddress;
|
|
95
|
+
}
|
|
96
|
+
|
|
82
97
|
set ipAddresses(value) {
|
|
83
98
|
this.#ipAddresses = value;
|
|
84
99
|
}
|
|
85
100
|
|
|
86
|
-
get
|
|
101
|
+
get rawAddresses() {
|
|
87
102
|
return this.#ipAddresses || this.owner.rawAddresses;
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
get addresses() {
|
|
91
|
-
return this.
|
|
106
|
+
return this.rawAddresses.map(a => `${a}:${this.port}`);
|
|
92
107
|
}
|
|
93
108
|
|
|
94
109
|
set port(value) {
|
package/types/base.d.mts
CHANGED
|
@@ -61,6 +61,8 @@ export class Base {
|
|
|
61
61
|
get locales(): any;
|
|
62
62
|
get country(): any;
|
|
63
63
|
get timezone(): any;
|
|
64
|
+
findService(filter: any): any;
|
|
65
|
+
findServices(filter: any): Generator<any, void, any>;
|
|
64
66
|
set directory(directory: any);
|
|
65
67
|
get directory(): any;
|
|
66
68
|
get fullName(): any;
|
package/types/dns.d.mts
CHANGED
package/types/owner.d.mts
CHANGED
|
@@ -184,7 +184,6 @@ export class Owner extends Base {
|
|
|
184
184
|
typeList(typeName: any): any;
|
|
185
185
|
addTypeObject(typeName: any, name: any, object: any): void;
|
|
186
186
|
addObject(object: any): void;
|
|
187
|
-
findService(filter: any): any;
|
|
188
187
|
findServices(filter: any): Generator<any, void, unknown>;
|
|
189
188
|
locationNamed(name: any): any;
|
|
190
189
|
locations(): any;
|
package/types/service.d.mts
CHANGED
|
@@ -89,8 +89,11 @@ export class Service extends Base {
|
|
|
89
89
|
};
|
|
90
90
|
};
|
|
91
91
|
alias: any;
|
|
92
|
+
get server(): any;
|
|
93
|
+
get domainName(): any;
|
|
94
|
+
get rawAddress(): any;
|
|
92
95
|
set ipAddresses(value: any);
|
|
93
|
-
get
|
|
96
|
+
get rawAddresses(): any;
|
|
94
97
|
get addresses(): any;
|
|
95
98
|
set port(value: any);
|
|
96
99
|
get port(): any;
|