diff --git a/enhancements/hypershift/performanceprofilecontroller-node-tuning.md b/enhancements/hypershift/performanceprofilecontroller-node-tuning.md
index e9b3ec4824..e65db2a96e 100644
--- a/enhancements/hypershift/performanceprofilecontroller-node-tuning.md
+++ b/enhancements/hypershift/performanceprofilecontroller-node-tuning.md
@@ -108,7 +108,7 @@ The proposal for this output object is to use the way NTO has already put in pla
- name: will be function of the `PeformanceProfile` name
- label: `hypershift.openshift.io/tuned-config` : `true`
- label: `hypershift.openshift.io/nodePool` : `NodePool` API name where the `PeformanceProfile` which generate this `tuned` was referenced.
- - label: "hypershift.openshift.io/performanceProfileName" : `PerformanceProfile.name`,
+ - label: `hypershift.openshift.io/performanceProfileName` : `PerformanceProfile.name`,
- annotation: `hypershift.openshift.io/nodePool` : `NodePool` API namespaced name where the `PeformanceProfile` which generate this `tuned` was referenced.
- data: `Tuned` serialized object in the "tuned" key
- This will trigger the reconcile operation in NTO for these kind of objects.
@@ -122,7 +122,7 @@ The proposal for this output object is to use the way NTO has already put in pla
- name: will be function of the `PeformanceProfile` name
- label: `hypershift.openshift.io/nto-generated-machine-config` : `true`
- label: `hypershift.openshift.io/nodePool` : `NodePool` API name where the `PeformanceProfile` which generate this `MachineConfig` was referenced.
- - label: "hypershift.openshift.io/performanceProfileName" : `PerformanceProfile.name`,
+ - label: `hypershift.openshift.io/performanceProfileName` : `PerformanceProfile.name`,
- annotation: `hypershift.openshift.io/nodePool` : `NodePool` API namespaced name where the `PeformanceProfile` which generate this `MachineConfig` was referenced.
- data: `MachineConfig` serialized object in the "config" key
- This will trigger the reconcile operation in NodePool Controller for these objects.
@@ -136,7 +136,7 @@ Being this object also handled by MachineConfig Operator (MCO) as `MachineConfig
- name: will be function of the `PeformanceProfile` name
- label: `hypershift.openshift.io/nto-generated-kubelet-config` : `true`
- label: `hypershift.openshift.io/nodePool` : `NodePool` API name where the `PeformanceProfile` which generate this `MachineConfig` was referenced.
- - label: "hypershift.openshift.io/performanceProfileName" : `PerformanceProfile.name`,
+ - label: `hypershift.openshift.io/performanceProfileName` : `PerformanceProfile.name`,
- annotation: `hypershift.openshift.io/nodePool` : `NodePool` API namespaced name where the `PeformanceProfile` which generate this `MachineConfig` was referenced.
- data: `KubeletConfig` serialized object in the "config" key
- This will trigger the reconcile operation in NodePool Controller for these objects.
@@ -145,7 +145,88 @@ Being this object also handled by MachineConfig Operator (MCO) as `MachineConfig
The proposal is to handle these objects like NTO handles its `tuned` configurations once they are in the `hosted-control-plane-namespace`, that is synchronize them directly with the ones in the hosted cluster using the proper KubeConfig.
-#### Diagram
+### Workflow Diagram
+
+```mermaid
+graph LR;
+ StartHere((Start Here))
+ StartHere--> ClusterServiceCustomer
+ subgraph management-cluster
+ ClusterServiceCustomer[Cluster Service Customer]
+ PP_ConfigMap(ConfigMap
name:PPConfigMap
tuned: PerformanceProfile)
+
+ NodePool_A(NodePool
spec.tunedConfig: PPConfigMap)
+ subgraph hypershift
+ NodePoolController[NodePool Controller]
+ end
+ subgraph user-clusters
+ ClusterServiceCustomer ==>|0:Creates|PP_ConfigMap
+ ClusterServiceCustomer ==>|1:References|NodePool_A
+ PP_ConfigMap-. 1:is referenced by .->NodePool_A
+ end
+
+ subgraph hosted-control-plane-namespace
+ NodePoolController ==>|2:Propagate|PP_ConfigMap(ConfigMap
name:PPConfigMap
tuned: PerformanceProfile)
+ NodePoolController ==>|3:Add label|PP_ConfigMap_01(ConfigMap
name:PPConfigMap
tuned: PerformanceProfile
label:hypershift.openshift.io/performanceprofile-config=true)
+ PP_ConfigMap-. 2:is moved to .->PP_ConfigMap_01
+ PPController[PerformanceProfile controller]==>|4:Watch|PP_ConfigMap_01
+ PPController==>|5:Extract|PP_01(PerformanceProfile)
+ PPController-->|6:Creates|MC_01(MachineConfig)
+ PPController-->|6:Creates|KC_01(KubeletConfig)
+ PPController-->|6:Creates|Tuned_01(Tuned)
+ PPController-->|6:Creates|RTC_01(RuntimeClass)
+ PP_01-. generates .->MC_01
+ PP_01-. generates .->KC_01
+ PP_01-. generates .->Tuned_01
+ PP_01-. generates .->RTC_01
+ %%Note>note: addinfo here]-.-PP_01
+
+ PPController-->|7:Creates and Embed|Tuned_CM(ConfigMap
name:func_of_PerformanceProfile_name
label:`hypershift.openshift.io/tuned-config` : `true`
label: `hypershift.openshift.io/performanceProfileName` : `PerformanceProfile.name`
label: `hypershift.openshift.io/nodePool` : `NodePool` API name
tuned: < serialized tuned object >)
+ Tuned_01-. embedded into .-Tuned_CM
+
+ PPController-->|7:Creates and Embed|MC_CM(ConfigMap
name:func_of_PerformanceProfile_name
label:`hypershift.openshift.io/nto-generated-machine-config` : `true`
label: `hypershift.openshift.io/performanceProfileName` : `PerformanceProfile.name`
label: `hypershift.openshift.io/nodePool` : `NodePool` API name
data.config: < serialized MachineConfig object >)
+ MC_01-. embedded into .-MC_CM
+
+ PPController-->|7:Creates and Embed|KC_CM(ConfigMap
name:func_of_PerformanceProfile_name
label:`hypershift.openshift.io/nto-generated-kubelet-config` : `true` : `true`
label: `hypershift.openshift.io/performanceProfileName` : `PerformanceProfile.name`
label: `hypershift.openshift.io/nodePool` : `NodePool` API name
data.config: < serialized KubeletConfig object >)
+ KC_01-. embedded into .-KC_CM
+
+
+
+
+ NTO[Node Tuning Operator]-->|8:Reconcile|Tuned_CM
+ NodePoolController -->|8:Reconcile|MC_CM
+ NodePoolController -->|8:Reconcile|KC_CM
+ end
+ end
+ subgraph guest-cluster
+ PPController-->|7:Writes|RTC_02(RunttimeClass)
+ RTC_01-. 7:is written .-RTC_02
+ end
+
+classDef actor fill:#c96,stroke:#333,stroke-width:6px
+classDef object_prim fill:#9c6,stroke:#333,stroke-width:4px
+classDef object_sec fill:#999,stroke:#333,stroke-width:2px
+classDef starthere fill:#f55,stroke:#333,stroke-width:2px
+
+class PPController,NodePoolController,ClusterServiceCustomer,NTO actor
+
+class PP_01,RTC_01,RTC_02,MC_01,KC_01,Tuned_01,NodePool_A object_prim
+
+class PP_ConfigMap,PP_ConfigMap_01,Tuned_CM,KC_CM,MC_CM object_sec
+
+class StartHere starthere
+
+subgraph leyend
+ AcTor[Process or external actor]
+ PrimObj(Primary Object: objects with the actual information needed)
+ SecObj(Secondary Object: those used to wrap other objects or just a way to adapt something to hypershift)
+end
+class AcTor actor
+class PrimObj object_prim
+class SecObj object_sec
+```
+
+#### Static Diagram
This diagram shows all the objects handle by PerformanceProfile and the Configmaps used to embed those objects with all the labels and annotations used to handle the relationships between them.
```mermaid