Chapitre 5. Des plugins dynamiques
5.1. Aperçu des plugins dynamiques
5.1.1. À propos des plugins dynamiques
Les plugins dynamiques sont chargés et interprétés à partir de sources distantes à l’exécution. L’un des moyens de fournir et d’exposer des plugins dynamiques à la console est via OLM Operators. L’opérateur crée un déploiement sur la plate-forme avec un serveur HTTP pour héberger le plugin et l’expose à l’aide d’un service Kubernetes.
Les plugins dynamiques vous permettent d’ajouter des pages personnalisées et d’autres extensions à l’interface utilisateur de votre console au moment de l’exécution. La ressource personnalisée ConsolePlugin enregistre les plugins avec la console, et un administrateur de cluster active les plugins dans la configuration de l’opérateur de la console.
5.1.2. Caractéristiques clés
Le plugin dynamique vous permet d’effectuer les personnalisations suivantes au Red Hat OpenShift Service sur l’expérience AWS:
- Ajoutez des pages personnalisées.
- Ajoutez des perspectives au-delà de l’administrateur et du développeur.
- Ajoutez des éléments de navigation.
- Ajoutez des onglets et des actions aux pages de ressources.
5.1.3. Lignes directrices générales
Lors de la création de votre plugin, suivez ces directives générales:
- Les node.js et fils sont nécessaires pour construire et exécuter votre plugin.
- Le préfixe de vos noms de classe CSS avec le nom de votre plugin pour éviter les collisions. A titre d’exemple, my-plugin__heading et my-plugin_\_icon.
- Gardez un look, une sensation et un comportement cohérents avec d’autres pages de console.
Suivez les directives de localisation responsive-i18next lors de la création de votre plugin. Il est possible d’utiliser le crochet useTranslation comme celui de l’exemple suivant:
conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };
conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };
Copy to Clipboard Copied! - Évitez les sélecteurs qui pourraient affecter le balisage en dehors des composants de vos plugins, tels que les sélecteurs d’éléments. Ce ne sont pas des API et sont sujets à changement. Les utiliser pourrait casser votre plugin. Évitez les sélecteurs comme les sélecteurs d’éléments qui pourraient affecter le balisage en dehors des composants de vos plugins.
- Fournissez le type d’extension de courrier Internet multifonction JavaScript valide (MIME) en utilisant l’en-tête de réponse de type de contenu pour tous les actifs desservis par votre serveur Web plugin. Chaque déploiement de plugin doit inclure un serveur Web qui héberge les actifs générés du plugin donné.
- Créez votre plugin avec Webpack en utilisant la version 5 et ultérieure de Webpack.
- Il faut préfixer les noms de classes CSS avec le nom de votre plugin pour éviter les collisions. A titre d’exemple, my-plugin__heading et my-plugin_\_icon.
- Gardez un look, une sensation et un comportement cohérents avec d’autres pages de console.
- Évitez les sélecteurs qui pourraient affecter le balisage en dehors des composants de votre plugin, tels que les sélecteurs d’éléments. Ce ne sont pas des API et sont sujets à changement.
- Il faut fournir un type d’extension de courrier Internet polyvalent (MIME) valide à l’aide de l’en-tête de réponse de type de contenu pour tous les actifs desservis par votre serveur Web plugin. Chaque déploiement de plugin doit inclure un serveur Web qui héberge les actifs générés du plugin donné.
Lignes directrices de PatternFly
Lors de la création de votre plugin, suivez ces directives pour l’utilisation de PatternFly:
Les composants PatternFly et les variables CSS de PatternFly. Les composants Core PatternFly sont disponibles via le SDK. En utilisant des composants et des variables PatternFly, votre plugin semble cohérent dans les versions futures de la console.
- Utilisez Patternfly 4.x si vous utilisez Red Hat OpenShift Service sur les versions 4.14 et antérieures d’AWS.
- Utilisez Patternfly 5.x si vous utilisez Red Hat OpenShift Service sur AWS 4.15 ou version ultérieure.
- Accédez à votre plugin en suivant les principes d’accessibilité de PatternFly.
- Évitez d’utiliser d’autres bibliothèques CSS telles que Bootstrap ou Tailwind. Ils pourraient entrer en conflit avec PatternFly et ne pas correspondre au reste de la console. Les plugins ne doivent inclure que des styles spécifiques à leurs interfaces utilisateur à évaluer en plus des styles PatternFly de base. Évitez d’importer des styles tels que @patternfly/react-styles/*/.css ou n’importe quel style du paquet @patternfly/patternfly dans votre plugin.
- L’application console est responsable du chargement des styles de base pour toutes les versions (s) prises en charge de PatternFly.
5.1.3.1. La traduction de messages avec responsive-i18next
Le modèle de plugin montre comment vous pouvez traduire des messages avec responsive-i18next.
Conditions préalables
- Le modèle de plugin doit être cloné localement.
- Facultatif: Pour tester votre plugin localement, exécutez le Red Hat OpenShift Service sur la console web AWS dans un conteneur. Il est possible d’utiliser Docker ou Podman 3.2.0 ou plus tard.
Procédure
Le préfixe du nom avec plugin__ pour éviter tout conflit de nom. Le modèle de plugin utilise l’espace de noms plugin__console-plugin-template par défaut, et vous devez mettre à jour lorsque vous renommez votre plugin par exemple, plugin__my-plugin. Il est possible d’utiliser le crochet useTranslation, par exemple:
conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };
conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };
Copy to Clipboard Copied! ImportantIl faut faire correspondre l’espace de noms i18n au nom de la ressource ConsolePlugin.
Définissez le champ spec.i18n.loadType en fonction du comportement nécessaire.
Exemple 5.1.
plugin__console-demo-plugin
spec: backend: service: basePath: / name: console-demo-plugin namespace: console-demo-plugin port: 9001 type: Service displayName: OpenShift Console Demo Plugin i18n: loadType: Preload
spec: backend: service: basePath: / name: console-demo-plugin namespace: console-demo-plugin port: 9001 type: Service displayName: OpenShift Console Demo Plugin i18n: loadType: Preload
1 Copy to Clipboard Copied! - 1
- Charge toutes les ressources de localisation du plugin à partir de l’espace de noms i18n après le plugin dynamique pendant le chargement.
Employez le format %plugin__console-plugin-template~My Label% pour les étiquettes dans console-extensions.json. La console remplace la valeur par le message de la langue courante à partir de l’espace de noms plugin__console-plugin-template. À titre d’exemple:
{ "type": "console.navigation/section", "properties": { "id": "admin-demo-section", "perspective": "admin", "name": "%plugin__console-plugin-template~Plugin Template%" } }
{ "type": "console.navigation/section", "properties": { "id": "admin-demo-section", "perspective": "admin", "name": "%plugin__console-plugin-template~Plugin Template%" } }
Copy to Clipboard Copied! Inclure un commentaire dans un fichier TypeScript pour i18next-parser pour ajouter le message de console-extensions.json à votre catalogue de messages. À titre d’exemple:
// t('plugin__console-demo-plugin~Demo Plugin')
// t('plugin__console-demo-plugin~Demo Plugin')
Copy to Clipboard Copied! Afin de mettre à jour les fichiers JSON dans le dossier local du modèle de plugin lors de l’ajout ou de la modification d’un message, exécutez la commande suivante:
yarn i18n
$ yarn i18n
Copy to Clipboard Copied!