mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix NetworkPolicy engresses not having node/pod selectors displayed (#4467)
This commit is contained in:
1 parent
cd2f5094dc
commit
4257fce2f0
12 files changed
+274
-158
No files matched your search
@@ -27,6 +27,7 @@ import { metricsApi } from "./metrics.api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
import type { IPodContainer, IPodMetrics } from "./pods.api";
|
||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||
import type { LabelSelector } from "../kube-object";
|
||||
|
||||
export class DaemonSet extends WorkloadKubeObject {
|
||||
static kind = "DaemonSet";
|
||||
@@ -39,11 +40,7 @@ export class DaemonSet extends WorkloadKubeObject {
|
||||
}
|
||||
|
||||
declare spec: {
|
||||
selector: {
|
||||
matchLabels: {
|
||||
[name: string]: string;
|
||||
};
|
||||
};
|
||||
selector: LabelSelector;
|
||||
template: {
|
||||
metadata: {
|
||||
creationTimestamp?: string;
|
||||
|
||||
@@ -28,6 +28,7 @@ import { metricsApi } from "./metrics.api";
|
||||
import type { IPodMetrics } from "./pods.api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||
import type { LabelSelector } from "../kube-object";
|
||||
|
||||
export class DeploymentApi extends KubeApi<Deployment> {
|
||||
protected getScaleApiUrl(params: { namespace: string; name: string }) {
|
||||
@@ -124,7 +125,7 @@ export class Deployment extends WorkloadKubeObject {
|
||||
|
||||
declare spec: {
|
||||
replicas: number;
|
||||
selector: { matchLabels: { [app: string]: string }};
|
||||
selector: LabelSelector;
|
||||
template: {
|
||||
metadata: {
|
||||
creationTimestamp?: string;
|
||||
|
||||
@@ -27,6 +27,7 @@ import { metricsApi } from "./metrics.api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
import type { IPodContainer, IPodMetrics } from "./pods.api";
|
||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||
import type { LabelSelector } from "../kube-object";
|
||||
|
||||
export class Job extends WorkloadKubeObject {
|
||||
static kind = "Job";
|
||||
@@ -42,11 +43,7 @@ export class Job extends WorkloadKubeObject {
|
||||
parallelism?: number;
|
||||
completions?: number;
|
||||
backoffLimit?: number;
|
||||
selector?: {
|
||||
matchLabels: {
|
||||
[name: string]: string;
|
||||
};
|
||||
};
|
||||
selector?: LabelSelector;
|
||||
template: {
|
||||
metadata: {
|
||||
creationTimestamp?: string;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import { KubeObject } from "../kube-object";
|
||||
import { KubeObject, LabelSelector } from "../kube-object";
|
||||
import { autoBind } from "../../utils";
|
||||
import { KubeApi } from "../kube-api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
@@ -30,46 +30,94 @@ export interface IPolicyIpBlock {
|
||||
except?: string[];
|
||||
}
|
||||
|
||||
export interface IPolicySelector {
|
||||
matchLabels: {
|
||||
[label: string]: string;
|
||||
};
|
||||
/**
|
||||
* @deprecated Use `LabelSelector` instead
|
||||
*/
|
||||
export type IPolicySelector = LabelSelector;
|
||||
|
||||
export interface NetworkPolicyPort {
|
||||
/**
|
||||
* The protocol which network traffic must match.
|
||||
*
|
||||
* One of:
|
||||
* - `"TCP"`
|
||||
* - `"UDP"`
|
||||
* - `"SCTP"`
|
||||
*
|
||||
* @default "TCP"
|
||||
*/
|
||||
protocol?: string;
|
||||
|
||||
/**
|
||||
* The port on the given protocol. This can either be a numerical or named
|
||||
* port on a pod. If this field is not provided, this matches all port names and
|
||||
* numbers.
|
||||
*
|
||||
* If present, only traffic on the specified protocol AND port will be matched.
|
||||
*/
|
||||
port?: number | string;
|
||||
|
||||
/**
|
||||
* If set, indicates that the range of ports from port to endPort, inclusive,
|
||||
* should be allowed by the policy. This field cannot be defined if the port field
|
||||
* is not defined or if the port field is defined as a named (string) port.
|
||||
*
|
||||
* The endPort must be equal or greater than port.
|
||||
*/
|
||||
endPort?: number;
|
||||
}
|
||||
|
||||
export interface NetworkPolicyPeer {
|
||||
/**
|
||||
* IPBlock defines policy on a particular IPBlock. If this field is set then
|
||||
* neither of the other fields can be.
|
||||
*/
|
||||
ipBlock?: IPolicyIpBlock;
|
||||
|
||||
/**
|
||||
* Selects Namespaces using cluster-scoped labels. This field follows standard label
|
||||
* selector semantics; if present but empty, it selects all namespaces.
|
||||
*
|
||||
* If PodSelector is also set, then the NetworkPolicyPeer as a whole selects
|
||||
* the Pods matching PodSelector in the Namespaces selected by NamespaceSelector.
|
||||
*
|
||||
* Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.
|
||||
*/
|
||||
namespaceSelector?: LabelSelector;
|
||||
|
||||
/**
|
||||
* This is a label selector which selects Pods. This field follows standard label
|
||||
* selector semantics; if present but empty, it selects all pods.
|
||||
*
|
||||
* If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects
|
||||
* the Pods matching PodSelector in the Namespaces selected by NamespaceSelector.
|
||||
*
|
||||
* Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.
|
||||
*/
|
||||
podSelector?: LabelSelector;
|
||||
}
|
||||
|
||||
export interface IPolicyIngress {
|
||||
from: {
|
||||
ipBlock?: IPolicyIpBlock;
|
||||
namespaceSelector?: IPolicySelector;
|
||||
podSelector?: IPolicySelector;
|
||||
}[];
|
||||
ports: {
|
||||
protocol: string;
|
||||
port: number;
|
||||
}[];
|
||||
from?: NetworkPolicyPeer[];
|
||||
ports?: NetworkPolicyPort[];
|
||||
}
|
||||
|
||||
export interface IPolicyEgress {
|
||||
to: {
|
||||
ipBlock: IPolicyIpBlock;
|
||||
}[];
|
||||
ports: {
|
||||
protocol: string;
|
||||
port: number;
|
||||
}[];
|
||||
to?: NetworkPolicyPeer[];
|
||||
ports?: NetworkPolicyPort[];
|
||||
}
|
||||
|
||||
export type PolicyType = "Ingress" | "Egress";
|
||||
|
||||
export interface NetworkPolicySpec {
|
||||
podSelector: LabelSelector;
|
||||
policyTypes?: PolicyType[];
|
||||
ingress?: IPolicyIngress[];
|
||||
egress?: IPolicyEgress[];
|
||||
}
|
||||
|
||||
export interface NetworkPolicy {
|
||||
spec: {
|
||||
podSelector: {
|
||||
matchLabels: {
|
||||
[label: string]: string;
|
||||
role: string;
|
||||
};
|
||||
};
|
||||
policyTypes: string[];
|
||||
ingress: IPolicyIngress[];
|
||||
egress: IPolicyEgress[];
|
||||
};
|
||||
spec: NetworkPolicySpec;
|
||||
}
|
||||
|
||||
export class NetworkPolicy extends KubeObject {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import { KubeObject } from "../kube-object";
|
||||
import { KubeObject, LabelSelector } from "../kube-object";
|
||||
import { autoBind } from "../../utils";
|
||||
import { IMetrics, metricsApi } from "./metrics.api";
|
||||
import type { Pod } from "./pods.api";
|
||||
@@ -51,16 +51,7 @@ export interface PersistentVolumeClaim {
|
||||
spec: {
|
||||
accessModes: string[];
|
||||
storageClassName: string;
|
||||
selector: {
|
||||
matchLabels: {
|
||||
release: string;
|
||||
};
|
||||
matchExpressions: {
|
||||
key: string; // environment,
|
||||
operator: string; // In,
|
||||
values: string[]; // [dev]
|
||||
}[];
|
||||
};
|
||||
selector: LabelSelector;
|
||||
resources: {
|
||||
requests: {
|
||||
storage: string; // 8Gi
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
import { autoBind } from "../../utils";
|
||||
import { KubeObject } from "../kube-object";
|
||||
import { KubeObject, LabelSelector } from "../kube-object";
|
||||
import { KubeApi } from "../kube-api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||
@@ -29,7 +29,7 @@ export interface PodDisruptionBudget {
|
||||
spec: {
|
||||
minAvailable: string;
|
||||
maxUnavailable: string;
|
||||
selector: { matchLabels: { [app: string]: string }};
|
||||
selector: LabelSelector;
|
||||
};
|
||||
status: {
|
||||
currentHealthy: number
|
||||
|
||||
@@ -27,6 +27,7 @@ import { metricsApi } from "./metrics.api";
|
||||
import type { IPodContainer, IPodMetrics, Pod } from "./pods.api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||
import type { LabelSelector } from "../kube-object";
|
||||
|
||||
export class ReplicaSetApi extends KubeApi<ReplicaSet> {
|
||||
protected getScaleApiUrl(params: { namespace: string; name: string }) {
|
||||
@@ -80,7 +81,7 @@ export class ReplicaSet extends WorkloadKubeObject {
|
||||
|
||||
declare spec: {
|
||||
replicas?: number;
|
||||
selector: { matchLabels: { [app: string]: string }};
|
||||
selector: LabelSelector;
|
||||
template?: {
|
||||
metadata: {
|
||||
labels: {
|
||||
|
||||
@@ -26,6 +26,7 @@ import { metricsApi } from "./metrics.api";
|
||||
import type { IPodMetrics } from "./pods.api";
|
||||
import type { KubeJsonApiData } from "../kube-json-api";
|
||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||
import type { LabelSelector } from "../kube-object";
|
||||
|
||||
export class StatefulSetApi extends KubeApi<StatefulSet> {
|
||||
protected getScaleApiUrl(params: { namespace: string; name: string }) {
|
||||
@@ -84,11 +85,7 @@ export class StatefulSet extends WorkloadKubeObject {
|
||||
declare spec: {
|
||||
serviceName: string;
|
||||
replicas: number;
|
||||
selector: {
|
||||
matchLabels: {
|
||||
[key: string]: string;
|
||||
};
|
||||
};
|
||||
selector: LabelSelector;
|
||||
template: {
|
||||
metadata: {
|
||||
labels: {
|
||||
|
||||
@@ -104,6 +104,34 @@ export class KubeCreationError extends Error {
|
||||
}
|
||||
}
|
||||
|
||||
export type LabelMatchExpression = {
|
||||
/**
|
||||
* The label key that the selector applies to.
|
||||
*/
|
||||
key: string;
|
||||
} & (
|
||||
{
|
||||
/**
|
||||
* This represents the key's relationship to a set of values.
|
||||
*/
|
||||
operator: "Exists" | "DoesNotExist";
|
||||
values?: undefined;
|
||||
}
|
||||
|
|
||||
{
|
||||
operator: "In" | "NotIn";
|
||||
/**
|
||||
* The set of values for to match according to the operator for the label.
|
||||
*/
|
||||
values: string[];
|
||||
}
|
||||
);
|
||||
|
||||
export interface LabelSelector {
|
||||
matchLabels?: Record<string, string | undefined>;
|
||||
matchExpressions?: LabelMatchExpression[];
|
||||
}
|
||||
|
||||
export class KubeObject<Metadata extends KubeObjectMetadata = KubeObjectMetadata, Status = any, Spec = any> implements ItemObject {
|
||||
static readonly kind?: string;
|
||||
static readonly namespaced?: boolean;
|
||||
|
||||
Reference in new issue
Block a user