From 2c57dcce71422a143fb9332782292e2b4468fdf0 Mon Sep 17 00:00:00 2001 From: deviantony Date: Sun, 10 Nov 2024 02:34:40 +0000 Subject: [PATCH 1/2] pod: add support for -o wide when listing pods --- internal/adapter/adapter.go | 9 +++++++++ internal/adapter/container_utils.go | 3 +++ internal/adapter/converter/pod.go | 13 ++++++++++++- internal/adapter/pod_utils.go | 2 +- internal/k8s/table.go | 2 +- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/internal/adapter/adapter.go b/internal/adapter/adapter.go index b731d86..636498f 100644 --- a/internal/adapter/adapter.go +++ b/internal/adapter/adapter.go @@ -48,6 +48,8 @@ type ( // // - Namespace deletion delay: Contains the delay that k2d waits after a namespace is deleted. // + // - Node name: Contains the name of the node that the adapter is running on. + // // This struct is a comprehensive utility for managing the interactions between Docker and Kubernetes. KubeDockerAdapter struct { cli *client.Client @@ -59,6 +61,7 @@ type ( namespaceDeletionDelay time.Duration registrySecretStore store.SecretStore startTime time.Time + nodeName string secretStore store.SecretStore } @@ -107,6 +110,11 @@ func NewKubeDockerAdapter(options *KubeDockerAdapterOptions) (*KubeDockerAdapter return nil, fmt.Errorf("unable to initialize registry secret store: %w", err) } + info, err := cli.Info(context.Background()) + if err != nil { + return nil, fmt.Errorf("unable to get docker info: %w", err) + } + return &KubeDockerAdapter{ cli: cli, converter: converter.NewDockerAPIConverter(configMapStore, secretStore, options.ServerConfiguration), @@ -118,6 +126,7 @@ func NewKubeDockerAdapter(options *KubeDockerAdapterOptions) (*KubeDockerAdapter registrySecretStore: registrySecretStore, secretStore: secretStore, startTime: time.Now(), + nodeName: info.Name, }, nil } diff --git a/internal/adapter/container_utils.go b/internal/adapter/container_utils.go index 3634d4c..b4e5b15 100644 --- a/internal/adapter/container_utils.go +++ b/internal/adapter/container_utils.go @@ -237,10 +237,13 @@ func (adapter *KubeDockerAdapter) createContainerFromPodSpec(ctx context.Context return fmt.Errorf("unable to convert versioned pod spec to internal pod spec: %w", err) } + internalPodSpec.NodeName = adapter.nodeName + internalPodSpecData, err := json.Marshal(internalPodSpec) if err != nil { return fmt.Errorf("unable to marshal internal pod spec: %w", err) } + options.labels[k2dtypes.PodLastAppliedConfigLabelKey] = string(internalPodSpecData) options.labels[k2dtypes.NamespaceNameLabelKey] = options.namespace options.labels[k2dtypes.WorkloadNameLabelKey] = options.containerName diff --git a/internal/adapter/converter/pod.go b/internal/adapter/converter/pod.go index f7977e2..715f610 100644 --- a/internal/adapter/converter/pod.go +++ b/internal/adapter/converter/pod.go @@ -33,7 +33,7 @@ import ( // // Returns: // - A Kubernetes Pod object derived from the Docker container. -func (converter *DockerAPIConverter) ConvertContainerToPod(container types.Container) core.Pod { +func (converter *DockerAPIConverter) ConvertContainerToPod(container types.Container, nodeName string) core.Pod { containerName := container.Labels[k2dtypes.WorkloadNameLabelKey] containerState := container.State @@ -51,6 +51,7 @@ func (converter *DockerAPIConverter) ConvertContainerToPod(container types.Conta }, }, Spec: core.PodSpec{ + NodeName: nodeName, Containers: []core.Container{ { Name: containerName, @@ -69,6 +70,16 @@ func (converter *DockerAPIConverter) ConvertContainerToPod(container types.Conta }, } + if container.NetworkSettings != nil && container.NetworkSettings.Networks != nil { + if networkSettings, ok := container.NetworkSettings.Networks[container.Labels[k2dtypes.NetworkNameLabelKey]]; ok { + pod.Status.PodIPs = []core.PodIP{ + { + IP: networkSettings.IPAddress, + }, + } + } + } + if containerState == "running" { ready := true diff --git a/internal/adapter/pod_utils.go b/internal/adapter/pod_utils.go index e4a574c..7996624 100644 --- a/internal/adapter/pod_utils.go +++ b/internal/adapter/pod_utils.go @@ -28,7 +28,7 @@ import ( // - core.Pod: The converted Pod object. // - error: An error object if any error occurs during the conversion. func (adapter *KubeDockerAdapter) buildPodFromContainer(container types.Container) (core.Pod, error) { - pod := adapter.converter.ConvertContainerToPod(container) + pod := adapter.converter.ConvertContainerToPod(container, adapter.nodeName) if container.Labels[k2dtypes.PodLastAppliedConfigLabelKey] != "" { internalPodSpecData := container.Labels[k2dtypes.PodLastAppliedConfigLabelKey] diff --git a/internal/k8s/table.go b/internal/k8s/table.go index e4b6bdd..43c8184 100644 --- a/internal/k8s/table.go +++ b/internal/k8s/table.go @@ -46,7 +46,7 @@ func GenerateTable(obj runtime.Object) (*metav1.Table, error) { tableGenerator := printers.NewTableGenerator() printersinternal.AddHandlers(tableGenerator) - options := printers.GenerateOptions{} + options := printers.GenerateOptions{Wide: true} table, err := tableGenerator.GenerateTable(obj, options) if err != nil { return nil, err From f601e8f3ebb81140d639f4d92030da670375c026 Mon Sep 17 00:00:00 2001 From: deviantony Date: Sun, 10 Nov 2024 02:56:34 +0000 Subject: [PATCH 2/2] node: add support for -o wide when listing nodes --- internal/adapter/converter/node.go | 13 ++++++++++++- internal/adapter/node.go | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/internal/adapter/converter/node.go b/internal/adapter/converter/node.go index cfa81c3..2d25522 100644 --- a/internal/adapter/converter/node.go +++ b/internal/adapter/converter/node.go @@ -12,7 +12,7 @@ import ( "k8s.io/kubernetes/pkg/apis/core" ) -func (converter *DockerAPIConverter) ConvertInfoVersionToNode(info system.Info, version types.Version, startTime time.Time) core.Node { +func (converter *DockerAPIConverter) ConvertInfoVersionToNode(info system.Info, version types.Version, startTime time.Time, serverIpAddr string) core.Node { return core.Node{ TypeMeta: metav1.TypeMeta{ Kind: "Node", @@ -37,6 +37,16 @@ func (converter *DockerAPIConverter) ConvertInfoVersionToNode(info system.Info, ProviderID: "k2d", }, Status: core.NodeStatus{ + Addresses: []core.NodeAddress{ + { + Type: core.NodeInternalIP, + Address: serverIpAddr, + }, + { + Type: core.NodeExternalIP, + Address: serverIpAddr, + }, + }, Conditions: []core.NodeCondition{ { Type: "Ready", @@ -55,6 +65,7 @@ func (converter *DockerAPIConverter) ConvertInfoVersionToNode(info system.Info, MachineID: info.ID, OperatingSystem: info.OSType, SystemUUID: info.ID, + OSImage: info.OperatingSystem, }, Capacity: core.ResourceList{ core.ResourceCPU: *resource.NewQuantity(int64(info.NCPU), resource.DecimalSI), diff --git a/internal/adapter/node.go b/internal/adapter/node.go index ce60882..d9d308c 100644 --- a/internal/adapter/node.go +++ b/internal/adapter/node.go @@ -77,7 +77,7 @@ func (adapter *KubeDockerAdapter) getNode(ctx context.Context, nodeName string) return nil, fmt.Errorf("unable to retrieve docker server version: %w", err) } - node := adapter.converter.ConvertInfoVersionToNode(info, version, adapter.startTime) + node := adapter.converter.ConvertInfoVersionToNode(info, version, adapter.startTime, adapter.k2dServerConfiguration.ServerIpAddr) return &node, nil } @@ -98,7 +98,7 @@ func (adapter *KubeDockerAdapter) listNodes(ctx context.Context) (core.NodeList, APIVersion: "v1", }, Items: []core.Node{ - adapter.converter.ConvertInfoVersionToNode(info, version, adapter.startTime), + adapter.converter.ConvertInfoVersionToNode(info, version, adapter.startTime, adapter.k2dServerConfiguration.ServerIpAddr), }, }, nil }