UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

99 lines 14.4 kB
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==