WIP: Add support for profiles #25
Closed
letian
wants to merge 1 commits from
runtime-profiles into master
pull from: runtime-profiles
merge into: NationTech:master
NationTech:master
NationTech:feat/openwebui
NationTech:feat/iot-walking-skeleton
NationTech:feat/iot-aggregation-scale
NationTech:feat/add-new-node
NationTech:feat/iot-operator-helm-chart
NationTech:feat/removesideeffect
NationTech:feat/test-alert-receivers-sttest
NationTech:feat/brocade-client-add-vlans
NationTech:feat/agent-desired-state
NationTech:feat/opnsense-dns-implementation
NationTech:feat/named-config-instances
NationTech:worktree-bridge-cse_012j1jB37XfjXvDGHUjHrKSj
NationTech:chore/leftover-adr
NationTech:feat/config_e2e_zitadel_openbao
NationTech:example/vllm
NationTech:feat/config_sqlite
NationTech:chore/roadmap
NationTech:feature/kvm-module
NationTech:feat/rustfs
NationTech:feat/harmony_assets
NationTech:feat/brocade_assisted_setup
NationTech:feat/cluster_alerting_score
NationTech:e2e-tests-multicluster
NationTech:fix/refactor_alert_receivers
NationTech:feat/change-node-readiness-strategy
NationTech:feat/zitadel
NationTech:feat/improve-inventory-discovery
NationTech:fix/monitoring_abstractions_openshift
NationTech:feat/nats-jetstream
NationTech:adr-nats-creds
NationTech:feat/st_test
NationTech:feat/dockerAutoinstall
NationTech:chore/cleanup_hacluster
NationTech:doc/cert-management
NationTech:feat/certificate_management
NationTech:adr/017-staleness-failover
NationTech:fix/nats_non_root
NationTech:feat/rebuild_inventory
NationTech:fix/opnsense_update
NationTech:feat/unshedulable_control_planes
NationTech:feat/worker_okd_install
NationTech:doc-and-braindump
NationTech:fix/pxe_install
NationTech:switch-client
NationTech:okd_enable_user_workload_monitoring
NationTech:configure-switch
NationTech:fix/clippy
NationTech:feat/gen-ca-cert
NationTech:feat/okd_default_ingress_class
NationTech:fix/add_routes_to_domain
NationTech:secrets-prompt-editor
NationTech:feat/multisiteApplication
NationTech:feat/ceph-install-score
NationTech:feat/ceph-osd-score
NationTech:feat/ceph_validate_health
NationTech:better-indicatif-progress-grouped
NationTech:feat/crd-alertmanager-configs
NationTech:better-cli
NationTech:opnsense_upgrade
NationTech:feat/monitoring-application-feature
NationTech:dev/postgres
NationTech:feat/cd/localdeploymentdemo
NationTech:feat/webhook_receiver
NationTech:feat/kube-prometheus
NationTech:feat/init_k8s_tenant
NationTech:feat/discord-webhook-receiver
NationTech:feat/kube-prometheus-monitor
NationTech:feat/tenantScore
NationTech:feat/teams-integration
NationTech:feat/slack-notifs
NationTech:monitoring
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "runtime-profiles"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Here's a first draft regarding the support of profiles.
It's quite simple & flexible, but something bugs me with the fact that the profile names are plain strings.
Related to NationTech/Team#85
50ca69c02cto814c37d711@@ -78,8 +104,9 @@ impl<T: Topology + K8sclient> Interpret<T> for LAMPInterpret {info!("LAMP deployment_score {deployment_score:?}");todo!();deployment_score.apply_profile(profile)I'm not a big fan of this because it introduces a temporal coupling. We have to remember to call it before creating our interpret otherwise we're screwed.
I'll check for another solution.
Without mentioning it at all, Gemini have the same concerns I have 😆
Weaknesses and Concerns:
814c37d711tof80c1dd711f80c1dd711to2f7c4924c1Voir mes commentaires, il faut en discuter davantage. Je n'ai pas l'impression que c'est la bonne approche.
@@ -17,6 +18,10 @@ async fn main() {project_root: "./php".into(),..Default::default()},profiles: HashMap::from([On ne veut pas donner la tache de setup du profil a l'utilisateur du Score.
L'utilisateur du Score ne devrait pas etre au courant que les profils existent a ce niveau. Lorsqu'il ouvre l'implementation d'un score il peut voir quelles differences sont faites d'un profil a l'autre, mais comme c'est suggéré ici ça ne correspond pas à l'objectif initial :
Comme le propose le projet score-spec, les configurations doivent être exactement la même pour le développeur (ici, celui qui écrit le code du fichier
examples/lamp/src/main.rs) . La plateforme ensuite va déployer la configuration demandée automatiquement.Il faut bien garder en tête que c'est le rôle de la plateforme elle-même d'offrir une fonctionnalité de déploiement standard et d'implémenter les fonctionnalités qui correspondent à son profil à elle.
Donc, l'implémentation interne du Score/Interpret peut fournir de l'information sur comment déployer/orchestrer son workload selon différents profils standards, et la plateforme elle même ira consulter le score pour voir quelle configuration doit être appliquée selon son profil à elle.
Aussi, la plateforme fournira une implémentation par défaut et de l'instrumentation automatique selon son implémentation spécifique pour les différents profils. Par exemple, une plateforme de profil PROD pourrait être en single-availability-zone et une autre en mode "warm-failover" et une autre en "decentralized", mais la configuration haut niveau du Score ne doit pas changer d'une implémentation à l'autre.
Donc, fournir un nouveau champ
profiles: HashMapne me semble pas convenir. Je ne suis pas totalement certain par contre.Dans ce cas, ca semble toucher 2 aspects differents en fait:
Sauf qu'en ce moment, pour le point 2, ca se ferait directement dans l'implementation
Interpret::executedu Score. Ce qui, par extension, force dans cette PR a pousser leprofilea la fois dans leapply_profile(oucreate_interpretsi on veut regler le probleme de temporal coupling) et dans leInterpret::execute. Ce qui est en fait un beau gros smell d'un plus grand probleme de design.Actuellement, les Score cachent a l'interieur de l'execute le fait qu'ils vont utiliser d'autres Score et que ces Score la pourraient avoir besoin du resultat d'eux meme ou d'un autre score.
Exemple:
En ce moment, cela fonctionne car c'est a petite echelle et on a peu de Score qui se reutilisent les uns et les autres. Mais, ca va vite devenir un gros probleme.
Il faudrait donc etre capable de vraiment separer le process en deux etapes:
Tout ceci aurait l'avantage de pouvoir faire comme Terraform avec des dry-run et exprimer un "plan de match" de comment le workload va etre deploye/orchestre.
Il y a encore de la reflexion a avoir sur comment tout ca peut etre design, mais ca serait a faire plus tot que plus tard puisque les smells commencent a sortir de plus en plus.
@@ -18,2 +19,4 @@..Default::default()},profiles: HashMap::from([("dev", LAMPProfile { ssl_enabled: false }),Pourrait etre un enum :
@@ -40,0 +48,4 @@fn apply_profile(&self, profile: &String) -> Box<dyn Score<T>> {let profile = match self.profiles.get(profile.as_str()) {Some(profile) => profile,None => panic!("Not good"), // TODO: better handlinginstead of panic!() // TODO just use
todo!("comment here");@@ -37,6 +45,23 @@ impl Default for LAMPConfig {}impl<T: Topology + K8sclient> Score<T> for LAMPScore {fn apply_profile(&self, profile: &String) -> Box<dyn Score<T>> {Je n'ai pas le temps de le faire maintenant, mais pour regler le probleme de temporal coupling que cette methode introduit, il faudrait simplement a la supprimer et reutiliser
create_interpretpour y mettre la logique de merge la config avec le profile avant de creer l'interpret.Pull request closed