diff --git a/.claude/skills/gen-rtl-test/SKILL.md b/.claude/skills/gen-rtl-test/SKILL.md index 8776f3732fa..f2dbbfce17c 100644 --- a/.claude/skills/gen-rtl-test/SKILL.md +++ b/.claude/skills/gen-rtl-test/SKILL.md @@ -620,7 +620,9 @@ it('renders') ### Rule 18: Avoid Snapshot Tests -**DO NOT** use `toMatchSnapshot()`. Snapshot tests are brittle, give false security, and test implementation details. +**DO NOT** use `toMatchSnapshot()`, `toMatchInlineSnapshot()`, or error snapshot matchers. Snapshot tests are brittle, give false security, and test implementation details. Prefer **`toStrictEqual`**, **`toMatchObject`**, or RTL queries on user-visible output. + +**Enforcement:** `jest/no-restricted-matchers` from `eslint-plugin-console` **errors** on these matchers for paths matched by `plugin:console/testing-library-tests` (the same `**/*spec*` / `**/__tests__**` globs used for RTL lint). ### Rule 19: Render in Each Test by Default diff --git a/frontend/packages/dev-console/src/utils/__tests__/__snapshots__/shared-submit-utils.spec.ts.snap b/frontend/packages/dev-console/src/utils/__tests__/__snapshots__/shared-submit-utils.spec.ts.snap deleted file mode 100644 index 7db62572c05..00000000000 --- a/frontend/packages/dev-console/src/utils/__tests__/__snapshots__/shared-submit-utils.spec.ts.snap +++ /dev/null @@ -1,140 +0,0 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`Shared submit utils Create Route should match the previous snapshot deploy image data 1`] = ` -{ - "apiVersion": "route.openshift.io/v1", - "kind": "Route", - "metadata": { - "annotations": { - "openshift.io/generated-by": "OpenShiftWebConsole", - }, - "labels": { - "app": "test-app", - "app.kubernetes.io/component": "test-app", - "app.kubernetes.io/instance": "test-app", - "app.kubernetes.io/name": "test-app", - "app.kubernetes.io/part-of": "mock-app", - "app.openshift.io/runtime-version": "latest", - }, - "name": "test-app", - "namespace": "mock-project", - }, - "spec": { - "host": "", - "path": "", - "port": { - "targetPort": "8080-tcp", - }, - "tls": null, - "to": { - "kind": "Service", - "name": "test-app", - }, - "wildcardPolicy": "None", - }, -} -`; - -exports[`Shared submit utils Create Route should match the previous snapshot with git import data 1`] = ` -{ - "apiVersion": "route.openshift.io/v1", - "kind": "Route", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "", - "app.openshift.io/vcs-uri": "https://github.com/test/repo", - "openshift.io/generated-by": "OpenShiftWebConsole", - }, - "labels": { - "app": "test-app", - "app.kubernetes.io/component": "test-app", - "app.kubernetes.io/instance": "test-app", - "app.kubernetes.io/name": "test-app", - "app.kubernetes.io/part-of": "mock-app", - "app.openshift.io/runtime-version": "latest", - }, - "name": "test-app", - "namespace": "mock-project", - }, - "spec": { - "host": "", - "path": "", - "port": { - "targetPort": "8080-tcp", - }, - "tls": null, - "to": { - "kind": "Service", - "name": "test-app", - }, - "wildcardPolicy": "None", - }, -} -`; - -exports[`Shared submit utils Create Service should match the previous snapshot created with deploy image data 1`] = ` -{ - "apiVersion": "v1", - "kind": "Service", - "metadata": { - "annotations": { - "openshift.io/generated-by": "OpenShiftWebConsole", - }, - "labels": { - "app": "test-app", - "app.kubernetes.io/component": "test-app", - "app.kubernetes.io/instance": "test-app", - "app.kubernetes.io/name": "test-app", - "app.kubernetes.io/part-of": "mock-app", - "app.openshift.io/runtime-version": "latest", - }, - "name": "test-app", - "namespace": "mock-project", - }, - "spec": { - "ports": [], - "selector": { - "app": "test-app", - "deploymentconfig": "test-app", - }, - }, -} -`; - -exports[`Shared submit utils Create Service should match the previous snapshot created with git import data 1`] = ` -{ - "apiVersion": "v1", - "kind": "Service", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "", - "app.openshift.io/vcs-uri": "https://github.com/test/repo", - "openshift.io/generated-by": "OpenShiftWebConsole", - }, - "labels": { - "app": "test-app", - "app.kubernetes.io/component": "test-app", - "app.kubernetes.io/instance": "test-app", - "app.kubernetes.io/name": "test-app", - "app.kubernetes.io/part-of": "mock-app", - "app.openshift.io/runtime-version": "latest", - }, - "name": "test-app", - "namespace": "mock-project", - }, - "spec": { - "ports": [ - { - "name": "8080-tcp", - "port": 8080, - "protocol": "TCP", - "targetPort": 8080, - }, - ], - "selector": { - "app": "test-app", - "deploymentconfig": "test-app", - }, - }, -} -`; diff --git a/frontend/packages/dev-console/src/utils/__tests__/shared-submit-utils.spec.ts b/frontend/packages/dev-console/src/utils/__tests__/shared-submit-utils.spec.ts index f979e96210c..8a663e93006 100644 --- a/frontend/packages/dev-console/src/utils/__tests__/shared-submit-utils.spec.ts +++ b/frontend/packages/dev-console/src/utils/__tests__/shared-submit-utils.spec.ts @@ -22,16 +22,75 @@ describe('Shared submit utils', () => { expect(serviceObj.spec.ports[0].port).toEqual(8081); }); - it('should match the previous snapshot created with git import data', () => { + it('should build the expected service object for git import data', () => { const mockData: GitImportFormData = _.cloneDeep(mockFormData); const serviceObj = createService(mockData); - expect(serviceObj).toMatchSnapshot(); + expect(serviceObj).toStrictEqual({ + apiVersion: 'v1', + kind: 'Service', + metadata: { + annotations: { + 'app.openshift.io/vcs-ref': '', + 'app.openshift.io/vcs-uri': 'https://github.com/test/repo', + 'openshift.io/generated-by': 'OpenShiftWebConsole', + }, + labels: { + app: 'test-app', + 'app.kubernetes.io/component': 'test-app', + 'app.kubernetes.io/instance': 'test-app', + 'app.kubernetes.io/name': 'test-app', + 'app.kubernetes.io/part-of': 'mock-app', + 'app.openshift.io/runtime-version': 'latest', + }, + name: 'test-app', + namespace: 'mock-project', + }, + spec: { + ports: [ + { + name: '8080-tcp', + port: 8080, + protocol: 'TCP', + targetPort: 8080, + }, + ], + selector: { + app: 'test-app', + deploymentconfig: 'test-app', + }, + }, + }); }); - it('should match the previous snapshot created with deploy image data', () => { + it('should build the expected service object for deploy image data', () => { const mockDeployImageData: DeployImageFormData = _.cloneDeep(mockDeployImageFormData); const serviceObj = createService(mockDeployImageData); - expect(serviceObj).toMatchSnapshot(); + expect(serviceObj).toStrictEqual({ + apiVersion: 'v1', + kind: 'Service', + metadata: { + annotations: { + 'openshift.io/generated-by': 'OpenShiftWebConsole', + }, + labels: { + app: 'test-app', + 'app.kubernetes.io/component': 'test-app', + 'app.kubernetes.io/instance': 'test-app', + 'app.kubernetes.io/name': 'test-app', + 'app.kubernetes.io/part-of': 'mock-app', + 'app.openshift.io/runtime-version': 'latest', + }, + name: 'test-app', + namespace: 'mock-project', + }, + spec: { + ports: [], + selector: { + app: 'test-app', + deploymentconfig: 'test-app', + }, + }, + }); }); it('should expose only the custom port as TargetPort when it is set', () => { @@ -122,18 +181,82 @@ describe('Shared submit utils', () => { }); }); - it('should match the previous snapshot with git import data', () => { + it('should build the expected route object for git import data', () => { const mockData: GitImportFormData = _.cloneDeep(mockFormData); mockData.route.targetPort = '8080-tcp'; const routeObj = createRoute(mockData); - expect(routeObj).toMatchSnapshot(); + expect(routeObj).toStrictEqual({ + apiVersion: 'route.openshift.io/v1', + kind: 'Route', + metadata: { + annotations: { + 'app.openshift.io/vcs-ref': '', + 'app.openshift.io/vcs-uri': 'https://github.com/test/repo', + 'openshift.io/generated-by': 'OpenShiftWebConsole', + }, + labels: { + app: 'test-app', + 'app.kubernetes.io/component': 'test-app', + 'app.kubernetes.io/instance': 'test-app', + 'app.kubernetes.io/name': 'test-app', + 'app.kubernetes.io/part-of': 'mock-app', + 'app.openshift.io/runtime-version': 'latest', + }, + name: 'test-app', + namespace: 'mock-project', + }, + spec: { + host: '', + path: '', + port: { + targetPort: '8080-tcp', + }, + tls: null, + to: { + kind: 'Service', + name: 'test-app', + }, + wildcardPolicy: 'None', + }, + }); }); - it('should match the previous snapshot deploy image data', () => { + it('should build the expected route object for deploy image data', () => { const mockDeployImageData: DeployImageFormData = _.cloneDeep(mockDeployImageFormData); mockDeployImageData.route.targetPort = '8080-tcp'; const routeObj = createRoute(mockDeployImageData); - expect(routeObj).toMatchSnapshot(); + expect(routeObj).toStrictEqual({ + apiVersion: 'route.openshift.io/v1', + kind: 'Route', + metadata: { + annotations: { + 'openshift.io/generated-by': 'OpenShiftWebConsole', + }, + labels: { + app: 'test-app', + 'app.kubernetes.io/component': 'test-app', + 'app.kubernetes.io/instance': 'test-app', + 'app.kubernetes.io/name': 'test-app', + 'app.kubernetes.io/part-of': 'mock-app', + 'app.openshift.io/runtime-version': 'latest', + }, + name: 'test-app', + namespace: 'mock-project', + }, + spec: { + host: '', + path: '', + port: { + targetPort: '8080-tcp', + }, + tls: null, + to: { + kind: 'Service', + name: 'test-app', + }, + wildcardPolicy: 'None', + }, + }); }); }); }); diff --git a/frontend/packages/eslint-plugin-console/lib/config/rules/jest.js b/frontend/packages/eslint-plugin-console/lib/config/rules/jest.js index 4d29793a819..6a93f72e059 100644 --- a/frontend/packages/eslint-plugin-console/lib/config/rules/jest.js +++ b/frontend/packages/eslint-plugin-console/lib/config/rules/jest.js @@ -11,11 +11,10 @@ module.exports = { 'jest/no-identical-title': 'error', // Disallow Jasmine globals 'jest/no-jasmine-globals': 'error', - // Limited snapshot sizes to keep snapshops manageable and reviewable. - 'jest/no-large-snapshots': 'off', + // For better failure messages, use `toHaveLength()` to on object lengths. 'jest/prefer-to-have-length': 'error', - // Suggest using toMatchInlineSnapshot() + // Inline snapshots are disallowed via jest/no-restricted-matchers 'jest/prefer-inline-snapshots': 'off', // For better failure messages, use `toBeNull()` to assert on null values. 'jest/prefer-to-be-null': 'error', @@ -65,4 +64,17 @@ module.exports = { 'jest/no-mocks-import': 'error', // Disallow commented out tests 'jest/no-commented-out-tests': 'error', + // Prefer explicit assertions over snapshots (aligns with gen-rtl-test / RTL hooks guidance) + 'jest/no-restricted-matchers': [ + 'error', + { + toMatchSnapshot: + 'Do not use toMatchSnapshot(); use explicit assertions (e.g. toStrictEqual on focused objects, getByRole, etc.).', + toMatchInlineSnapshot: 'Do not use toMatchInlineSnapshot(); use explicit assertions instead.', + toThrowErrorMatchingSnapshot: + 'Do not use toThrowErrorMatchingSnapshot(); assert on error message or type explicitly.', + toThrowErrorMatchingInlineSnapshot: + 'Do not use toThrowErrorMatchingInlineSnapshot(); assert on error message or type explicitly.', + }, + ], }; diff --git a/frontend/packages/eslint-plugin-console/lib/config/testing-library-tests.js b/frontend/packages/eslint-plugin-console/lib/config/testing-library-tests.js index fcef4fe1301..92d834d6538 100644 --- a/frontend/packages/eslint-plugin-console/lib/config/testing-library-tests.js +++ b/frontend/packages/eslint-plugin-console/lib/config/testing-library-tests.js @@ -11,17 +11,28 @@ * - `no-wait-for-side-effects` (replaces the removed `no-wait-for-empty-callback` in older plugin majors) * * The following **additional** rules are turned on, which are not enabled in `plugin:testing-library/react` by default. + * + * `jest/no-restricted-matchers` is applied here (not via `extends: ['plugin:console/jest']`) so snapshot + * matchers are blocked under the same test `files` globs as RTL rules, without enabling the full Jest + * ruleset from `rules/jest.js` (that preset is still omitted from `react-typescript-prettier`; turning + * it on globally would surface many legacy violations). */ +const jestRules = require('./rules/jest'); + module.exports = { overrides: [ { files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], - plugins: ['testing-library'], + plugins: ['testing-library', 'jest'], + env: { + 'jest/globals': true, + }, extends: ['plugin:testing-library/react'], rules: { 'testing-library/prefer-explicit-assert': 'error', 'testing-library/prefer-user-event': 'error', 'testing-library/prefer-user-event-setup': 'error', + 'jest/no-restricted-matchers': jestRules['jest/no-restricted-matchers'], }, }, ], diff --git a/frontend/packages/topology/src/data-transforms/__tests__/__snapshots__/data-transformer.spec.ts.snap b/frontend/packages/topology/src/data-transforms/__tests__/__snapshots__/data-transformer.spec.ts.snap deleted file mode 100644 index 7b4d15f078e..00000000000 --- a/frontend/packages/topology/src/data-transforms/__tests__/__snapshots__/data-transformer.spec.ts.snap +++ /dev/null @@ -1,2513 +0,0 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`data transformer should match the previous snapshot 1`] = ` -{ - "edges": [ - { - "id": "5ca9ae28-680d-11e9-8c69-5254003f9382_60a9b423-680d-11e9-8c69-5254003f9382", - "label": "Visual connector", - "source": "5ca9ae28-680d-11e9-8c69-5254003f9382", - "target": "60a9b423-680d-11e9-8c69-5254003f9382", - "type": "connects-to", - }, - ], - "nodes": [ - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~Deployment", - "monitoringAlerts": [], - "vcsRef": undefined, - "vcsURI": undefined, - }, - "id": "5ca9ae28-680d-11e9-8c69-5254003f9382", - "name": "analytics-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "app.openshift.io/connects-to": "["wit"]", - }, - "creationTimestamp": "2019-04-22T11:35:37Z", - "generation": 5, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "analytics-deployment", - "namespace": "testproject1", - "resourceVersion": "753748", - "uid": "5ca9ae28-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [], - }, - }, - }, - "status": {}, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "app.openshift.io/connects-to": "["wit"]", - }, - "creationTimestamp": "2019-04-22T11:35:37Z", - "generation": 5, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "analytics-deployment", - "namespace": "testproject1", - "resourceVersion": "753748", - "uid": "5ca9ae28-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [], - }, - }, - }, - "status": {}, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "5ca9ae28-680d-11e9-8c69-5254003f9382", - "label": "analytics-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "app.openshift.io/connects-to": "["wit"]", - }, - "creationTimestamp": "2019-04-22T11:35:37Z", - "generation": 5, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "analytics-deployment", - "namespace": "testproject1", - "resourceVersion": "753748", - "uid": "5ca9ae28-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [], - }, - }, - }, - "status": {}, - }, - "resourceKind": "apps~v1~Deployment", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~Deployment", - "monitoringAlerts": [], - "vcsRef": undefined, - "vcsURI": undefined, - }, - "id": "60a9b423-680d-11e9-8c69-5254003f9382", - "name": "wit-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - }, - "creationTimestamp": "2019-04-22T11:35:43Z", - "generation": 2, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "wit-deployment", - "namespace": "testproject1", - "resourceVersion": "726179", - "uid": "60a9b423-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment-1", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - }, - }, - }, - "status": {}, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - }, - "creationTimestamp": "2019-04-22T11:35:43Z", - "generation": 2, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "wit-deployment", - "namespace": "testproject1", - "resourceVersion": "726179", - "uid": "60a9b423-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment-1", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - }, - }, - }, - "status": {}, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "60a9b423-680d-11e9-8c69-5254003f9382", - "label": "wit-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - }, - "creationTimestamp": "2019-04-22T11:35:43Z", - "generation": 2, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "wit-deployment", - "namespace": "testproject1", - "resourceVersion": "726179", - "uid": "60a9b423-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment-1", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - }, - }, - }, - "status": {}, - }, - "resourceKind": "apps~v1~Deployment", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~Deployment", - "monitoringAlerts": [], - "vcsRef": undefined, - "vcsURI": undefined, - }, - "id": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - "name": "jaeger-all-in-one-inmemory", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": "2019-12-15T17:31:52Z", - "generation": 1, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - "name": "jaeger-all-in-one-inmemory", - "namespace": "myproj", - "ownerReferences": [ - { - "apiVersion": "jaegertracing.io/v1", - "controller": true, - "kind": "Jaeger", - "name": "jaeger-all-in-one-inmemory", - "uid": "3006a8f3-6e2b-4a19-b37e-fbddd9a41f51", - }, - ], - "resourceVersion": "120365", - "uid": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 1, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "annotations": { - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": null, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "livenessProbe": { - "failureThreshold": 1, - "httpGet": { - "path": "/healthz", - "port": 8080, - "scheme": "HTTP", - }, - "periodSeconds": 10, - }, - "name": "jaeger-all-in-one-inmemory", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - "dnsPolicy": "ClusterFirst", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "jaeger-all-in-one-inmemory-ui-proxy", - "serviceAccountName": "jaeger-all-in-one-inmemory-ui-proxy", - "terminationGracePeriodSeconds": 30, - "volumes": [], - }, - }, - }, - "status": { - "availableReplicas": 1, - "conditions": [], - "observedGeneration": 1, - "readyReplicas": 1, - "replicas": 1, - "updatedReplicas": 1, - }, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": "2019-12-15T17:31:52Z", - "generation": 1, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - "name": "jaeger-all-in-one-inmemory", - "namespace": "myproj", - "ownerReferences": [ - { - "apiVersion": "jaegertracing.io/v1", - "controller": true, - "kind": "Jaeger", - "name": "jaeger-all-in-one-inmemory", - "uid": "3006a8f3-6e2b-4a19-b37e-fbddd9a41f51", - }, - ], - "resourceVersion": "120365", - "uid": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 1, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "annotations": { - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": null, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "livenessProbe": { - "failureThreshold": 1, - "httpGet": { - "path": "/healthz", - "port": 8080, - "scheme": "HTTP", - }, - "periodSeconds": 10, - }, - "name": "jaeger-all-in-one-inmemory", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - "dnsPolicy": "ClusterFirst", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "jaeger-all-in-one-inmemory-ui-proxy", - "serviceAccountName": "jaeger-all-in-one-inmemory-ui-proxy", - "terminationGracePeriodSeconds": 30, - "volumes": [], - }, - }, - }, - "status": { - "availableReplicas": 1, - "conditions": [], - "observedGeneration": 1, - "readyReplicas": 1, - "replicas": 1, - "updatedReplicas": 1, - }, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - "label": "jaeger-all-in-one-inmemory", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": "2019-12-15T17:31:52Z", - "generation": 1, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - "name": "jaeger-all-in-one-inmemory", - "namespace": "myproj", - "ownerReferences": [ - { - "apiVersion": "jaegertracing.io/v1", - "controller": true, - "kind": "Jaeger", - "name": "jaeger-all-in-one-inmemory", - "uid": "3006a8f3-6e2b-4a19-b37e-fbddd9a41f51", - }, - ], - "resourceVersion": "120365", - "uid": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 1, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "annotations": { - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": null, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "livenessProbe": { - "failureThreshold": 1, - "httpGet": { - "path": "/healthz", - "port": 8080, - "scheme": "HTTP", - }, - "periodSeconds": 10, - }, - "name": "jaeger-all-in-one-inmemory", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - "dnsPolicy": "ClusterFirst", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "jaeger-all-in-one-inmemory-ui-proxy", - "serviceAccountName": "jaeger-all-in-one-inmemory-ui-proxy", - "terminationGracePeriodSeconds": 30, - "volumes": [], - }, - }, - }, - "status": { - "availableReplicas": 1, - "conditions": [], - "observedGeneration": 1, - "readyReplicas": 1, - "replicas": 1, - "updatedReplicas": 1, - }, - }, - "resourceKind": "apps~v1~Deployment", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~DeploymentConfig", - "monitoringAlerts": [], - "vcsRef": "master", - "vcsURI": "https://github.com/redhat-developer/topology-example", - }, - "id": "02f680df-680f-11e9-b69e-5254003f9382", - "name": "nodejs", - "resource": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs", - "app.kubernetes.io/instance": "nodejs", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs", - "namespace": "testproject1", - "resourceVersion": "732186", - "uid": "02f680df-680f-11e9-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs", - "deploymentconfig": "nodejs", - }, - }, - "spec": {}, - }, - "triggers": [ - { - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "nodejs", - ], - "from": { - "kind": "ImageStreamTag", - "name": "nodejs:latest", - "namespace": "testproject1", - }, - }, - "type": "ImageChange", - }, - { - "type": "ConfigChange", - }, - ], - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs", - "app.kubernetes.io/instance": "nodejs", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs", - "namespace": "testproject1", - "resourceVersion": "732186", - "uid": "02f680df-680f-11e9-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs", - "deploymentconfig": "nodejs", - }, - }, - "spec": {}, - }, - "triggers": [ - { - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "nodejs", - ], - "from": { - "kind": "ImageStreamTag", - "name": "nodejs:latest", - "namespace": "testproject1", - }, - }, - "type": "ImageChange", - }, - { - "type": "ConfigChange", - }, - ], - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "02f680df-680f-11e9-b69e-5254003f9382", - "label": "nodejs", - "resource": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs", - "app.kubernetes.io/instance": "nodejs", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs", - "namespace": "testproject1", - "resourceVersion": "732186", - "uid": "02f680df-680f-11e9-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs", - "deploymentconfig": "nodejs", - }, - }, - "spec": {}, - }, - "triggers": [ - { - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "nodejs", - ], - "from": { - "kind": "ImageStreamTag", - "name": "nodejs:latest", - "namespace": "testproject1", - }, - }, - "type": "ImageChange", - }, - { - "type": "ConfigChange", - }, - ], - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - "resourceKind": "apps~v1~DeploymentConfig", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~DeploymentConfig", - "monitoringAlerts": [], - "vcsRef": "master", - "vcsURI": "https://github.com/redhat-developer/topology-example", - }, - "id": "02f680df-680f-11e9-b69e-5254003f9382", - "name": "nodejs-with-bc", - "resource": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs-with-bc", - "app.kubernetes.io/instance": "nodejs-with-bc", - "app.openshift.io/part-of": "nodejs-with-bc", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs-with-bc", - "namespace": "testproject", - "resourceVersion": "732186", - "uid": "02f680df-680f-11e9-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs-with-bc", - "deploymentconfig": "nodejs-with-bc", - }, - }, - "spec": {}, - }, - "triggers": [ - { - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "nodejs-with-bc", - ], - "from": { - "kind": "ImageStreamTag", - "name": "nodejs:latest", - "namespace": "testproject", - }, - }, - "type": "ImageChange", - }, - { - "type": "ConfigChange", - }, - ], - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs-with-bc", - "app.kubernetes.io/instance": "nodejs-with-bc", - "app.openshift.io/part-of": "nodejs-with-bc", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs-with-bc", - "namespace": "testproject", - "resourceVersion": "732186", - "uid": "02f680df-680f-11e9-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs-with-bc", - "deploymentconfig": "nodejs-with-bc", - }, - }, - "spec": {}, - }, - "triggers": [ - { - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "nodejs-with-bc", - ], - "from": { - "kind": "ImageStreamTag", - "name": "nodejs:latest", - "namespace": "testproject", - }, - }, - "type": "ImageChange", - }, - { - "type": "ConfigChange", - }, - ], - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "02f680df-680f-11e9-b69e-5254003f9382", - "label": "nodejs-with-bc", - "resource": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs-with-bc", - "app.kubernetes.io/instance": "nodejs-with-bc", - "app.openshift.io/part-of": "nodejs-with-bc", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs-with-bc", - "namespace": "testproject", - "resourceVersion": "732186", - "uid": "02f680df-680f-11e9-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs-with-bc", - "deploymentconfig": "nodejs-with-bc", - }, - }, - "spec": {}, - }, - "triggers": [ - { - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "nodejs-with-bc", - ], - "from": { - "kind": "ImageStreamTag", - "name": "nodejs:latest", - "namespace": "testproject", - }, - }, - "type": "ImageChange", - }, - { - "type": "ConfigChange", - }, - ], - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - "resourceKind": "apps~v1~DeploymentConfig", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~DeploymentConfig", - "monitoringAlerts": [], - "vcsRef": "master", - "vcsURI": "https://github.com/redhat-developer/topology-example", - }, - "id": "02f680df-b69e-5254003f9382", - "name": "nodejs-ex", - "resource": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs-ex", - "app.kubernetes.io/instance": "nodejs-ex", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs-ex", - "namespace": "testproject1", - "resourceVersion": "732186", - "uid": "02f680df-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs-ex", - "deploymentconfig": "nodejs-ex", - }, - }, - "spec": {}, - }, - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs-ex", - "app.kubernetes.io/instance": "nodejs-ex", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs-ex", - "namespace": "testproject1", - "resourceVersion": "732186", - "uid": "02f680df-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs-ex", - "deploymentconfig": "nodejs-ex", - }, - }, - "spec": {}, - }, - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "02f680df-b69e-5254003f9382", - "label": "nodejs-ex", - "resource": { - "apiVersion": "apps/v1", - "kind": "DeploymentConfig", - "metadata": { - "annotations": { - "app.openshift.io/vcs-ref": "master", - "app.openshift.io/vcs-uri": "https://github.com/redhat-developer/topology-example", - }, - "creationTimestamp": "2019-04-22T11:58:33Z", - "generation": 2, - "labels": { - "app": "nodejs-ex", - "app.kubernetes.io/instance": "nodejs-ex", - "app.openshift.io/runtime": "nodejs", - }, - "name": "nodejs-ex", - "namespace": "testproject1", - "resourceVersion": "732186", - "uid": "02f680df-b69e-5254003f9382", - }, - "spec": { - "strategy": { - "type": "Rolling", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app": "nodejs-ex", - "deploymentconfig": "nodejs-ex", - }, - }, - "spec": {}, - }, - }, - "status": { - "availableReplicas": 1, - "latestVersion": 1, - "readyReplicas": 1, - "replicas": 1, - "unavailableReplicas": 0, - "updatedReplicas": 1, - }, - }, - "resourceKind": "apps~v1~DeploymentConfig", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "children": [ - "5ca9ae28-680d-11e9-8c69-5254003f9382", - "60a9b423-680d-11e9-8c69-5254003f9382", - ], - "collapsed": false, - "data": { - "groupResources": [ - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~Deployment", - "monitoringAlerts": [], - "vcsRef": undefined, - "vcsURI": undefined, - }, - "id": "5ca9ae28-680d-11e9-8c69-5254003f9382", - "name": "analytics-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "app.openshift.io/connects-to": "["wit"]", - }, - "creationTimestamp": "2019-04-22T11:35:37Z", - "generation": 5, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "analytics-deployment", - "namespace": "testproject1", - "resourceVersion": "753748", - "uid": "5ca9ae28-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [], - }, - }, - }, - "status": {}, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "app.openshift.io/connects-to": "["wit"]", - }, - "creationTimestamp": "2019-04-22T11:35:37Z", - "generation": 5, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "analytics-deployment", - "namespace": "testproject1", - "resourceVersion": "753748", - "uid": "5ca9ae28-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [], - }, - }, - }, - "status": {}, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "5ca9ae28-680d-11e9-8c69-5254003f9382", - "label": "analytics-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "app.openshift.io/connects-to": "["wit"]", - }, - "creationTimestamp": "2019-04-22T11:35:37Z", - "generation": 5, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "analytics-deployment", - "namespace": "testproject1", - "resourceVersion": "753748", - "uid": "5ca9ae28-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "analytics", - "app.kubernetes.io/name": "python", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [], - }, - }, - }, - "status": {}, - }, - "resourceKind": "apps~v1~Deployment", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~Deployment", - "monitoringAlerts": [], - "vcsRef": undefined, - "vcsURI": undefined, - }, - "id": "60a9b423-680d-11e9-8c69-5254003f9382", - "name": "wit-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - }, - "creationTimestamp": "2019-04-22T11:35:43Z", - "generation": 2, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "wit-deployment", - "namespace": "testproject1", - "resourceVersion": "726179", - "uid": "60a9b423-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment-1", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - }, - }, - }, - "status": {}, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - }, - "creationTimestamp": "2019-04-22T11:35:43Z", - "generation": 2, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "wit-deployment", - "namespace": "testproject1", - "resourceVersion": "726179", - "uid": "60a9b423-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment-1", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - }, - }, - }, - "status": {}, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "60a9b423-680d-11e9-8c69-5254003f9382", - "label": "wit-deployment", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - }, - "creationTimestamp": "2019-04-22T11:35:43Z", - "generation": 2, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - "name": "wit-deployment", - "namespace": "testproject1", - "resourceVersion": "726179", - "uid": "60a9b423-680d-11e9-8c69-5254003f9382", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 3, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "creationTimestamp": null, - "labels": { - "app.kubernetes.io/component": "backend", - "app.kubernetes.io/instance": "wit", - "app.kubernetes.io/name": "nodejs", - "app.kubernetes.io/part-of": "application-1", - "app.kubernetes.io/version": "1.0", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "name": "wit-deployment-1", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - }, - }, - }, - "status": {}, - }, - "resourceKind": "apps~v1~Deployment", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - ], - }, - "group": true, - "height": 180, - "id": "group:application-1", - "label": "application-1", - "style": { - "padding": [ - 40, - 40, - 60, - 40, - ], - }, - "type": "part-of", - "visible": true, - "width": 300, - }, - { - "children": [ - "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - ], - "collapsed": false, - "data": { - "groupResources": [ - { - "data": { - "data": { - "builderImage": "test-file-stub", - "contextDir": null, - "editURL": undefined, - "isKnativeResource": false, - "kind": "apps~v1~Deployment", - "monitoringAlerts": [], - "vcsRef": undefined, - "vcsURI": undefined, - }, - "id": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - "name": "jaeger-all-in-one-inmemory", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": "2019-12-15T17:31:52Z", - "generation": 1, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - "name": "jaeger-all-in-one-inmemory", - "namespace": "myproj", - "ownerReferences": [ - { - "apiVersion": "jaegertracing.io/v1", - "controller": true, - "kind": "Jaeger", - "name": "jaeger-all-in-one-inmemory", - "uid": "3006a8f3-6e2b-4a19-b37e-fbddd9a41f51", - }, - ], - "resourceVersion": "120365", - "uid": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 1, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "annotations": { - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": null, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "livenessProbe": { - "failureThreshold": 1, - "httpGet": { - "path": "/healthz", - "port": 8080, - "scheme": "HTTP", - }, - "periodSeconds": 10, - }, - "name": "jaeger-all-in-one-inmemory", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - "dnsPolicy": "ClusterFirst", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "jaeger-all-in-one-inmemory-ui-proxy", - "serviceAccountName": "jaeger-all-in-one-inmemory-ui-proxy", - "terminationGracePeriodSeconds": 30, - "volumes": [], - }, - }, - }, - "status": { - "availableReplicas": 1, - "conditions": [], - "observedGeneration": 1, - "readyReplicas": 1, - "replicas": 1, - "updatedReplicas": 1, - }, - }, - "resources": { - "hpas": undefined, - "isMonitorable": true, - "isOperatorBackedService": false, - "monitoringAlerts": [], - "obj": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": "2019-12-15T17:31:52Z", - "generation": 1, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - "name": "jaeger-all-in-one-inmemory", - "namespace": "myproj", - "ownerReferences": [ - { - "apiVersion": "jaegertracing.io/v1", - "controller": true, - "kind": "Jaeger", - "name": "jaeger-all-in-one-inmemory", - "uid": "3006a8f3-6e2b-4a19-b37e-fbddd9a41f51", - }, - ], - "resourceVersion": "120365", - "uid": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 1, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "annotations": { - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": null, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "livenessProbe": { - "failureThreshold": 1, - "httpGet": { - "path": "/healthz", - "port": 8080, - "scheme": "HTTP", - }, - "periodSeconds": 10, - }, - "name": "jaeger-all-in-one-inmemory", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - "dnsPolicy": "ClusterFirst", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "jaeger-all-in-one-inmemory-ui-proxy", - "serviceAccountName": "jaeger-all-in-one-inmemory-ui-proxy", - "terminationGracePeriodSeconds": 30, - "volumes": [], - }, - }, - }, - "status": { - "availableReplicas": 1, - "conditions": [], - "observedGeneration": 1, - "readyReplicas": 1, - "replicas": 1, - "updatedReplicas": 1, - }, - }, - }, - "type": "workload", - }, - "group": false, - "height": 104, - "id": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - "label": "jaeger-all-in-one-inmemory", - "resource": { - "apiVersion": "apps/v1", - "kind": "Deployment", - "metadata": { - "annotations": { - "deployment.kubernetes.io/revision": "1", - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": "2019-12-15T17:31:52Z", - "generation": 1, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - "name": "jaeger-all-in-one-inmemory", - "namespace": "myproj", - "ownerReferences": [ - { - "apiVersion": "jaegertracing.io/v1", - "controller": true, - "kind": "Jaeger", - "name": "jaeger-all-in-one-inmemory", - "uid": "3006a8f3-6e2b-4a19-b37e-fbddd9a41f51", - }, - ], - "resourceVersion": "120365", - "uid": "c73277f2-e85c-477c-a43d-330a5d0b2cf6", - }, - "spec": { - "progressDeadlineSeconds": 600, - "replicas": 1, - "revisionHistoryLimit": 10, - "selector": { - "matchLabels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "strategy": { - "rollingUpdate": { - "maxSurge": "25%", - "maxUnavailable": "25%", - }, - "type": "RollingUpdate", - }, - "template": { - "metadata": { - "annotations": { - "prometheus.io/port": "14269", - "prometheus.io/scrape": "true", - "sidecar.istio.io/inject": "false", - }, - "creationTimestamp": null, - "labels": { - "app": "jaeger", - "app.kubernetes.io/component": "all-in-one", - "app.kubernetes.io/instance": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/managed-by": "jaeger-operator", - "app.kubernetes.io/name": "jaeger-all-in-one-inmemory", - "app.kubernetes.io/part-of": "jaeger", - }, - }, - "spec": { - "containers": [ - { - "image": "image-registry.openshift-image-registry.svc:5000/viraj/calculator-react@sha256:84d947d3bb6ae52090c86b5ec7e172dcef2c28a78eedb11a7ff588a3d336d8e0", - "imagePullPolicy": "Always", - "livenessProbe": { - "failureThreshold": 1, - "httpGet": { - "path": "/healthz", - "port": 8080, - "scheme": "HTTP", - }, - "periodSeconds": 10, - }, - "name": "jaeger-all-in-one-inmemory", - "ports": [ - { - "containerPort": 8080, - "protocol": "TCP", - }, - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - }, - ], - "dnsPolicy": "ClusterFirst", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "jaeger-all-in-one-inmemory-ui-proxy", - "serviceAccountName": "jaeger-all-in-one-inmemory-ui-proxy", - "terminationGracePeriodSeconds": 30, - "volumes": [], - }, - }, - }, - "status": { - "availableReplicas": 1, - "conditions": [], - "observedGeneration": 1, - "readyReplicas": 1, - "replicas": 1, - "updatedReplicas": 1, - }, - }, - "resourceKind": "apps~v1~Deployment", - "shape": undefined, - "style": { - "padding": [ - 0, - 20, - ], - }, - "type": "workload", - "visible": true, - "width": 104, - }, - ], - }, - "group": true, - "height": 180, - "id": "group:jaeger", - "label": "jaeger", - "style": { - "padding": [ - 40, - 40, - 60, - 40, - ], - }, - "type": "part-of", - "visible": true, - "width": 300, - }, - ], -} -`; diff --git a/frontend/packages/topology/src/data-transforms/__tests__/data-transformer.spec.ts b/frontend/packages/topology/src/data-transforms/__tests__/data-transformer.spec.ts index 66f22f97d2a..6c0bc3da002 100644 --- a/frontend/packages/topology/src/data-transforms/__tests__/data-transformer.spec.ts +++ b/frontend/packages/topology/src/data-transforms/__tests__/data-transformer.spec.ts @@ -82,10 +82,26 @@ describe('data transformer ', () => { expect(graphData.nodes.filter((n) => n.group)).toHaveLength(0); }); - it('should match the previous snapshot', () => { - expect( - getTransformedTopologyData(mockResources, ['deployments', 'deploymentConfigs']), - ).toMatchSnapshot(); + it('should return graph for deployments and deploymentConfigs with stable edges and nodes', () => { + const deploymentCount = mockResources.deployments.data.length; + const deploymentConfigCount = mockResources.deploymentConfigs.data.length; + const graphData = getTransformedTopologyData(mockResources, [ + 'deployments', + 'deploymentConfigs', + ]); + const workloadNodes = graphData.nodes.filter((n) => !n.group); + const groupNodes = graphData.nodes.filter((n) => n.group); + expect(workloadNodes).toHaveLength(deploymentCount + deploymentConfigCount); + expect(groupNodes.length).toBeGreaterThan(0); + expect(graphData.edges).toStrictEqual([ + { + id: '5ca9ae28-680d-11e9-8c69-5254003f9382_60a9b423-680d-11e9-8c69-5254003f9382', + label: 'Visual connector', + source: '5ca9ae28-680d-11e9-8c69-5254003f9382', + target: '60a9b423-680d-11e9-8c69-5254003f9382', + type: 'connects-to', + }, + ]); }); it('should return false for non knative resource', () => {