From 50daa2a942ff6fb8092bc7e8c70e8750e3992953 Mon Sep 17 00:00:00 2001 From: aviavissar Date: Tue, 20 Jan 2026 17:02:34 +0200 Subject: [PATCH] CNV-66552:Mimic split screen behavior and drag-and-drop behavior in NNCP wizard/topology view --- cypress/e2e/NewPolicy.spec.cy.ts | 1 + .../en/plugin__nmstate-console-plugin.json | 28 +++++++ .../es/plugin__nmstate-console-plugin.json | 28 +++++++ .../fr/plugin__nmstate-console-plugin.json | 28 +++++++ .../ja/plugin__nmstate-console-plugin.json | 28 +++++++ .../ko/plugin__nmstate-console-plugin.json | 28 +++++++ .../zh/plugin__nmstate-console-plugin.json | 28 +++++++ .../PolicyForm/PolicyWizard/PolicyWizard.scss | 5 -- .../nodenetworkconfiguration/Topology.tsx | 37 ++++++--- .../{Drawer.tsx => CustomDrawer.tsx} | 6 +- .../InterfaceDrawer/TopologyDrawer.tsx | 75 +++++++++++++++++++ .../TopologySidebar/TopologySidebar.scss | 28 +++---- .../TopologySidebar/TopologySidebar.tsx | 57 -------------- .../TopologyToolbar/TopologyToolbar.tsx | 20 ++--- 14 files changed, 294 insertions(+), 103 deletions(-) rename src/views/nodenetworkconfiguration/components/TopologySidebar/{Drawer.tsx => CustomDrawer.tsx} (92%) create mode 100644 src/views/nodenetworkconfiguration/components/TopologySidebar/InterfaceDrawer/TopologyDrawer.tsx delete mode 100644 src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.tsx diff --git a/cypress/e2e/NewPolicy.spec.cy.ts b/cypress/e2e/NewPolicy.spec.cy.ts index 6d0fc43a..eab6dd24 100644 --- a/cypress/e2e/NewPolicy.spec.cy.ts +++ b/cypress/e2e/NewPolicy.spec.cy.ts @@ -26,6 +26,7 @@ describe('Create new policy with form', () => { cy.contains('button', 'From Form').click(); // Network identity step + cy.wait(1000); cy.get('input[name="physical-network-name"]').clear().type(`${testPolicyName}`); cy.contains('button', 'Next').click(); diff --git a/locales/en/plugin__nmstate-console-plugin.json b/locales/en/plugin__nmstate-console-plugin.json index f16b812b..e3171dc4 100644 --- a/locales/en/plugin__nmstate-console-plugin.json +++ b/locales/en/plugin__nmstate-console-plugin.json @@ -13,11 +13,13 @@ "{{count}} progressing enactments_other": "{{count}} progressing enactments", "{{interfaceType}} name": "{{interfaceType}} name", "{{label}} name": "{{label}} name", + "{{matchingNodesCount}} matching nodes found": "{{matchingNodesCount}} matching nodes found", "{{matchingNodeText}} matching": "{{matchingNodeText}} matching", "{{modelName}} details": "{{modelName}} details", "{{name}} created successfully": "{{name}} created successfully", "{{qualifiedNodesCount}} matching Nodes found": "{{qualifiedNodesCount}} matching Nodes found", "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences": "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences", + "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.": "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.", "A single interface": "A single interface", "Aborted": "Aborted", "Actions": "Actions", @@ -26,6 +28,7 @@ "Add mapping": "Add mapping", "Add Option": "Add Option", "Aggregation mode": "Aggregation mode", + "All": "All", "An error occurred": "An error occurred", "Annotations": "Annotations", "Apply this only to specific subsets of nodes using the node selector": "Apply this only to specific subsets of nodes using the node selector", @@ -48,10 +51,16 @@ "Cannot delete in view-only mode": "Cannot delete in view-only mode", "Cannot edit in view-only mode": "Cannot edit in view-only mode", "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy": "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy", + "Cluster's default network": "Cluster's default network", "ClusterUserDefinedNetwork": "ClusterUserDefinedNetwork", "ClusterUserDefinedNetworks": "ClusterUserDefinedNetworks", "Collapse all": "Collapse all", + "Configuration": "Configuration", + "Configuration drawer": "Configuration drawer", + "Configuration name": "Configuration name", + "Configurations table": "Configurations table", "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.": "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.", + "Configure Nodes": "Configure Nodes", "Configure the core settings for your new network bridge.": "Configure the core settings for your new network bridge.", "Confirm deletion by typing <1>{{name}} below:": "Confirm deletion by typing <1>{{name}} below:", "Conflicting configurations ({{conflictingConfigCount}})": "Conflicting configurations ({{conflictingConfigCount}})", @@ -60,12 +69,14 @@ "Copy MAC address": "Copy MAC address", "Copy YAML to clipboard": "Copy YAML to clipboard", "Create": "Create", + "Create a virtual machines network using this physical network": "Create a virtual machines network using this physical network", "Create another node network configuration": "Create another node network configuration", "Create network": "Create network", "Create NodeNetworkConfigurationPolicy": "Create NodeNetworkConfigurationPolicy", "Create NodeNetworkConfigurationPolicy error": "Create NodeNetworkConfigurationPolicy error", "Created at": "Created at", "Created interfaces cannot be removed": "Created interfaces cannot be removed", + "Creates an OVN Localnet network. Additional configuration required.": "Creates an OVN Localnet network. Additional configuration required.", "Default node network": "Default node network", "Defines how multiple interfaces work for loading balancing or failover.": "Defines how multiple interfaces work for loading balancing or failover.", "Delete": "Delete", @@ -90,6 +101,8 @@ "Empty bridge mapping is not allowed": "Empty bridge mapping is not allowed", "Enable STP": "Enable STP", "Enabled": "Enabled", + "Enactment state": "Enactment state", + "Enactment state table": "Enactment state table", "Enactment states": "Enactment states", "Enactments": "Enactments", "Enactments categorized by status": "Enactments categorized by status", @@ -97,12 +110,15 @@ "Error details": "Error details", "Ethernet": "Ethernet", "Expand all": "Expand all", + "Expand this network to a new set of Nodes.": "Expand this network to a new set of Nodes.", "Explore {{kind}} list": "Explore {{kind}} list", "Explore Node list": "Explore Node list", "Failing": "Failing", "Failover results in loss of guest network connectivity.": "Failover results in loss of guest network connectivity.", "Features": "Features", "Filter": "Filter", + "Filter nodes search input": "Filter nodes search input", + "Filter physical networks search input": "Filter physical networks search input", "From Form": "From Form", "Id": "Id", "Ideal for environments needing advanced, software-defined networking features.": "Ideal for environments needing advanced, software-defined networking features.", @@ -149,6 +165,7 @@ "Network identity": "Network identity", "Network interface": "Network interface", "Network interfaces": "Network interfaces", + "Network name": "Network name", "Network state": "Network state", "Network state controls whether the Linux bridge is active and participating in network traffic.": "Network state controls whether the Linux bridge is active and participating in network traffic.", "Network types": "Network types", @@ -157,14 +174,18 @@ "No NodeNetworkConfigurationPolicy defined yet": "No NodeNetworkConfigurationPolicy defined yet", "No NodeNetworkStates found": "No NodeNetworkStates found", "No owner": "No owner", + "No physical networks defined yet": "No physical networks defined yet", "Node network configuration": "Node network configuration", + "Node network configuration graph legend": "Node network configuration graph legend", "Node network configuration name": "Node network configuration name", "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.": "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.", "Node Selector": "Node Selector", "NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy", "NodeNetworkState": "NodeNetworkState", "nodes": "nodes", + "Nodes": "Nodes", "Nodes configuration": "Nodes configuration", + "Nodes modal": "Nodes modal", "Nodes overlap detected": "Nodes overlap detected", "None": "None", "Not available": "Not available", @@ -180,6 +201,8 @@ "Owner": "Owner", "Pending": "Pending", "Physical network name": "Physical network name", + "Physical networks": "Physical networks", + "Physical networks table": "Physical networks table", "Please <2>try again.": "Please <2>try again.", "Policy details": "Policy details", "Policy interface": "Policy interface", @@ -206,9 +229,11 @@ "Search by IP address...": "Search by IP address...", "Search by LLDP system name...": "Search by LLDP system name...", "Search by MAC address...": "Search by MAC address...", + "Search by name": "Search by name", "Search by VLAN name...": "Search by VLAN name...", "Select a bridge type below to determine how your network traffic will be handled.": "Select a bridge type below to determine how your network traffic will be handled.", "Select from the list": "Select from the list", + "Select items": "Select items", "Select the network interface to access the outside physical network.": "Select the network interface to access the outside physical network.", "Select the network uplink that will provide connectivity to the physical network.": "Select the network uplink that will provide connectivity to the physical network.", "selector key": "selector key", @@ -217,6 +242,7 @@ "Settings": "Settings", "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.": "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.", "Standard link aggregation, requires LACP Etherchannel enabled": "Standard link aggregation, requires LACP Etherchannel enabled", + "State": "State", "STP enabled": "STP enabled", "System description": "System description", "System Description": "System Description", @@ -237,10 +263,12 @@ "This policy must be edited via YAML": "This policy must be edited via YAML", "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.": "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.", "To edit this policy, contact your administrator.": "To edit this policy, contact your administrator.", + "Topology side panel": "Topology side panel", "Type": "Type", "Underlying interface": "Underlying interface", "Unused network interfaces available on all of the selected nodes": "Unused network interfaces available on all of the selected nodes", "Up": "Up", + "Uplink": "Uplink", "Uplink connection": "Uplink connection", "Use commas to separate ports": "Use commas to separate ports", "Use the default node network to access the outside physical network.": "Use the default node network to access the outside physical network.", diff --git a/locales/es/plugin__nmstate-console-plugin.json b/locales/es/plugin__nmstate-console-plugin.json index 21a73c40..96e8fe4e 100644 --- a/locales/es/plugin__nmstate-console-plugin.json +++ b/locales/es/plugin__nmstate-console-plugin.json @@ -18,11 +18,13 @@ "{{count}} progressing enactments_other": "{{count}} promulgaciones en curso_other", "{{interfaceType}} name": "Nombre de {{interfaceType}}", "{{label}} name": "Nombre de {{label}}", + "{{matchingNodesCount}} matching nodes found": "", "{{matchingNodeText}} matching": "{{matchingNodeText}} coincidente", "{{modelName}} details": "Detalles de {{modelName}}", "{{name}} created successfully": "", "{{qualifiedNodesCount}} matching Nodes found": "{{qualifiedNodesCount}} nodos coincidentes encontrados", "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences": "<0>Lista de objetos que dependen de este objeto. Si se eliminaron TODOS los objetos de la lista, este objeto se recolectará como elemento no utilizado. Si un controlador administra este objeto, una entrada de esta lista apuntará a este controlador, y el campo controlador se establecerá en true (verdadero). No puede haber más de un controlador administrador.<1><0>{{kind}}<1>metadatos<2>Referencias del propietario", + "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.": "", "A single interface": "Una única interfaz", "Aborted": "Abortada", "Actions": "Acciones", @@ -31,6 +33,7 @@ "Add mapping": "Agregar asociación", "Add Option": "Agregar opción", "Aggregation mode": "Modo de agregación", + "All": "", "An error occurred": "Ocurrió un error", "Annotations": "Anotaciones", "Apply this only to specific subsets of nodes using the node selector": "Aplicar esto solo a subconjuntos específicos de nodos con el selector de nodos", @@ -53,10 +56,16 @@ "Cannot delete in view-only mode": "No se puede eliminar en modo de solo visualización", "Cannot edit in view-only mode": "No se puede editar en modo de solo visualización", "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy": "Haga clic en <1>Crear NodeNetworkConfigurationPolicy para crear su primera política", + "Cluster's default network": "", "ClusterUserDefinedNetwork": "ClusterUserDefinedNetwork", "ClusterUserDefinedNetworks": "ClusterUserDefinedNetworks", "Collapse all": "Contraer todo", + "Configuration": "", + "Configuration drawer": "", + "Configuration name": "", + "Configurations table": "", "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.": "Configure las interfaces de red de enlace para acceder a la red física externa, lograr una mejor resiliencia y un mayor rendimiento total.", + "Configure Nodes": "", "Configure the core settings for your new network bridge.": "Configure los ajustes principales para su nuevo puente de redes.", "Confirm deletion by typing <1>{{name}} below:": "Para confirmar la eliminación, escriba <1>{{name}} a continuación:", "Conflicting configurations ({{conflictingConfigCount}})": "Configuraciones conflictivas ({{conflictingConfigCount}})", @@ -65,12 +74,14 @@ "Copy MAC address": "Copiar dirección MAC", "Copy YAML to clipboard": "Copiar YAML en el portapapeles", "Create": "Crear", + "Create a virtual machines network using this physical network": "", "Create another node network configuration": "Crear otra configuración de red de nodos", "Create network": "Crear red", "Create NodeNetworkConfigurationPolicy": "Crear NodeNetworkConfigurationPolicy", "Create NodeNetworkConfigurationPolicy error": "Crear error de NodeNetworkConfigurationPolicy", "Created at": "Creado en", "Created interfaces cannot be removed": "Las interfaces creadas no se pueden eliminar", + "Creates an OVN Localnet network. Additional configuration required.": "", "Default node network": "Red de nodos predeterminada", "Defines how multiple interfaces work for loading balancing or failover.": "Define cómo funcionan múltiples interfaces para el equilibrio de carga o la conmutación por error.", "Delete": "Eliminar", @@ -95,6 +106,8 @@ "Empty bridge mapping is not allowed": "No se permite la asociación de puentes vacíos", "Enable STP": "Habilitar STP", "Enabled": "Activado", + "Enactment state": "", + "Enactment state table": "", "Enactment states": "Estados de la promulgación", "Enactments": "Promulgaciones", "Enactments categorized by status": "Promulgaciones clasificadas por estado", @@ -102,12 +115,15 @@ "Error details": "Error de detalles", "Ethernet": "Ethernet", "Expand all": "Ampliar todo", + "Expand this network to a new set of Nodes.": "", "Explore {{kind}} list": "Explorar lista {{kind}}", "Explore Node list": "Explorar lista de nodos", "Failing": "Con errores", "Failover results in loss of guest network connectivity.": "La conmutación por error da como resultado la pérdida de conectividad de la red huésped.", "Features": "Funcionalidades", "Filter": "Filtrar", + "Filter nodes search input": "", + "Filter physical networks search input": "", "From Form": "Del formulario", "Id": "ID", "Ideal for environments needing advanced, software-defined networking features.": "Ideal para entornos que necesitan funcionalidades de red avanzadas definidas por software.", @@ -154,6 +170,7 @@ "Network identity": "Identidad de red", "Network interface": "Interfaz de red", "Network interfaces": "Interfaces de red", + "Network name": "", "Network state": "Estado de la red", "Network state controls whether the Linux bridge is active and participating in network traffic.": "El estado de la red controla si el puente Linux está activo y participa en el tráfico de red.", "Network types": "Tipos de red", @@ -162,14 +179,18 @@ "No NodeNetworkConfigurationPolicy defined yet": "NodeNetworkConfigurationPolicy aún no está definido", "No NodeNetworkStates found": "No se encontraron NodeNetworkStates", "No owner": "Sin propietario", + "No physical networks defined yet": "", "Node network configuration": "Configuración de red de nodos", + "Node network configuration graph legend": "", "Node network configuration name": "Nombre de configuración de red del nodo", "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.": "La red de nodos se configura y administra según el estado de NM. Cree una política de configuración de red de nodos para describir la configuración de red solicitada en los nodos del clúster. La promulgación de la configuración de red de nodos informa sobre las políticas de red implementadas en cada nodo.", "Node Selector": "Selector de nodos", "NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy", "NodeNetworkState": "NodeNetworkState", "nodes": "nodos", + "Nodes": "", "Nodes configuration": "Configuración de nodos", + "Nodes modal": "", "Nodes overlap detected": "Se detectó superposición de nodos", "None": "Ninguno", "Not available": "No disponible", @@ -185,6 +206,8 @@ "Owner": "Propietario", "Pending": "Pendiente", "Physical network name": "Nombre de la red física", + "Physical networks": "", + "Physical networks table": "", "Please <2>try again.": "<2>Inténtelo de nuevo.", "Policy details": "Detalles de la política", "Policy interface": "Interfaz de política", @@ -211,9 +234,11 @@ "Search by IP address...": "Buscar por dirección IP…", "Search by LLDP system name...": "Buscar por nombre del sistema LLDP…", "Search by MAC address...": "Buscar por dirección MAC…", + "Search by name": "", "Search by VLAN name...": "Buscar por nombre de VLAN…", "Select a bridge type below to determine how your network traffic will be handled.": "Seleccione un tipo de puente a continuación para determinar cómo se manejará el tráfico de su red.", "Select from the list": "Seleccione de la lista", + "Select items": "", "Select the network interface to access the outside physical network.": "Seleccione la interfaz de red para acceder a la red física externa.", "Select the network uplink that will provide connectivity to the physical network.": "Seleccione el enlace ascendente de red que proporcionará conectividad a la red física.", "selector key": "clave selectora", @@ -222,6 +247,7 @@ "Settings": "Configuración", "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.": "Algunos de los nodos seleccionados ya están asignados a {{nodeNetworkName}} en otra configuración.", "Standard link aggregation, requires LACP Etherchannel enabled": "Agregación de enlaces estándar, requiere LACP Etherchannel habilitado", + "State": "", "STP enabled": "STP habilitado", "System description": "Descripción del sistema", "System Description": "Descripción del sistema", @@ -242,10 +268,12 @@ "This policy must be edited via YAML": "Esta política debe editarse mediante YAML", "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.": "Para evitar romper la red de nodos predeterminada, asegúrese de que la interfaz seleccionada esté libre, conectada correctamente a un conmutador y no la esté utilizando otra red de nodos.", "To edit this policy, contact your administrator.": "Para editar esta política, comuníquese con su administrador.", + "Topology side panel": "", "Type": "Tipo", "Underlying interface": "Interfaz subyacente", "Unused network interfaces available on all of the selected nodes": "Interfaces de red no utilizadas disponibles en todos los nodos seleccionados", "Up": "Arriba", + "Uplink": "", "Uplink connection": "Conexión de enlace ascendente", "Use commas to separate ports": "Utilice comas para separar los puertos", "Use the default node network to access the outside physical network.": "Utilice la red de nodos predeterminada para acceder a la red física externa.", diff --git a/locales/fr/plugin__nmstate-console-plugin.json b/locales/fr/plugin__nmstate-console-plugin.json index 1a7aa3ca..ada541a5 100644 --- a/locales/fr/plugin__nmstate-console-plugin.json +++ b/locales/fr/plugin__nmstate-console-plugin.json @@ -18,11 +18,13 @@ "{{count}} progressing enactments_other": "{{count}} progression des actes_autres", "{{interfaceType}} name": "{{interfaceType}} nom", "{{label}} name": "{{label}} nom", + "{{matchingNodesCount}} matching nodes found": "", "{{matchingNodeText}} matching": "{{matchingNodeText}} correspondant", "{{modelName}} details": "{{modelName}} détails", "{{name}} created successfully": "", "{{qualifiedNodesCount}} matching Nodes found": "{{qualifiedNodesCount}} nœuds correspondants trouvés", "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences": "<0>Liste des objets dépendant de cet objet. Si tous les objets de la liste ont été supprimés, cet objet sera récupéré dans la poubelle. Si cet objet est géré par un contrôleur, une entrée de cette liste pointera vers ce contrôleur, le champ contrôleur étant défini sur «\u00a0true\u00a0». Il ne peut y avoir plus d'un contrôleur de gestion.<1><0>{{kind}}<1>metadata<2>ownerReferences", + "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.": "", "A single interface": "Une interface unique", "Aborted": "Avorté", "Actions": "Actions", @@ -31,6 +33,7 @@ "Add mapping": "Ajouter une carte", "Add Option": "Ajouter une option", "Aggregation mode": "Mode d'agrégation", + "All": "", "An error occurred": "Une erreur s’est produite", "Annotations": "Annotations", "Apply this only to specific subsets of nodes using the node selector": "Appliquez ceci uniquement à des sous-ensembles spécifiques de nœuds à l'aide du sélecteur de nœuds.", @@ -53,10 +56,16 @@ "Cannot delete in view-only mode": "Impossible de supprimer en mode lecture seule", "Cannot edit in view-only mode": "Impossible de modifier en mode lecture seule", "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy": "Cliquez<1> Créer une stratégie de configuration NodeNetwork pour créer votre première police d'assurance", + "Cluster's default network": "", "ClusterUserDefinedNetwork": "ClusterUserDefinedNetwork", "ClusterUserDefinedNetworks": "ClusterUserDefinedNetworks", "Collapse all": "Réduire tout", + "Configuration": "", + "Configuration drawer": "", + "Configuration name": "", + "Configurations table": "", "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.": "Configurez les interfaces réseau agrégées pour accéder au réseau physique externe, afin d'obtenir une meilleure résilience et un débit total plus élevé.", + "Configure Nodes": "", "Configure the core settings for your new network bridge.": "Configurez les paramètres principaux de votre nouveau pont réseau.", "Confirm deletion by typing <1>{{name}} below:": "Confirmer la suppression en tapant<1>{{name}} ci-dessous:", "Conflicting configurations ({{conflictingConfigCount}})": "Configurations conflictuelles ({{conflictingConfigCount}} )", @@ -65,12 +74,14 @@ "Copy MAC address": "Copier l'adresse MAC", "Copy YAML to clipboard": "Copier le YAML dans le presse-papiers", "Create": "Créer", + "Create a virtual machines network using this physical network": "", "Create another node network configuration": "Créer une autre configuration de réseau de nœuds", "Create network": "Créer un réseau", "Create NodeNetworkConfigurationPolicy": "Créer une stratégie de configuration NodeNetwork", "Create NodeNetworkConfigurationPolicy error": "Créer une erreur NodeNetworkConfigurationPolicy", "Created at": "Heure de création", "Created interfaces cannot be removed": "Les interfaces créées ne peuvent pas être supprimées.", + "Creates an OVN Localnet network. Additional configuration required.": "", "Default node network": "Réseau de nœuds par défaut", "Defines how multiple interfaces work for loading balancing or failover.": "Définit le fonctionnement de plusieurs interfaces pour l'équilibrage de charge ou le basculement.", "Delete": "Supprimer", @@ -95,6 +106,8 @@ "Empty bridge mapping is not allowed": "Le mappage des ponts vides n'est pas autorisé", "Enable STP": "Activer STP", "Enabled": "Activé", + "Enactment state": "", + "Enactment state table": "", "Enactment states": "État de promulgation", "Enactments": "Actes", "Enactments categorized by status": "Actes classées par statut", @@ -102,12 +115,15 @@ "Error details": "Détails de l’erreur", "Ethernet": "Ethernet", "Expand all": "Tout développer", + "Expand this network to a new set of Nodes.": "", "Explore {{kind}} list": "Explorer la liste de {{kind}}", "Explore Node list": "Liste des nœuds explorés", "Failing": "En échec", "Failover results in loss of guest network connectivity.": "Le basculement entraîne une perte de connectivité au réseau invité.", "Features": "Caractéristiques", "Filter": "Filtre", + "Filter nodes search input": "", + "Filter physical networks search input": "", "From Form": "À partir du formulaire", "Id": "Id", "Ideal for environments needing advanced, software-defined networking features.": "Idéal pour les environnements nécessitant des fonctionnalités de réseau avancées et définies par logiciel.", @@ -154,6 +170,7 @@ "Network identity": "Identité du réseau", "Network interface": "Interface réseau", "Network interfaces": "Interfaces réseau", + "Network name": "", "Network state": "État du réseau", "Network state controls whether the Linux bridge is active and participating in network traffic.": "L'état du réseau détermine si le pont Linux est actif et participe au trafic réseau.", "Network types": "Types de réseaux", @@ -162,14 +179,18 @@ "No NodeNetworkConfigurationPolicy defined yet": "Aucune politique de configuration réseau de nœuds n'a encore été définie.", "No NodeNetworkStates found": "Aucun NodeNetworkStates trouvé", "No owner": "Aucun propriétaire", + "No physical networks defined yet": "", "Node network configuration": "Configuration du réseau de nœuds", + "Node network configuration graph legend": "", "Node network configuration name": "Nom de la configuration réseau du nœud", "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.": "Le réseau des nœuds est configuré et géré par l'état NM. Créez une stratégie de configuration réseau pour décrire la configuration réseau souhaitée sur les nœuds du cluster. Le rapport d'exécution de la configuration réseau des nœuds indique les stratégies réseau appliquées à chaque nœud.", "Node Selector": "Sélecteur de nœud", "NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy", "NodeNetworkState": "État du réseau du nœud", "nodes": "nœuds", + "Nodes": "", "Nodes configuration": "Configuration des nœuds", + "Nodes modal": "", "Nodes overlap detected": "Chevauchement de nœuds détecté", "None": "Aucun", "Not available": "Non disponible", @@ -185,6 +206,8 @@ "Owner": "Propriétaire", "Pending": "En attente", "Physical network name": "Nom du réseau physique", + "Physical networks": "", + "Physical networks table": "", "Please <2>try again.": "Veuillez <2>réessayer.", "Policy details": "Détails de la police", "Policy interface": "Interface de stratégie", @@ -211,9 +234,11 @@ "Search by IP address...": "Recherche par adresse IP...", "Search by LLDP system name...": "Recherche par nom de système LLDP...", "Search by MAC address...": "Recherche par adresse MAC...", + "Search by name": "", "Search by VLAN name...": "Recherche par nom de VLAN...", "Select a bridge type below to determine how your network traffic will be handled.": "Sélectionnez un type de pont ci-dessous pour déterminer comment votre trafic réseau sera géré.", "Select from the list": "Sélectionnez dans la liste", + "Select items": "", "Select the network interface to access the outside physical network.": "Sélectionnez l'interface réseau pour accéder au réseau physique externe.", "Select the network uplink that will provide connectivity to the physical network.": "Sélectionnez la liaison montante réseau qui assurera la connectivité au réseau physique.", "selector key": "clé du sélecteur", @@ -222,6 +247,7 @@ "Settings": "Paramètres", "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.": "Certains des nœuds sélectionnés sont déjà affectés à{{nodeNetworkName}} dans une autre configuration.", "Standard link aggregation, requires LACP Etherchannel enabled": "Agrégation de liens standard, nécessite l'activation d'Etherchannel LACP", + "State": "", "STP enabled": "STP activé", "System description": "Description du système", "System Description": "Description du système", @@ -242,10 +268,12 @@ "This policy must be edited via YAML": "Cette politique doit être modifiée via YAML.", "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.": "Pour éviter de perturber le réseau de nœuds par défaut, assurez-vous que l'interface sélectionnée est libre, correctement connectée à un commutateur et non utilisée par un autre réseau de nœuds.", "To edit this policy, contact your administrator.": "Pour modifier cette politique, contactez votre administrateur.", + "Topology side panel": "", "Type": "Type", "Underlying interface": "Interface sous-jacente", "Unused network interfaces available on all of the selected nodes": "Interfaces réseau inutilisées disponibles sur tous les nœuds sélectionnés", "Up": "Vers le haut", + "Uplink": "", "Uplink connection": "Connexion de liaison montante", "Use commas to separate ports": "Utilisez des virgules pour séparer les ports", "Use the default node network to access the outside physical network.": "Utilisez le réseau de nœuds par défaut pour accéder au réseau physique externe.", diff --git a/locales/ja/plugin__nmstate-console-plugin.json b/locales/ja/plugin__nmstate-console-plugin.json index fd780cb0..c79e98ca 100644 --- a/locales/ja/plugin__nmstate-console-plugin.json +++ b/locales/ja/plugin__nmstate-console-plugin.json @@ -13,11 +13,13 @@ "{{count}} progressing enactments_other": "進行中の施行: {{count}} 件", "{{interfaceType}} name": "{{interfaceType}} の名前", "{{label}} name": "{{label}} の名前", + "{{matchingNodesCount}} matching nodes found": "", "{{matchingNodeText}} matching": "{{matchingNodeText}} のマッチング", "{{modelName}} details": "{{modelName}} の詳細", "{{name}} created successfully": "", "{{qualifiedNodesCount}} matching Nodes found": "{{qualifiedNodesCount}} 個の一致するノードが見つかりました", "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences": "<0>このオブジェクトが依存するオブジェクトのリストです。リスト内のすべてのオブジェクトが削除された場合、このオブジェクトはガベージコレクションの対象となります。このオブジェクトがコントローラーによって管理されている場合、このリスト内のエントリーはこのコントローラーを参照し、コントローラーフィールドが true に設定されます。管理コントローラーは複数存在することはできません。<1><0>{{kind}}<1>メタデータ<2>ownerReferences", + "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.": "", "A single interface": "単一のインターフェイス", "Aborted": "中止", "Actions": "アクション", @@ -26,6 +28,7 @@ "Add mapping": "マッピングの追加", "Add Option": "オプションの追加", "Aggregation mode": "アグリゲーションモード", + "All": "", "An error occurred": "エラーが発生しました", "Annotations": "アノテーション", "Apply this only to specific subsets of nodes using the node selector": "ノードセレクターを使用して、特定のノードサブセットにのみこれを適用します", @@ -48,10 +51,16 @@ "Cannot delete in view-only mode": "表示専用モードでは削除できません", "Cannot edit in view-only mode": "表示専用モードでは編集できません", "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy": "<1>Create NodeNetworkConfigurationPolicy をクリックして、最初のポリシーを作成する", + "Cluster's default network": "", "ClusterUserDefinedNetwork": "ClusterUserDefinedNetwork", "ClusterUserDefinedNetworks": "ClusterUserDefinedNetworks", "Collapse all": "すべて折りたたむ", + "Configuration": "", + "Configuration drawer": "", + "Configuration name": "", + "Configurations table": "", "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.": "耐障害性の向上と総スループットの向上を実現するために、外部の物理ネットワークにアクセスするためのボンディングネットワークインターフェイスを設定します。", + "Configure Nodes": "", "Configure the core settings for your new network bridge.": "新しいネットワークブリッジのコア設定を行います。", "Confirm deletion by typing <1>{{name}} below:": "以下に <1>{{name}} を入力して削除を確定します:", "Conflicting configurations ({{conflictingConfigCount}})": "競合する設定 ({{conflictingConfigCount}})", @@ -60,12 +69,14 @@ "Copy MAC address": "MAC アドレスをコピーする", "Copy YAML to clipboard": "YAML をクリップボードにコピーする", "Create": "作成", + "Create a virtual machines network using this physical network": "", "Create another node network configuration": "別のノードのネットワーク設定を作成する", "Create network": "ネットワークを作成する", "Create NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy を作成する", "Create NodeNetworkConfigurationPolicy error": "NodeNetworkConfigurationPolicy の作成エラー", "Created at": "作成日時", "Created interfaces cannot be removed": "作成されたインターフェイスは削除できません", + "Creates an OVN Localnet network. Additional configuration required.": "", "Default node network": "デフォルトのノードネットワーク", "Defines how multiple interfaces work for loading balancing or failover.": "負荷分散やフェイルオーバーにおいて、複数のインターフェイスをどのように動作させるかを定義します。", "Delete": "削除", @@ -90,6 +101,8 @@ "Empty bridge mapping is not allowed": "空のブリッジマッピングは許可されていません", "Enable STP": "STP を有効にする", "Enabled": "有効", + "Enactment state": "", + "Enactment state table": "", "Enactment states": "施行状態", "Enactments": "施行", "Enactments categorized by status": "ステータス別の施行", @@ -97,12 +110,15 @@ "Error details": "エラーの詳細", "Ethernet": "イーサネット", "Expand all": "すべて展開", + "Expand this network to a new set of Nodes.": "", "Explore {{kind}} list": "{{kind}} リストを確認する", "Explore Node list": "ノードリストを確認する", "Failing": "失敗", "Failover results in loss of guest network connectivity.": "フェイルオーバーによりゲストのネットワーク接続が失われます。", "Features": "機能", "Filter": "フィルター", + "Filter nodes search input": "", + "Filter physical networks search input": "", "From Form": "フォームから", "Id": "Id", "Ideal for environments needing advanced, software-defined networking features.": "高度なソフトウェア定義ネットワーク機能を必要とする環境に最適です。", @@ -149,6 +165,7 @@ "Network identity": "ネットワークアイデンティティー", "Network interface": "ネットワークインターフェイス", "Network interfaces": "ネットワークインターフェイス", + "Network name": "", "Network state": "ネットワーク状態", "Network state controls whether the Linux bridge is active and participating in network traffic.": "ネットワーク状態は、Linux ブリッジがアクティブで、ネットワークトラフィックに参加しているかどうかを制御します。", "Network types": "ネットワークタイプ", @@ -157,14 +174,18 @@ "No NodeNetworkConfigurationPolicy defined yet": "NodeNetworkConfigurationPolicy はまだ定義されていません", "No NodeNetworkStates found": "NodeNetworkStates が見つかりません", "No owner": "所有者なし", + "No physical networks defined yet": "", "Node network configuration": "ノードネットワーク設定", + "Node network configuration graph legend": "", "Node network configuration name": "ノードネットワーク設定名", "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.": "ノードネットワークは NM state によって設定および管理されます。クラスター内のノードに要求されたネットワーク設定を記述するノードネットワーク設定ポリシーを作成します。ノードネットワーク設定の施行は、各ノードに適用されたネットワークポリシーの状況を報告します。", "Node Selector": "ノードセレクター", "NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy", "NodeNetworkState": "NodeNetworkState", "nodes": "ノード", + "Nodes": "", "Nodes configuration": "ノード設定", + "Nodes modal": "", "Nodes overlap detected": "ノードの重複が検出されました", "None": "なし", "Not available": "利用不可", @@ -180,6 +201,8 @@ "Owner": "オーナー", "Pending": "保留中", "Physical network name": "物理ネットワーク名", + "Physical networks": "", + "Physical networks table": "", "Please <2>try again.": "<2>再試行 してください。", "Policy details": "ポリシーの詳細", "Policy interface": "ポリシーインターフェイス", @@ -206,9 +229,11 @@ "Search by IP address...": "IP アドレスで検索...", "Search by LLDP system name...": "LLDP システム名で検索...", "Search by MAC address...": "MAC アドレスで検索...", + "Search by name": "", "Search by VLAN name...": "VLAN 名で検索...", "Select a bridge type below to determine how your network traffic will be handled.": "以下のブリッジタイプを選択して、ネットワークトラフィックの処理方法を決定します。", "Select from the list": "リストから選択する", + "Select items": "", "Select the network interface to access the outside physical network.": "外部の物理ネットワークにアクセスするためのネットワークインターフェイスを選択します。", "Select the network uplink that will provide connectivity to the physical network.": "物理ネットワークへの接続を提供するネットワークアップリンクを選択します。", "selector key": "セレクターキー", @@ -217,6 +242,7 @@ "Settings": "設定", "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.": "選択したノードの一部は、別の設定ですでに {{nodeNetworkName}} に割り当てられています。", "Standard link aggregation, requires LACP Etherchannel enabled": "標準リンクアグリゲーションで、LACP Etherchannel が有効になっている必要があります", + "State": "", "STP enabled": "STP 対応", "System description": "システムの説明", "System Description": "システムの説明", @@ -237,10 +263,12 @@ "This policy must be edited via YAML": "このポリシーは YAML 経由で編集する必要があります", "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.": "デフォルトのノードネットワークへの支障を避けるため、選択したインターフェイスが未使用であること、スイッチに正しく接続されていること、および他のノードネットワークで使用されていないことを確認してください。", "To edit this policy, contact your administrator.": "このポリシーを編集するには、管理者に連絡してください。", + "Topology side panel": "", "Type": "タイプ", "Underlying interface": "基盤となるインターフェイス", "Unused network interfaces available on all of the selected nodes": "選択されたすべてのノードで利用可能な未使用のネットワークインターフェイス", "Up": "起動中", + "Uplink": "", "Uplink connection": "アップリンク接続", "Use commas to separate ports": "ポートを区切るにはコンマを使用します", "Use the default node network to access the outside physical network.": "デフォルトのノードネットワークを使用して、外部の物理ネットワークにアクセスします。", diff --git a/locales/ko/plugin__nmstate-console-plugin.json b/locales/ko/plugin__nmstate-console-plugin.json index eb2da1e9..110d4920 100644 --- a/locales/ko/plugin__nmstate-console-plugin.json +++ b/locales/ko/plugin__nmstate-console-plugin.json @@ -13,11 +13,13 @@ "{{count}} progressing enactments_other": "{{count}} 진행 중인 실행", "{{interfaceType}} name": "{{interfaceType}} 이름", "{{label}} name": "{{label}} 이름", + "{{matchingNodesCount}} matching nodes found": "", "{{matchingNodeText}} matching": "{{matchingNodeText}} 일치", "{{modelName}} details": "{{modelName}} 세부 정보", "{{name}} created successfully": "", "{{qualifiedNodesCount}} matching Nodes found": "{{qualifiedNodesCount}} 일치하는 노드 발견", "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences": "<0>이 객체에 종속된 객체 목록입니다. 목록의 모든 객체가 삭제된 경우 이 객체는 가비지 수집됩니다. 이 객체가 컨트롤러에 의해 관리되는 경우, 이 목록의 항목은 컨트롤러 필드가 true로 설정된 이 컨트롤러를 가리킵니다. 관리하는 컨트롤러는 여러 개일 수 없습니다.<1><0>{{kind}}<1>metadata<2>ownerReferences", + "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.": "", "A single interface": "단일 인터페이스", "Aborted": "중단됨", "Actions": "작업", @@ -26,6 +28,7 @@ "Add mapping": "매핑 추가", "Add Option": "옵션 추가", "Aggregation mode": "집계 모드", + "All": "", "An error occurred": "오류가 발생했습니다", "Annotations": "주석", "Apply this only to specific subsets of nodes using the node selector": "노드 선택기를 사용하여 특정 노드 하위 집합에만 적용합니다", @@ -48,10 +51,16 @@ "Cannot delete in view-only mode": "보기 전용 모드에서 삭제할 수 없습니다", "Cannot edit in view-only mode": "보기 전용 모드에서 편집할 수 없습니다", "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy": "<1>Create NodeNetworkConfigurationPolicy을 클릭하여 첫 번째 정책을 생성합니다.", + "Cluster's default network": "", "ClusterUserDefinedNetwork": "ClusterUserDefinedNetwork", "ClusterUserDefinedNetworks": "ClusterUserDefinedNetworks", "Collapse all": "모두 접기", + "Configuration": "", + "Configuration drawer": "", + "Configuration name": "", + "Configurations table": "", "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.": "외부 물리 네트워크에 액세스하기 위해 본딩 네트워크 인터페이스를 구성하여 더 높은 안정성과 총 처리량을 확보합니다.", + "Configure Nodes": "", "Configure the core settings for your new network bridge.": "새 네트워크 브리지의 코어 설정을 구성합니다.", "Confirm deletion by typing <1>{{name}} below:": "다음 <1>{{name}}을 입력하여 삭제를 확인합니다.", "Conflicting configurations ({{conflictingConfigCount}})": "충돌하는 구성 ({{conflictingConfigCount}})", @@ -60,12 +69,14 @@ "Copy MAC address": "MAC 주소 복사", "Copy YAML to clipboard": "YAML을 클립보드에 복사", "Create": "만들기", + "Create a virtual machines network using this physical network": "", "Create another node network configuration": "다른 노드 네트워크 구성 생성", "Create network": "네트워크 생성", "Create NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy 생성", "Create NodeNetworkConfigurationPolicy error": "NodeNetworkConfigurationPolicy 생성 오류", "Created at": "작성일", "Created interfaces cannot be removed": "생성된 인터페이스는 제거할 수 없습니다", + "Creates an OVN Localnet network. Additional configuration required.": "", "Default node network": "기본 노드 네트워크", "Defines how multiple interfaces work for loading balancing or failover.": "로드 밸런싱 또는 페일오버를 위해 여러 인터페이스가 작동하는 방법을 정의합니다.", "Delete": "삭제", @@ -90,6 +101,8 @@ "Empty bridge mapping is not allowed": "빈 브리지 매핑은 허용되지 않습니다.", "Enable STP": "STP 활성화", "Enabled": "활성화됨", + "Enactment state": "", + "Enactment state table": "", "Enactment states": "적용 상태", "Enactments": "적용 내역", "Enactments categorized by status": "상태별 적용 내역", @@ -97,12 +110,15 @@ "Error details": "오류 정보", "Ethernet": "이더넷", "Expand all": "모두 펼치기", + "Expand this network to a new set of Nodes.": "", "Explore {{kind}} list": "{{kind}} 목록 검색", "Explore Node list": "노드 목록 살펴보기", "Failing": "실패", "Failover results in loss of guest network connectivity.": "페일오버로 인해 게스트 네트워크 연결이 끊어집니다.", "Features": "기능", "Filter": "필터", + "Filter nodes search input": "", + "Filter physical networks search input": "", "From Form": "양식에서: ", "Id": "ID", "Ideal for environments needing advanced, software-defined networking features.": "고급 소프트웨어 정의 네트워킹 기능이 필요한 환경에 이상적입니다.", @@ -149,6 +165,7 @@ "Network identity": "네트워크 ID", "Network interface": "네트워크 인터페이스", "Network interfaces": "네트워크 인터페이스", + "Network name": "", "Network state": "네트워크 상태", "Network state controls whether the Linux bridge is active and participating in network traffic.": "네트워크 상태는 Linux 브리지가 활성화되고 네트워크 트래픽에 참여하는지 여부를 제어합니다.", "Network types": "네트워크 유형", @@ -157,14 +174,18 @@ "No NodeNetworkConfigurationPolicy defined yet": "NodeNetworkConfigurationPolicy가 아직 정의되어 있지 않음", "No NodeNetworkStates found": "NodeNetworkStates를 찾을 수 없음", "No owner": "소유자 없음", + "No physical networks defined yet": "", "Node network configuration": "노드 네트워크 구성", + "Node network configuration graph legend": "", "Node network configuration name": "노드 네트워크 구성 이름", "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.": "노드 네트워크는 NM 상태로 구성 및 관리됩니다. 클러스터의 노드에 필요한 네트워크 구성을 설명하기 위해 노드 네트워크 구성 정책을 생성합니다. 노드 네트워크 구성 적용 내역은 각 노드에 적용된 네트워크 정책을 보고합니다.", "Node Selector": "노드 선택기", "NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy", "NodeNetworkState": "NodeNetworkState", "nodes": "노드", + "Nodes": "", "Nodes configuration": "노드 구성", + "Nodes modal": "", "Nodes overlap detected": "노드 중복이 감지되었습니다", "None": "없음", "Not available": "사용할 수 없음", @@ -180,6 +201,8 @@ "Owner": "소유자", "Pending": "대기 중", "Physical network name": "물리 네트워크 이름", + "Physical networks": "", + "Physical networks table": "", "Please <2>try again.": "<2>다시 시도하십시오", "Policy details": "정책 세부 정보", "Policy interface": "정책 인터페이스", @@ -206,9 +229,11 @@ "Search by IP address...": "IP 주소로 검색...", "Search by LLDP system name...": "LLDP 시스템 이름으로 검색...", "Search by MAC address...": "MAC 주소로 검색...", + "Search by name": "", "Search by VLAN name...": "VLAN 이름으로 검색...", "Select a bridge type below to determine how your network traffic will be handled.": "아래 브리지 유형을 선택하여 네트워크 트래픽 처리 방법을 결정합니다.", "Select from the list": "목록에서 선택", + "Select items": "", "Select the network interface to access the outside physical network.": "외부 물리 네트워크에 액세스할 네트워크 인터페이스를 선택합니다.", "Select the network uplink that will provide connectivity to the physical network.": "물리 네트워크에 대한 연결을 제공할 네트워크 업링크를 선택합니다.", "selector key": "선택기 키", @@ -217,6 +242,7 @@ "Settings": "설정", "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.": "선택한 노드 중 일부는 다른 구성에서 이미 {{nodeNetworkName}}에 할당되어 있습니다.", "Standard link aggregation, requires LACP Etherchannel enabled": "표준 링크 집계를 사용하려면 LACP Etherchannel이 활성화되어 있어야 합니다.", + "State": "", "STP enabled": "STP 활성화됨", "System description": "시스템 설명", "System Description": "시스템 설명", @@ -237,10 +263,12 @@ "This policy must be edited via YAML": "이 정책은 YAML을 통해 편집해야 합니다.", "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.": "기본 노드 네트워크를 위반하지 않으려면 선택한 인터페이스가 사용 가능하고, 스위치에 올바르게 연결되어 있으며 다른 노드 네트워크에서 사용되지 않아야 합니다.", "To edit this policy, contact your administrator.": "이 정책을 편집하려면 관리자에게 문의하십시오.", + "Topology side panel": "", "Type": "유형", "Underlying interface": "기본 인터페이스", "Unused network interfaces available on all of the selected nodes": "선택한 모든 노드에서 사용 가능한 미사용 네트워크 인터페이스", "Up": "실행", + "Uplink": "", "Uplink connection": "업링크 연결", "Use commas to separate ports": "포트를 분리하려면 쉼표 사용합니다", "Use the default node network to access the outside physical network.": "기본 노드 네트워크를 사용하여 외부 물리적 네트워크에 액세스합니다.", diff --git a/locales/zh/plugin__nmstate-console-plugin.json b/locales/zh/plugin__nmstate-console-plugin.json index 4609db7f..c62ac0fc 100644 --- a/locales/zh/plugin__nmstate-console-plugin.json +++ b/locales/zh/plugin__nmstate-console-plugin.json @@ -13,11 +13,13 @@ "{{count}} progressing enactments_other": "{{count}} 个处理中的 enactments", "{{interfaceType}} name": "{{interfaceType}} 名称", "{{label}} name": "{{label}} 名称", + "{{matchingNodesCount}} matching nodes found": "", "{{matchingNodeText}} matching": "{{matchingNodeText}} 匹配", "{{modelName}} details": "{{modelName}} 详情", "{{name}} created successfully": "", "{{qualifiedNodesCount}} matching Nodes found": "找到 {{qualifiedNodesCount}} 匹配节点", "<0>List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.<1><0>{{kind}}<1>metadata<2>ownerReferences": "<0>对象列表由此对象决定。如果列表中的所有对象都已被删除,则此对象会被进行垃圾收集。如果此对象由控制器管理,则此列表中的一个条目会指向此控制器,其 controller 字段被设为 true。不能有多个管理控制器。<1><0>{{kind}}<1>metadata<2>ownerReferences", + "A physical network establishes a specific network configuration on cluster nodes. To get started, create a physical network.": "", "A single interface": "一个单个接口", "Aborted": "中止", "Actions": "行动", @@ -26,6 +28,7 @@ "Add mapping": "添加映射", "Add Option": "添加选项", "Aggregation mode": "聚合模式", + "All": "", "An error occurred": "发生错误", "Annotations": "注解", "Apply this only to specific subsets of nodes using the node selector": "只应用到使用节点选择器的节点子集", @@ -48,10 +51,16 @@ "Cannot delete in view-only mode": "在只读模式中无法删除", "Cannot edit in view-only mode": "在只读模式中无法编辑", "Click <1>Create NodeNetworkConfigurationPolicy to create your first policy": "点<1>创建 NodeNetworkConfigurationPolicy 创建您的第一个策略", + "Cluster's default network": "", "ClusterUserDefinedNetwork": "ClusterUserDefinedNetwork", "ClusterUserDefinedNetworks": "ClusterUserDefinedNetwork", "Collapse all": "折叠所有", + "Configuration": "", + "Configuration drawer": "", + "Configuration name": "", + "Configurations table": "", "Configure bond network interfaces to access the outside physical network, to achieve better resilience and higher total throughput.": "配置绑定网络接口以访问外部物理网络,实现更好的弹性和更高的吞吐量。", + "Configure Nodes": "", "Configure the core settings for your new network bridge.": "为您的新网桥配置核心设置。", "Confirm deletion by typing <1>{{name}} below:": "在以下输入 <1>{{name}} 确认删除:", "Conflicting configurations ({{conflictingConfigCount}})": "配置冲突 ({{conflictingConfigCount}})", @@ -60,12 +69,14 @@ "Copy MAC address": "复制 MAC 地址", "Copy YAML to clipboard": "将 YAML 复制到剪贴板", "Create": "创建", + "Create a virtual machines network using this physical network": "", "Create another node network configuration": "创建另一个节点网络配置", "Create network": "创建网络", "Create NodeNetworkConfigurationPolicy": "创建 NodeNetworkConfigurationPolicy", "Create NodeNetworkConfigurationPolicy error": "创建 NodeNetworkConfigurationPolicy 错误", "Created at": "创建于", "Created interfaces cannot be removed": "无法删除创建的接口", + "Creates an OVN Localnet network. Additional configuration required.": "", "Default node network": "默认节点网络", "Defines how multiple interfaces work for loading balancing or failover.": "定义多个接口如何用于负载平衡或故障转移。", "Delete": "删除", @@ -90,6 +101,8 @@ "Empty bridge mapping is not allowed": "不允许空网桥映射", "Enable STP": "启用 STP", "Enabled": "已启用", + "Enactment state": "", + "Enactment state table": "", "Enactment states": "Enactment 状态", "Enactments": "Enactment", "Enactments categorized by status": "enactments 按状态分类", @@ -97,12 +110,15 @@ "Error details": "错误详情", "Ethernet": "Ethernet", "Expand all": "扩展所有", + "Expand this network to a new set of Nodes.": "", "Explore {{kind}} list": "浏览 {{kind}} 列表", "Explore Node list": "浏览节点列表", "Failing": "失败", "Failover results in loss of guest network connectivity.": "故障转移会导致客户机网络连接丢失。", "Features": "功能", "Filter": "过滤器", + "Filter nodes search input": "", + "Filter physical networks search input": "", "From Form": "从表单中", "Id": "Id", "Ideal for environments needing advanced, software-defined networking features.": "适合需要高级、软件定义网络功能的环境。", @@ -149,6 +165,7 @@ "Network identity": "网络身份", "Network interface": "网络接口", "Network interfaces": "网络接口", + "Network name": "", "Network state": "网络状态", "Network state controls whether the Linux bridge is active and participating in network traffic.": "网络状态控制 Linux 网桥是否活跃并参与网络流量。", "Network types": "网络类型", @@ -157,14 +174,18 @@ "No NodeNetworkConfigurationPolicy defined yet": "还没有定义 NodeNetworkConfigurationPolicy", "No NodeNetworkStates found": "没有找到 NodeNetworkStates", "No owner": "没有所有者", + "No physical networks defined yet": "", "Node network configuration": "节点网络配置", + "Node network configuration graph legend": "", "Node network configuration name": "节点网络配置名称", "Node network is configured and managed by NM state. Create a node network configuration policy to describe the requested network configuration on your nodes in the cluster. The node network configuration enactment reports the network policies enacted upon each node.": "节点网络由 NM 状态配置和管理。创建一个节点网络配置策略来描述集群中节点上请求的网络配置。节点网络配置 enactment 会报告每个节点采用的网络策略。", "Node Selector": "节点选择器", "NodeNetworkConfigurationPolicy": "NodeNetworkConfigurationPolicy", "NodeNetworkState": "NodeNetworkState", "nodes": "节点", + "Nodes": "", "Nodes configuration": "节点配置", + "Nodes modal": "", "Nodes overlap detected": "检测到节点重叠", "None": "无", "Not available": "不可用", @@ -180,6 +201,8 @@ "Owner": "所有者", "Pending": "待处理", "Physical network name": "物理网络名称", + "Physical networks": "", + "Physical networks table": "", "Please <2>try again.": "请<2>再次尝试。", "Policy details": "策略详情", "Policy interface": "策略接口", @@ -206,9 +229,11 @@ "Search by IP address...": "按 IP 地址搜索...", "Search by LLDP system name...": "按 LLDP 系统名称搜索...", "Search by MAC address...": "按 MAC 地址搜索...", + "Search by name": "", "Search by VLAN name...": "按 VLAN 名称搜索...", "Select a bridge type below to determine how your network traffic will be handled.": "在下面选择一个网桥类型,以确定您的网络流量将如何处理。", "Select from the list": "从列表中选择", + "Select items": "", "Select the network interface to access the outside physical network.": "选择用于访问外部物理网络的网络接口。", "Select the network uplink that will provide connectivity to the physical network.": "选择提供与物理网络连接的网络 uplink。", "selector key": "选择器键", @@ -217,6 +242,7 @@ "Settings": "设置", "Some of the selected Nodes are already assigned to {{nodeNetworkName}} in another configuration.": "一些选择的节点已在另一个配置中分配给 {{nodeNetworkName}}。", "Standard link aggregation, requires LACP Etherchannel enabled": "标准链路聚合,需要启用 LACP Etherchannel", + "State": "", "STP enabled": "启用了 STP", "System description": "系统描述", "System Description": "系统描述", @@ -237,10 +263,12 @@ "This policy must be edited via YAML": "此策略需要通过 YAML 编辑", "To avoid breaking the default node network ensure the selected interface is free, properly connected to a switch, and not used by another node network.": "为了避免破坏默认节点网络,请确保所选接口可用,正确地连接到交换机,且没有被另一个节点网络使用。", "To edit this policy, contact your administrator.": "要编辑此策略,请联系您的管理员。", + "Topology side panel": "", "Type": "类型", "Underlying interface": "底层接口", "Unused network interfaces available on all of the selected nodes": "在所有选择的节点上都可用的未使用的网络接口", "Up": "可使用", + "Uplink": "", "Uplink connection": "uplink 连接", "Use commas to separate ports": "使用逗号分隔端口", "Use the default node network to access the outside physical network.": "使用默认节点网络访问外部物理网络。", diff --git a/src/utils/components/PolicyForm/PolicyWizard/PolicyWizard.scss b/src/utils/components/PolicyForm/PolicyWizard/PolicyWizard.scss index 9b987bd6..e69de29b 100644 --- a/src/utils/components/PolicyForm/PolicyWizard/PolicyWizard.scss +++ b/src/utils/components/PolicyForm/PolicyWizard/PolicyWizard.scss @@ -1,5 +0,0 @@ -.nmstate-policy-wizard { - .pf-v6-c-wizard__main-body { - padding-left: 0; - } -} diff --git a/src/views/nodenetworkconfiguration/Topology.tsx b/src/views/nodenetworkconfiguration/Topology.tsx index 90430b84..26e9b960 100644 --- a/src/views/nodenetworkconfiguration/Topology.tsx +++ b/src/views/nodenetworkconfiguration/Topology.tsx @@ -1,7 +1,7 @@ import React, { FC, useEffect, useMemo, useState } from 'react'; import { useHistory } from 'react-router'; import { NodeModelGroupVersionKind } from 'src/console-models/NodeModel'; - +import './components/TopologySidebar/TopologySidebar.scss'; import { IoK8sApiCoreV1Node } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; import { V1beta1NodeNetworkConfigurationEnactment, @@ -37,8 +37,9 @@ import { filterPolicyAppliedNodes } from '@utils/resources/policies/utils'; import TopologyLegend from './components/TopologyLegend/TopologyLegend'; import { SELECTED_ID_QUERY_PARAM } from './components/TopologySidebar/constants'; +import { useNMStateTranslation } from 'src/utils/hooks/useNMStateTranslation'; +import TopologyDrawer from './components/TopologySidebar/InterfaceDrawer/TopologyDrawer'; import { creatingPolicySignal } from './components/TopologySidebar/CreatePolicyDrawer'; -import TopologySidebar from './components/TopologySidebar/TopologySidebar'; import TopologyToolbar from './components/TopologyToolbar/TopologyToolbar'; import { GRAPH_POSITIONING_EVENT, NODE_POSITIONING_EVENT } from './utils/constants'; import { componentFactory, layoutFactory } from './utils/factory'; @@ -47,7 +48,7 @@ import { transformDataToTopologyModel } from './utils/utils'; const Topology: FC = () => { useSignals(); - + const { t } = useNMStateTranslation(); const [visualization, setVisualization] = useState(null); const [selectedNodeFilters, setSelectedNodeFilters] = useState([]); const history = useHistory(); @@ -135,6 +136,18 @@ const Topology: FC = () => { creatingPolicyNodesNames, ]); + // Re-run fit after mount to ensure correct scale when container size stabilizes (e.g. navigation from create flow) + useEffect(() => { + if (!visualization) return; + + const id = requestAnimationFrame(() => { + visualization.getGraph().fit(40); + }); + + return () => cancelAnimationFrame(id); + }, [visualization]); + + if (statesError && statesError?.response?.status === 403) return ( <> @@ -145,11 +158,11 @@ const Topology: FC = () => { ); + return ( } viewToolbar={ { /> } > - - } - hasAutoWidth - triggerRef={() => document.getElementById('legend') as HTMLButtonElement} - /> + + + } + hasAutoWidth + triggerRef={() => document.getElementById('legend') as HTMLButtonElement} + /> + ); diff --git a/src/views/nodenetworkconfiguration/components/TopologySidebar/Drawer.tsx b/src/views/nodenetworkconfiguration/components/TopologySidebar/CustomDrawer.tsx similarity index 92% rename from src/views/nodenetworkconfiguration/components/TopologySidebar/Drawer.tsx rename to src/views/nodenetworkconfiguration/components/TopologySidebar/CustomDrawer.tsx index 0fb0acaa..0c3f9ad8 100644 --- a/src/views/nodenetworkconfiguration/components/TopologySidebar/Drawer.tsx +++ b/src/views/nodenetworkconfiguration/components/TopologySidebar/CustomDrawer.tsx @@ -14,10 +14,10 @@ import PolicyDrawer from './PolicyDrawer'; type DrawerProps = { states: V1beta1NodeNetworkState[]; onClose: () => void; - onSuccess?: (message: string) => void; + onSuccess: (message: string) => void; }; -const Drawer: FC = ({ states, onClose, onSuccess }) => { +const CustomDrawer: FC = ({ states, onClose, onSuccess }) => { const params = useQueryParams(); const [resetKey, setResetKey] = useState(0); @@ -57,4 +57,4 @@ const Drawer: FC = ({ states, onClose, onSuccess }) => { return null; }; -export default Drawer; +export default CustomDrawer; diff --git a/src/views/nodenetworkconfiguration/components/TopologySidebar/InterfaceDrawer/TopologyDrawer.tsx b/src/views/nodenetworkconfiguration/components/TopologySidebar/InterfaceDrawer/TopologyDrawer.tsx new file mode 100644 index 00000000..c7565112 --- /dev/null +++ b/src/views/nodenetworkconfiguration/components/TopologySidebar/InterfaceDrawer/TopologyDrawer.tsx @@ -0,0 +1,75 @@ +import React, { FC, ReactNode, useState } from 'react'; +import { useNMStateTranslation } from 'src/utils/hooks/useNMStateTranslation'; +import { useHistory } from 'react-router'; +import { + Drawer, + DrawerContent, + DrawerContentBody, + DrawerPanelContent, + DrawerPanelBody, + Alert, + AlertVariant, + AlertActionCloseButton, +} from '@patternfly/react-core'; +import '.././TopologySidebar.scss'; +import CustomDrawer from '../CustomDrawer'; +import { V1beta1NodeNetworkState } from '@kubevirt-ui/kubevirt-api/nmstate'; +import { useLocation } from 'react-router-dom-v5-compat'; +import { CREATE_POLICY_QUERY_PARAM } from '../constants'; + +type Props = { + states: V1beta1NodeNetworkState[]; + children: ReactNode; +}; + +const TopologyDrawer: FC = ({ states, children }) => { + const { t } = useNMStateTranslation(); + const location = useLocation(); + const history = useHistory(); + const queryParams = new URLSearchParams(location.search); + + const [successMessage, setSuccessMessage] = useState(''); + + const closeDrawer = () => { + const updatedParams = new URLSearchParams(location.search); + updatedParams.delete(CREATE_POLICY_QUERY_PARAM); + history.push({ search: updatedParams.toString() }); + }; + + const isDrawerOpen = queryParams.get(CREATE_POLICY_QUERY_PARAM) === 'true'; + + return ( + + + + {successMessage && ( +
+ setSuccessMessage('')} />} + /> +
+ )} + +
+ + } + > + {children} +
+
+ ); +}; +export default TopologyDrawer; diff --git a/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.scss b/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.scss index 302172f9..be27f7af 100644 --- a/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.scss +++ b/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.scss @@ -1,25 +1,17 @@ .nmstate-topology { - &__sidebar { - left: 0; - right: auto; - - &__content { - height: 100%; - position: relative; - } - - &__success-alert { - position: absolute; - top: var(--pf-t--global--spacer--sm); - right: var(--pf-t--global--spacer--md); - z-index: 1000; - max-width: 350px; - } - } - .pf-v6-c-wizard__nav { width: 200px; } + + .pf-v6-c-drawer__panel-main { + padding-block-end: 0; + > .pf-v6-c-drawer__body { + padding-block-start: 0; + padding-block-end: 0; + padding-inline-start: 0; + padding-inline-end: 0; + } + } } .pf-topology-side-bar.nmstate-topology__sidebar.big-sidebar { diff --git a/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.tsx b/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.tsx deleted file mode 100644 index a91bc2dc..00000000 --- a/src/views/nodenetworkconfiguration/components/TopologySidebar/TopologySidebar.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { FC, useState } from 'react'; -import { useHistory } from 'react-router'; -import classNames from 'classnames'; - -import { V1beta1NodeNetworkState } from '@kubevirt-ui/kubevirt-api/nmstate'; -import { Alert, AlertActionCloseButton, AlertVariant } from '@patternfly/react-core'; -import { TopologySideBar } from '@patternfly/react-topology'; -import { isEmpty } from '@utils/helpers'; -import useQueryParams from '@utils/hooks/useQueryParams'; - -import { CREATE_POLICY_QUERY_PARAM, SELECTED_ID_QUERY_PARAM } from './constants'; -import Drawer from './Drawer'; - -import './TopologySidebar.scss'; - -type TopologySidebarProps = { - states: V1beta1NodeNetworkState[]; -}; -const TopologySidebar: FC = ({ states }) => { - const history = useHistory(); - const [successMessage, setSuccessMessage] = useState(''); - - const queryParams = useQueryParams(); - - const selectedIDExist = !isEmpty(queryParams?.[SELECTED_ID_QUERY_PARAM]); - const createPolicyDrawer = !isEmpty(queryParams?.[CREATE_POLICY_QUERY_PARAM]); - - const showSidebar = selectedIDExist || createPolicyDrawer; - - const closeDrawer = () => { - history.push({ search: new URLSearchParams({}).toString() }); - }; - - return ( - -
- {successMessage && ( -
- setSuccessMessage('')} />} - /> -
- )} - -
-
- ); -}; - -export default TopologySidebar; diff --git a/src/views/nodenetworkconfiguration/components/TopologyToolbar/TopologyToolbar.tsx b/src/views/nodenetworkconfiguration/components/TopologyToolbar/TopologyToolbar.tsx index cd5972d8..7aa668cf 100644 --- a/src/views/nodenetworkconfiguration/components/TopologyToolbar/TopologyToolbar.tsx +++ b/src/views/nodenetworkconfiguration/components/TopologyToolbar/TopologyToolbar.tsx @@ -2,7 +2,6 @@ import React, { Dispatch, FC, SetStateAction } from 'react'; import { useHistory } from 'react-router'; import { useNavigate } from 'react-router-dom-v5-compat'; import NodeNetworkConfigurationPolicyModel from 'src/console-models/NodeNetworkConfigurationPolicyModel'; - import { NodeNetworkConfigurationPolicyModelRef, NodeNetworkStateModelRef } from '@models'; import { ListPageCreateDropdown } from '@openshift-console/dynamic-plugin-sdk'; import { @@ -16,11 +15,8 @@ import { import { ListIcon } from '@patternfly/react-icons'; import { getResourceUrl } from '@utils/helpers'; import { useNMStateTranslation } from '@utils/hooks/useNMStateTranslation'; - import { CREATE_POLICY_QUERY_PARAM } from '../TopologySidebar/constants'; - import TopologyToolbarFilter from './TopologyToolbarFilter'; - import './TopologyToolbar.scss'; type TopologyToolbarProps = { @@ -29,12 +25,14 @@ type TopologyToolbarProps = { nodeNames: string[]; }; -const TopologyButton: FC = (props) => { +const TopologyToolbar: FC = ({ + setSelectedNodeFilters, + nodeNames, + selectedNodeFilters, +}) => { const { t } = useNMStateTranslation(); const navigate = useNavigate(); - const setSelectedNodeFilters = props.setSelectedNodeFilters; const history = useHistory(); - const createItems = { form: t('From Form'), yaml: t('With YAML'), @@ -66,7 +64,11 @@ const TopologyButton: FC = (props) => { > {t('Create')} - + @@ -83,4 +85,4 @@ const TopologyButton: FC = (props) => { ); }; -export default TopologyButton; +export default TopologyToolbar;