mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 00:36:13 +08:00
92 lines
2.8 KiB
JavaScript
92 lines
2.8 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const { test } = require('node:test');
|
|
|
|
const {
|
|
canaryControlJob,
|
|
configureRetirementResources,
|
|
denyCanaryResources,
|
|
} = require('../../scripts/ql3-prompt-output-key-retirement-kubernetes-live-contract.cjs');
|
|
|
|
const ROOT = path.resolve(__dirname, '../..');
|
|
|
|
test('patches the retirement Job with exact live images, canary and API routes', () => {
|
|
const rendered = require('node:child_process').execFileSync(
|
|
process.env.QL3_KUBECTL_BIN ?? 'kubectl',
|
|
[
|
|
'kustomize',
|
|
path.join(
|
|
ROOT,
|
|
'deploy/kubernetes/ql3-cluster/operations/prompt-output-key-retirement/cloudnative-pg',
|
|
),
|
|
],
|
|
{ encoding: 'utf8' },
|
|
);
|
|
const resources = configureRetirementResources(rendered, {
|
|
adminImage: 'ql3-admin:test',
|
|
denyCanaryHost: 'ql3-retirement-deny-canary.qinglong3-system.svc',
|
|
denyCanaryPort: 9443,
|
|
kubernetesServiceIp: '10.43.0.1',
|
|
kubernetesServerIp: '172.18.0.2',
|
|
});
|
|
const job = resources.find((resource) => resource.kind === 'Job');
|
|
const policy = resources.find(
|
|
(resource) => resource.kind === 'NetworkPolicy',
|
|
);
|
|
assert.deepEqual(
|
|
[
|
|
...job.spec.template.spec.initContainers,
|
|
...job.spec.template.spec.containers,
|
|
].map((container) => container.image),
|
|
['ql3-admin:test', 'ql3-admin:test'],
|
|
);
|
|
assert.equal(job.spec.template.spec.automountServiceAccountToken, false);
|
|
assert.equal(
|
|
job.spec.template.spec.initContainers[0].volumeMounts,
|
|
undefined,
|
|
);
|
|
assert.equal(
|
|
job.spec.template.spec.volumes[2].projected.sources[0].serviceAccountToken
|
|
.expirationSeconds,
|
|
600,
|
|
);
|
|
assert.deepEqual(policy.spec.egress.slice(-2), [
|
|
{
|
|
to: [{ ipBlock: { cidr: '10.43.0.1/32' } }],
|
|
ports: [{ protocol: 'TCP', port: 443 }],
|
|
},
|
|
{
|
|
to: [{ ipBlock: { cidr: '172.18.0.2/32' } }],
|
|
ports: [{ protocol: 'TCP', port: 6443 }],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('keeps the reachable deny canary and its control probe tokenless', () => {
|
|
const resources = denyCanaryResources('ql3-admin:test');
|
|
const deployment = resources.find(
|
|
(resource) => resource.kind === 'Deployment',
|
|
);
|
|
const service = resources.find((resource) => resource.kind === 'Service');
|
|
const control = canaryControlJob('ql3-admin:test');
|
|
assert.equal(
|
|
deployment.spec.template.spec.automountServiceAccountToken,
|
|
false,
|
|
);
|
|
assert.equal(service.spec.ports[0].port, 9443);
|
|
assert.equal(control.spec.template.spec.automountServiceAccountToken, false);
|
|
assert.equal(
|
|
fs
|
|
.readFileSync(
|
|
path.join(
|
|
ROOT,
|
|
'deploy/kubernetes/ql3-cluster/operations/prompt-output-key-retirement/base/service-account.yaml',
|
|
),
|
|
'utf8',
|
|
)
|
|
.includes('automountServiceAccountToken: false'),
|
|
true,
|
|
);
|
|
});
|