@alauda-fe/common
Version:
Alauda frontend team common codes.
99 lines • 14.4 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { get, sortBy } from 'lodash-es';
import { TOKEN_BASE_DOMAIN } from '../constants/public-api';
import { emptyObjectRemoveRuleFactory, prefixFilterRuleFactory, stringify, yamlFilterField, } from '../utils/public-api';
import { ANNOTATIONS, LABELS, METADATA } from './k8s-util.service';
import * as i0 from "@angular/core";
export class YamlUtilService {
constructor(baseDomain) {
this.baseDomain = baseDomain;
}
// https://confluence.alauda.cn/pages/viewpage.action?pageId=112060211
// 所有资源规则全平台通用
getConciseResource(r) {
const commonFilters = [
'metadata.namespace',
'metadata.managedFields',
'metadata.creationTimestamp',
'metadata.generation',
'metadata.resourceVersion',
'metadata.uid',
'metadata.ownerReferences',
'metadata.finalizers',
'metadata.selfLink',
`metadata.labels.['app.${this.baseDomain}/uuid']`,
prefixFilterRuleFactory(this.baseDomain, [METADATA, ANNOTATIONS]),
prefixFilterRuleFactory('kubernetes.io', [METADATA, ANNOTATIONS], 'includes'),
'status',
];
const specificFilters = [];
switch (r.kind) {
case 'Application': {
specificFilters.push('metadata.labels.sync-from-helmrequest');
break;
}
case 'Deployment':
case 'StatefulSet':
case 'DaemonSet': {
specificFilters.push('spec.template.annotations.updateTimestamp');
break;
}
case 'Job': {
specificFilters.push('spec.selector.matchLabels', 'spec.template.metadata.labels.controller-uid', `${METADATA}.${LABELS}.controller-uid`, prefixFilterRuleFactory('batch.kubernetes.io/controller-uid', ['spec', 'template', METADATA, LABELS], 'includes'));
break;
}
case 'PersistentVolumeClaim': {
specificFilters.push(prefixFilterRuleFactory('pv.kubernetes.io', [METADATA, ANNOTATIONS], 'startsWith'), prefixFilterRuleFactory('volume.beta.kubernetes.io', [METADATA, ANNOTATIONS], 'startsWith'), 'spec.volumeName');
break;
}
case 'Service': {
specificFilters.push(resource => {
// ExternalName 类型的 Service 没有 ports
const ports = get(resource, ['spec', 'ports']) ?? [];
return ports.map((_, i) => ['spec', 'ports', `[${i}]`, 'nodePort'].join('.'));
}, 'spec.clusterIPs', 'spec.clusterIP', 'spec.ipFamilies', 'spec.ipFamilyPolicy');
break;
}
default: {
break;
}
}
specificFilters.push(emptyObjectRemoveRuleFactory([METADATA, ANNOTATIONS]), emptyObjectRemoveRuleFactory([METADATA, LABELS]));
return yamlFilterField(r, [...commonFilters, ...specificFilters]);
}
/**
*
*
* @template T
* @param {T} resource
* @param {boolean} [concise=false] 精简 Yaml
* @param {boolean} [reduce=false] 隐藏 managedFields
* @returns
* @memberof YamlUtilService
*/
generateFilteredYamlResource(resource, concise = false, reduce = false) {
return sortBy(Array.isArray(resource) ? resource : [resource], 'kind')
.map((resource) => concise
? this.getConciseResource(resource)
: reduce
? yamlFilterField(resource, ['metadata.managedFields'])
: resource)
.map(res => stringify(res, {
strict: false,
sortMapEntries: true,
}))
.join('\n---\r\n\n');
}
static { this.ɵfac = function YamlUtilService_Factory(t) { return new (t || YamlUtilService)(i0.ɵɵinject(TOKEN_BASE_DOMAIN)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: YamlUtilService, factory: YamlUtilService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(YamlUtilService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], () => [{ type: undefined, decorators: [{
type: Inject,
args: [TOKEN_BASE_DOMAIN]
}] }], null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC11dGlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvY29yZS9zZXJ2aWNlcy95YW1sLXV0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU01RCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxHQUVoQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUtuRSxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUF3RCxVQUFrQjtRQUFsQixlQUFVLEdBQVYsVUFBVSxDQUFRO0lBQUcsQ0FBQztJQUU5RSxzRUFBc0U7SUFDdEUsY0FBYztJQUNkLGtCQUFrQixDQUFDLENBQXFCO1FBQ3RDLE1BQU0sYUFBYSxHQUFxQjtZQUN0QyxvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLDRCQUE0QjtZQUM1QixxQkFBcUI7WUFDckIsMEJBQTBCO1lBQzFCLGNBQWM7WUFDZCwwQkFBMEI7WUFDMUIscUJBQXFCO1lBQ3JCLG1CQUFtQjtZQUNuQix5QkFBeUIsSUFBSSxDQUFDLFVBQVUsU0FBUztZQUNqRCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pFLHVCQUF1QixDQUNyQixlQUFlLEVBQ2YsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQ3ZCLFVBQVUsQ0FDWDtZQUNELFFBQVE7U0FDVCxD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LENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxRQUFRLENBQ2Y7YUFDQSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDVCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxFQUFFLEtBQUs7WUFDYixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekIsQ0FBQztnRkE1SFUsZUFBZSxjQUNOLGlCQUFpQjt1RUFEMUIsZUFBZSxXQUFmLGVBQWUsbUJBRmQsTUFBTTs7aUZBRVAsZUFBZTtjQUgzQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O3NCQUVjLE1BQU07dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXQsIHNvcnRCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFRPS0VOX0JBU0VfRE9NQUlOIH0gZnJvbSAnLi4vY29uc3RhbnRzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHtcbiAgQXJyYXlhYmxlLFxuICBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIFNlcnZpY2VQb3J0LFxufSBmcm9tICcuLi90eXBlcy9wdWJsaWMtYXBpJztcbmltcG9ydCB7XG4gIGVtcHR5T2JqZWN0UmVtb3ZlUnVsZUZhY3RvcnksXG4gIHByZWZpeEZpbHRlclJ1bGVGYWN0b3J5LFxuICBzdHJpbmdpZnksXG4gIHlhbWxGaWx0ZXJGaWVsZCxcbiAgWWFtbEZpbHRlckl0ZW0sXG59IGZyb20gJy4uL3V0aWxzL3B1YmxpYy1hcGknO1xuXG5pbXBvcnQgeyBBTk5PVEFUSU9OUywgTEFCRUxTLCBNRVRBREFUQSB9IGZyb20gJy4vazhzLXV0aWwuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBZYW1sVXRpbFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRPS0VOX0JBU0VfRE9NQUlOKSBwcml2YXRlIHJlYWRvbmx5IGJhc2VEb21haW46IHN0cmluZykge31cblxuICAvLyBodHRwczovL2NvbmZsdWVuY2UuYWxhdWRhLmNuL3BhZ2VzL3ZpZXdwYWdlLmFjdGlvbj9wYWdlSWQ9MTEyMDYwMjExXG4gIC8vIOaJgOaciei1hOa6kOinhOWImeWFqOW5s+WPsOmAmueUqFxuICBnZXRDb25jaXNlUmVzb3VyY2UocjogS3ViZXJuZXRlc1Jlc291cmNlKSB7XG4gICAgY29uc3QgY29tbW9uRmlsdGVyczogWWFtbEZpbHRlckl0ZW1bXSA9IFtcbiAgICAgICdtZXRhZGF0YS5uYW1lc3BhY2UnLFxuICAgICAgJ21ldGFkYXRhLm1hbmFnZWRGaWVsZHMnLFxuICAgICAgJ21ldGFkYXRhLmNyZWF0aW9uVGltZXN0YW1wJyxcbiAgICAgICdtZXRhZGF0YS5nZW5lcmF0aW9uJyxcbiAgICAgICdtZXRhZGF0YS5yZXNvdXJjZVZlcnNpb24nLFxuICAgICAgJ21ldGFkYXRhLnVpZCcsXG4gICAgICAnbWV0YWRhdGEub3duZXJSZWZlcmVuY2VzJyxcbiAgICAgICdtZXRhZGF0YS5maW5hbGl6ZXJzJyxcbiAgICAgICdtZXRhZGF0YS5zZWxmTGluaycsXG4gICAgICBgbWV0YWRhdGEubGFiZWxzLlsnYXBwLiR7dGhpcy5iYXNlRG9tYWlufS91dWlkJ11gLFxuICAgICAgcHJlZml4RmlsdGVyUnVsZUZhY3RvcnkodGhpcy5iYXNlRG9tYWluLCBbTUVUQURBVEEsIEFOTk9UQVRJT05TXSksXG4gICAgICBwcmVmaXhGaWx0ZXJSdWxlRmFjdG9yeShcbiAgICAgICAgJ2t1YmVybmV0ZXMuaW8nLFxuICAgICAgICBbTUVUQURBVEEsIEFOTk9UQVRJT05TXSxcbiAgICAgICAgJ2luY2x1ZGVzJyxcbiAgICAgICksXG4gICAgICAnc3RhdHVzJyxcbiAgICBdO1xuICAgIGNvbnN0IHNwZWNpZmljRmlsdGVyczogWWFtbEZpbHRlckl0ZW1bXSA9IFtdO1xuICAgIHN3aXRjaCAoci5raW5kKSB7XG4gICAgICBjYXNlICdBcHBsaWNhdGlvbic6IHtcbiAgICAgICAgc3BlY2lmaWNGaWx0ZXJzLnB1c2goJ21ldGFkYXRhLmxhYmVscy5zeW5jLWZyb20taGVsbXJlcXVlc3QnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdEZXBsb3ltZW50JzpcbiAgICAgIGNhc2UgJ1N0YXRlZnVsU2V0JzpcbiAgICAgIGNhc2UgJ0RhZW1vblNldCc6IHtcbiAgICAgICAgc3BlY2lmaWNGaWx0ZXJzLnB1c2goJ3NwZWMudGVtcGxhdGUuYW5ub3RhdGlvbnMudXBkYXRlVGltZXN0YW1wJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnSm9iJzoge1xuICAgICAgICBzcGVjaWZpY0ZpbHRlcnMucHVzaChcbiAgICAgICAgICAnc3BlYy5zZWxlY3Rvci5tYXRjaExhYmVscycsXG4gICAgICAgICAgJ3NwZWMudGVtcGxhdGUubWV0YWRhdGEubGFiZWxzLmNvbnRyb2xsZXItdWlkJyxcbiAgICAgICAgICBgJHtNRVRBREFUQX0uJHtMQUJFTFN9LmNvbnRyb2xsZXItdWlkYCxcbiAgICAgICAgICBwcmVmaXhGaWx0ZXJSdWxlRmFjdG9yeShcbiAgICAgICAgICAgICdiYXRjaC5rdWJlcm5ldGVzLmlvL2NvbnRyb2xsZXItdWlkJyxcbiAgICAgICAgICAgIFsnc3BlYycsICd0ZW1wbGF0ZScsIE1FVEFEQVRBLCBMQUJFTFNdLFxuICAgICAgICAgICAgJ2luY2x1ZGVzJyxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1BlcnNpc3RlbnRWb2x1bWVDbGFpbSc6IHtcbiAgICAgICAgc3BlY2lmaWNGaWx0ZXJzLnB1c2goXG4gICAgICAgICAgcHJlZml4RmlsdGVyUnVsZUZhY3RvcnkoXG4gICAgICAgICAgICAncHYua3ViZXJuZXRlcy5pbycsXG4gICAgICAgICAgICBbTUVUQURBVEEsIEFOTk9UQVRJT05TXSxcbiAgICAgICAgICAgICdzdGFydHNXaXRoJyxcbiAgICAgICAgICApLFxuICAgICAgICAgIHByZWZpeEZpbHRlclJ1bGVGYWN0b3J5KFxuICAgICAgICAgICAgJ3ZvbHVtZS5iZXRhLmt1YmVybmV0ZXMuaW8nLFxuICAgICAgICAgICAgW01FVEFEQVRBLCBBTk5PVEFUSU9OU10sXG4gICAgICAgICAgICAnc3RhcnRzV2l0aCcsXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnc3BlYy52b2x1bWVOYW1lJyxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTZXJ2aWNlJzoge1xuICAgICAgICBzcGVjaWZpY0ZpbHRlcnMucHVzaChcbiAgICAgICAgICByZXNvdXJjZSA9PiB7XG4gICAgICAgICAgICAvLyBFeHRlcm5hbE5hbWUg57G75Z6L55qEIFNlcnZpY2Ug5rKh5pyJIHBvcnRzXG4gICAgICAgICAgICBjb25zdCBwb3J0cyA9XG4gICAgICAgICAgICAgIChnZXQocmVzb3VyY2UsIFsnc3BlYycsICdwb3J0cyddKSBhcyBTZXJ2aWNlUG9ydFtdKSA/PyBbXTtcbiAgICAgICAgICAgIHJldHVybiBwb3J0cy5tYXAoKF8sIGkpID0+XG4gICAgICAgICAgICAgIFsnc3BlYycsICdwb3J0cycsIGBbJHtpfV1gLCAnbm9kZVBvcnQnXS5qb2luKCcuJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ3NwZWMuY2x1c3RlcklQcycsXG4gICAgICAgICAgJ3NwZWMuY2x1c3RlcklQJyxcbiAgICAgICAgICAnc3BlYy5pcEZhbWlsaWVzJyxcbiAgICAgICAgICAnc3BlYy5pcEZhbWlseVBvbGljeScsXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgc3BlY2lmaWNGaWx0ZXJzLnB1c2goXG4gICAgICBlbXB0eU9iamVjdFJlbW92ZVJ1bGVGYWN0b3J5KFtNRVRBREFUQSwgQU5OT1RBVElPTlNdKSxcbiAgICAgIGVtcHR5T2JqZWN0UmVtb3ZlUnVsZUZhY3RvcnkoW01FVEFEQVRBLCBMQUJFTFNdKSxcbiAgICApO1xuICAgIHJldHVybiB5YW1sRmlsdGVyRmllbGQociwgWy4uLmNvbW1vbkZpbHRlcnMsIC4uLnNwZWNpZmljRmlsdGVyc10pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7VH0gcmVzb3VyY2VcbiAgICogQHBhcmFtIHtib29sZWFufSBbY29uY2lzZT1mYWxzZV0g57K+566AIFlhbWxcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVkdWNlPWZhbHNlXSDpmpDol48gbWFuYWdlZEZpZWxkc1xuICAgKiBAcmV0dXJuc1xuICAgKiBAbWVtYmVyb2YgWWFtbFV0aWxTZXJ2aWNlXG4gICAqL1xuICBnZW5lcmF0ZUZpbHRlcmVkWWFtbFJlc291cmNlPFQgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2U+KFxuICAgIHJlc291cmNlOiBBcnJheWFibGU8VD4sXG4gICAgY29uY2lzZSA9IGZhbHNlLFxuICAgIHJlZHVjZSA9IGZhbHNlLFxuICApIHtcbiAgICByZXR1cm4gc29ydEJ5KEFycmF5LmlzQXJyYXkocmVzb3VyY2UpID8gcmVzb3VyY2UgOiBbcmVzb3VyY2VdLCAna2luZCcpXG4gICAgICAubWFwKChyZXNvdXJjZTogVCkgPT5cbiAgICAgICAgY29uY2lzZVxuICAgICAgICAgID8gdGhpcy5nZXRDb25jaXNlUmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAgICAgOiByZWR1Y2VcbiAgICAgICAgICAgID8geWFtbEZpbHRlckZpZWxkKHJlc291cmNlLCBbJ21ldGFkYXRhLm1hbmFnZWRGaWVsZHMnXSlcbiAgICAgICAgICAgIDogcmVzb3VyY2UsXG4gICAgICApXG4gICAgICAubWFwKHJlcyA9PlxuICAgICAgICBzdHJpbmdpZnkocmVzLCB7XG4gICAgICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAgICAgICBzb3J0TWFwRW50cmllczogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuam9pbignXFxuLS0tXFxyXFxuXFxuJyk7XG4gIH1cbn1cbiJdfQ==