diff --git a/LICENSE b/LICENSE index a399a8372e..841736290b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 Lakend Labs, Inc. +Copyright (c) 2020 Mirantis, Inc. All rights reserved. diff --git a/locales/en/messages.po b/locales/en/messages.po index 30d81b3b08..b713158bfb 100644 --- a/locales/en/messages.po +++ b/locales/en/messages.po @@ -822,7 +822,7 @@ msgid "Driver" msgstr "Driver" #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:59 -#: src/renderer/components/+network-ingresses/ingress-details.tsx:67 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:87 msgid "Duration" msgstr "Duration" @@ -1048,6 +1048,7 @@ msgstr "Host: {0}" #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:33 #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:64 #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:76 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:64 msgid "Hostname" msgstr "Hostname" @@ -1055,6 +1056,10 @@ msgstr "Hostname" msgid "Http01" msgstr "Http01" +#: src/renderer/components/+network-ingresses/ingress-details.tsx:65 +msgid "IP" +msgstr "IP" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:53 msgid "IP addresses" msgstr "IP addresses" @@ -1235,8 +1240,10 @@ msgstr "Limited to {0}" #: src/renderer/components/+cluster/cluster-pie-charts.tsx:72 #: src/renderer/components/+cluster/cluster-pie-charts.tsx:115 + #: src/renderer/components/+workloads-pods/container-charts.tsx:40 #: src/renderer/components/+workloads-pods/container-charts.tsx:64 + #: src/renderer/components/+workloads-pods/pod-charts.tsx:48 #: src/renderer/components/+workloads-pods/pod-charts.tsx:72 msgid "Limits" @@ -1258,6 +1265,10 @@ msgstr "Liveness" msgid "Load Balancer IP" msgstr "Load Balancer IP" +#: src/renderer/components/+network-ingresses/ingress-details.tsx:108 +msgid "Load-Balancer Ingress Points" +msgstr "Load-Balancer Ingress Points" + #: src/renderer/components/app-init/app-init.tsx:43 msgid "Loading" msgstr "Loading" @@ -1756,7 +1767,7 @@ msgid "Port" msgstr "Port" #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:83 -#: src/renderer/components/+network-ingresses/ingress-details.tsx:74 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:94 #: src/renderer/components/+network-policies/network-policy-details.tsx:96 #: src/renderer/components/+network-policies/network-policy-details.tsx:109 #: src/renderer/components/+network-services/service-details.tsx:59 @@ -2080,7 +2091,7 @@ msgstr "Rollback <0>{releaseName}" msgid "Rule" msgstr "Rule" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:85 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:105 #: src/renderer/components/+network-ingresses/ingresses.tsx:34 #: src/renderer/components/+user-management-roles/role-details.tsx:25 msgid "Rules" @@ -2212,7 +2223,7 @@ msgstr "Selector" msgid "Server" msgstr "Server" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:82 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:102 msgid "Service" msgstr "Service" @@ -2379,7 +2390,7 @@ msgstr "Supplemental Groups" msgid "Suspend" msgstr "Suspend" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:78 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:98 msgid "TLS" msgstr "TLS" diff --git a/locales/fi/messages.po b/locales/fi/messages.po index 36a8a390a5..81bf95e3e5 100644 --- a/locales/fi/messages.po +++ b/locales/fi/messages.po @@ -318,6 +318,7 @@ msgstr "" #~ msgid "Build version" #~ msgstr "" + #: src/renderer/components/+workloads-pods/container-charts.tsx:75 #: src/renderer/components/+workloads-pods/pod-charts.tsx:100 msgid "Bytes consumed on this filesystem" @@ -818,7 +819,7 @@ msgid "Driver" msgstr "" #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:59 -#: src/renderer/components/+network-ingresses/ingress-details.tsx:67 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:87 msgid "Duration" msgstr "" @@ -1039,6 +1040,7 @@ msgstr "" #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:33 #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:64 #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:76 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:64 msgid "Hostname" msgstr "" @@ -1046,6 +1048,10 @@ msgstr "" msgid "Http01" msgstr "" +#: src/renderer/components/+network-ingresses/ingress-details.tsx:65 +msgid "IP" +msgstr "" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:53 msgid "IP addresses" msgstr "" @@ -1249,6 +1255,10 @@ msgstr "" msgid "Load Balancer IP" msgstr "" +#: src/renderer/components/+network-ingresses/ingress-details.tsx:108 +msgid "Load-Balancer Ingress Points" +msgstr "" + #: src/renderer/components/app-init/app-init.tsx:43 msgid "Loading" msgstr "" @@ -1739,7 +1749,7 @@ msgid "Port" msgstr "" #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:83 -#: src/renderer/components/+network-ingresses/ingress-details.tsx:74 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:94 #: src/renderer/components/+network-policies/network-policy-details.tsx:96 #: src/renderer/components/+network-policies/network-policy-details.tsx:109 #: src/renderer/components/+network-services/service-details.tsx:59 @@ -2063,7 +2073,7 @@ msgstr "" msgid "Rule" msgstr "" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:85 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:105 #: src/renderer/components/+network-ingresses/ingresses.tsx:34 #: src/renderer/components/+user-management-roles/role-details.tsx:25 msgid "Rules" @@ -2195,7 +2205,7 @@ msgstr "" msgid "Server" msgstr "" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:82 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:102 msgid "Service" msgstr "" @@ -2362,7 +2372,7 @@ msgstr "" msgid "Suspend" msgstr "" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:78 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:98 msgid "TLS" msgstr "" diff --git a/locales/ru/messages.po b/locales/ru/messages.po index 704970ed74..eecd9ca56d 100644 --- a/locales/ru/messages.po +++ b/locales/ru/messages.po @@ -823,7 +823,7 @@ msgid "Driver" msgstr "Драйвер" #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:59 -#: src/renderer/components/+network-ingresses/ingress-details.tsx:67 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:87 msgid "Duration" msgstr "Продолжительность" @@ -1049,6 +1049,7 @@ msgstr "Хост: {0}" #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:33 #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:64 #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:76 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:64 msgid "Hostname" msgstr "" @@ -1056,6 +1057,10 @@ msgstr "" msgid "Http01" msgstr "Http01" +#: src/renderer/components/+network-ingresses/ingress-details.tsx:65 +msgid "IP" +msgstr "" + #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:53 msgid "IP addresses" msgstr "IP-адреса" @@ -1259,6 +1264,10 @@ msgstr "Живучесть" msgid "Load Balancer IP" msgstr "IP балансировщика нагрузки" +#: src/renderer/components/+network-ingresses/ingress-details.tsx:108 +msgid "Load-Balancer Ingress Points" +msgstr "" + #: src/renderer/components/app-init/app-init.tsx:43 msgid "Loading" msgstr "Загрузка" @@ -1757,7 +1766,7 @@ msgid "Port" msgstr "" #: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:83 -#: src/renderer/components/+network-ingresses/ingress-details.tsx:74 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:94 #: src/renderer/components/+network-policies/network-policy-details.tsx:96 #: src/renderer/components/+network-policies/network-policy-details.tsx:109 #: src/renderer/components/+network-services/service-details.tsx:59 @@ -2081,7 +2090,7 @@ msgstr "Откатить <0>{releaseName}" msgid "Rule" msgstr "" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:85 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:105 #: src/renderer/components/+network-ingresses/ingresses.tsx:34 #: src/renderer/components/+user-management-roles/role-details.tsx:25 msgid "Rules" @@ -2213,7 +2222,7 @@ msgstr "Селектор" msgid "Server" msgstr "Сервер" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:82 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:102 msgid "Service" msgstr "Service" @@ -2380,7 +2389,7 @@ msgstr "" msgid "Suspend" msgstr "Заморозка" -#: src/renderer/components/+network-ingresses/ingress-details.tsx:78 +#: src/renderer/components/+network-ingresses/ingress-details.tsx:98 msgid "TLS" msgstr "TLS" diff --git a/package.json b/package.json index e583925b68..27292e0375 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,11 @@ "version": "3.6.0-dev", "main": "static/build/main.js", "copyright": "© 2020, Lakend Labs, Inc.", + "copyright": "© 2020, Mirantis, Inc.", "license": "MIT", "author": { - "name": "Lakend Labs, Inc.", - "email": "info@lakendlabs.com" + "name": "Mirantis, Inc.", + "email": "info@k8slens.dev" }, "scripts": { "dev": "concurrently -k \"yarn dev-run -C\" \"yarn dev:main\" \"yarn dev:renderer\"", diff --git a/src/common/tracker.ts b/src/common/tracker.ts index bc9a8e191b..f2fcb9c1c9 100644 --- a/src/common/tracker.ts +++ b/src/common/tracker.ts @@ -22,7 +22,7 @@ export class Tracker extends Singleton { } catch (error) { this.visitor = ua(Tracker.GA_ID) } - this.visitor.set("dl", "https://lensapptelemetry.lakendlabs.com") + this.visitor.set("dl", "https://telemetry.k8slens.dev") } protected async isTelemetryAllowed(): Promise { diff --git a/src/main/menu.ts b/src/main/menu.ts index 202f61475e..1ae32994d0 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -42,7 +42,7 @@ export function buildMenu(windowManager: WindowManager) { `${appName}: ${app.getVersion()}`, `Electron: ${process.versions.electron}`, `Chrome: ${process.versions.chrome}`, - `Copyright 2020 Lakend Labs, Inc.`, + `Copyright 2020 Copyright 2020 Mirantis, Inc.`, ] dialog.showMessageBoxSync(browserWindow, { title: `${isWindows ? " ".repeat(2) : ""}${appName}`, @@ -178,7 +178,7 @@ export function buildMenu(windowManager: WindowManager) { { label: "License", click: async () => { - shell.openExternal('https://lakendlabs.com/licenses/lens-eula.md'); + shell.openExternal('https://k8slens.dev/licenses/eula.md'); }, }, { diff --git a/src/renderer/api/endpoints/crd.api.ts b/src/renderer/api/endpoints/crd.api.ts index 39a4e50f8c..829719a3cb 100644 --- a/src/renderer/api/endpoints/crd.api.ts +++ b/src/renderer/api/endpoints/crd.api.ts @@ -130,9 +130,16 @@ export class CustomResourceDefinition extends KubeObject { } } -export const crdApi = new KubeApi({ +export const crdBetaApi = new KubeApi({ kind: CustomResourceDefinition.kind, apiBase: "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions", isNamespaced: false, objectConstructor: CustomResourceDefinition, }); + +export const crdApi = new KubeApi({ + kind: CustomResourceDefinition.kind, + apiBase: "/apis/apiextensions.k8s.io/v1/customresourcedefinitions", + isNamespaced: false, + objectConstructor: CustomResourceDefinition, +}); diff --git a/src/renderer/api/endpoints/endpoint.api.ts b/src/renderer/api/endpoints/endpoint.api.ts index 6f0c400969..80a0e1679f 100644 --- a/src/renderer/api/endpoints/endpoint.api.ts +++ b/src/renderer/api/endpoints/endpoint.api.ts @@ -98,7 +98,7 @@ export class EndpointSubset implements IEndpointSubset { @autobind() export class Endpoint extends KubeObject { - static kind = "Endpoint" + static kind = "Endpoints" subsets: IEndpointSubset[] diff --git a/src/renderer/api/endpoints/ingress.api.ts b/src/renderer/api/endpoints/ingress.api.ts index dc277af04b..f361c24fd7 100644 --- a/src/renderer/api/endpoints/ingress.api.ts +++ b/src/renderer/api/endpoints/ingress.api.ts @@ -25,6 +25,10 @@ export interface IIngressMetrics { responseDurationSeconds: T; } +export interface ILoadBalancerIngress { + hostname?: string; + ip?: string; +} @autobind() export class Ingress extends KubeObject { static kind = "Ingress" @@ -52,7 +56,7 @@ export class Ingress extends KubeObject { } status: { loadBalancer: { - ingress: any[]; + ingress: ILoadBalancerIngress[]; }; } diff --git a/src/renderer/components/+custom-resources/crd.store.ts b/src/renderer/components/+custom-resources/crd.store.ts index fbcd2a4ee6..fadb1222e2 100644 --- a/src/renderer/components/+custom-resources/crd.store.ts +++ b/src/renderer/components/+custom-resources/crd.store.ts @@ -7,6 +7,17 @@ import { KubeApi } from "../../api/kube-api"; import { CRDResourceStore } from "./crd-resource.store"; import { KubeObject } from "../../api/kube-object"; +function initStore(crd: CustomResourceDefinition) { + const apiBase = crd.getResourceApiBase(); + const kind = crd.getResourceKind(); + const isNamespaced = crd.isNamespaced(); + const api = apiManager.getApi(apiBase) || new KubeApi({ apiBase, kind, isNamespaced }); + + if (!apiManager.getStore(api)) { + apiManager.registerStore(api, new CRDResourceStore(api)); + } +} + @autobind() export class CRDStore extends KubeObjectStore { api = crdApi @@ -15,9 +26,7 @@ export class CRDStore extends KubeObjectStore { super(); // auto-init stores for crd-s - reaction(() => this.items.toJS(), items => { - items.forEach(this.initStore); - }) + reaction(() => this.items.toJS(), items => items.forEach(initStore)) } protected sortItems(items: CustomResourceDefinition[]) { @@ -27,23 +36,6 @@ export class CRDStore extends KubeObjectStore { ]) } - protected initStore(crd: CustomResourceDefinition) { - const apiBase = crd.getResourceApiBase(); - let api = apiManager.getApi(apiBase); - if (!api) { - api = new KubeApi({ - apiBase: apiBase, - kind: crd.getResourceKind(), - isNamespaced: crd.isNamespaced(), - }); - } - let store = apiManager.getStore(api); - if (!store) { - store = new CRDResourceStore(api); - apiManager.registerStore(api, store); - } - } - @computed get groups() { const groups: Record = {}; return this.items.reduce((groups, crd) => { @@ -63,9 +55,10 @@ export class CRDStore extends KubeObjectStore { getByObject(obj: KubeObject) { if (!obj) return null const { kind, apiVersion } = obj; - return this.items.find(crd => { - return kind === crd.getResourceKind() && apiVersion === `${crd.getGroup()}/${crd.getVersion()}` - }) + + return this.items.find(crd => ( + kind === crd.getResourceKind() && apiVersion === `${crd.getGroup()}/${crd.getVersion()}` + )) } } diff --git a/src/renderer/components/+network-ingresses/ingress-details.tsx b/src/renderer/components/+network-ingresses/ingress-details.tsx index 2477ac0a3f..b7fd0d01d0 100644 --- a/src/renderer/components/+network-ingresses/ingress-details.tsx +++ b/src/renderer/components/+network-ingresses/ingress-details.tsx @@ -5,7 +5,7 @@ import { disposeOnUnmount, observer } from "mobx-react"; import { reaction } from "mobx"; import { Trans } from "@lingui/macro"; import { DrawerItem, DrawerTitle } from "../drawer"; -import { Ingress, ingressApi } from "../../api/endpoints"; +import { Ingress, ILoadBalancerIngress, ingressApi } from "../../api/endpoints"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { KubeEventDetails } from "../+events/kube-event-details"; import { ingressStore } from "./ingress.store"; @@ -66,12 +66,35 @@ export class IngressDetails extends React.Component { }) } + renderIngressPoints(ingressPoints: ILoadBalancerIngress[]) { + if (ingressPoints.length === 0) return null + return ( +
+ + + Hostname + IP + + {ingressPoints.map(({hostname, ip}, index) => { + return ( + + {hostname ? hostname : "-"} + {ip ? ip : "-"} + + )}) + }) +
+
+ ) + } + render() { const { object: ingress } = this.props; if (!ingress) { return null; } - const { spec } = ingress; + const { spec, status } = ingress; + const ingressPoints = status?.loadBalancer?.ingress const { metrics } = ingressStore; const metricTabs = [ Network, @@ -102,6 +125,9 @@ export class IngressDetails extends React.Component { Rules}/> {this.renderPaths(ingress)} + Load-Balancer Ingress Points}/> + {this.renderIngressPoints(ingressPoints)} + ) diff --git a/src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx b/src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx index bc1957961b..2839c99dc2 100644 --- a/src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx +++ b/src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx @@ -64,6 +64,7 @@ export class RoleBindingDetails extends React.Component { } const name = roleBinding.getName(); const { roleRef } = roleBinding; + const subjects = roleBinding.getSubjects(); return (
@@ -83,31 +84,33 @@ export class RoleBindingDetails extends React.Component { Bindings}/> - - - - Binding - Type - Namespace - - { - roleBinding.getSubjects().map((subject, i) => { - const { kind, name, namespace } = subject; - const isSelected = selectedSubjects.includes(subject); - return ( - this.selectSubject(subject))} - > - - {name} - {kind} - {namespace || "-"} - - ) - }) - } -
+ {subjects.length > 0 && ( + + + + Binding + Type + Namespace + + { + subjects.map((subject, i) => { + const { kind, name, namespace } = subject; + const isSelected = selectedSubjects.includes(subject); + return ( + this.selectSubject(subject))} + > + + {name} + {kind} + {namespace || "-"} + + ) + }) + } +
+ )} diff --git a/src/renderer/themes/kontena-dark.json b/src/renderer/themes/kontena-dark.json index 1ce86b11e6..02443e5088 100644 --- a/src/renderer/themes/kontena-dark.json +++ b/src/renderer/themes/kontena-dark.json @@ -2,7 +2,7 @@ "name": "Dark (Lens)", "type": "dark", "description": "Original Lens dark theme", - "author": "Lakend Labs", + "author": "Mirantis", "colors": { "blue": "#3d90ce", "magenta": "#c93dce", @@ -103,4 +103,4 @@ "radioActiveBackground": "#36393e", "menuActiveBackground": "#36393e" } -} \ No newline at end of file +} diff --git a/src/renderer/themes/kontena-light.json b/src/renderer/themes/kontena-light.json index a0b818f03b..da34c67995 100644 --- a/src/renderer/themes/kontena-light.json +++ b/src/renderer/themes/kontena-light.json @@ -2,7 +2,7 @@ "name": "Light (Lens)", "type": "light", "description": "Original Lens light theme", - "author": "Lakend Labs", + "author": "Mirantis", "colors": { "blue": "#3d90ce", "magenta": "#c93dce", @@ -104,4 +104,4 @@ "radioActiveBackground": "#f1f1f1", "menuActiveBackground": "#e8e8e8" } -} \ No newline at end of file +} diff --git a/webpack.renderer.ts b/webpack.renderer.ts index bda40a47c8..b6c35535ce 100755 --- a/webpack.renderer.ts +++ b/webpack.renderer.ts @@ -39,7 +39,7 @@ export default function (): webpack.Configuration { extractComments: { condition: "some", banner: [ - `Lens - The Kubernetes IDE. Copyright ${new Date().getFullYear()} by Lakend Labs, Inc. All rights reserved.` + `Lens - The Kubernetes IDE. Copyright ${new Date().getFullYear()} by Mirantis, Inc. All rights reserved.` ].join("\n") } })