Copilot commented on code in PR #88:
URL: 
https://github.com/apache/cloudstack-kubernetes-provider/pull/88#discussion_r4044085153


##########
README.md:
##########
@@ -178,6 +178,70 @@ list, which briefly interrupts traffic on that port.
 Setting it to an empty value (`""`) sends an empty CIDR list to CloudStack — 
it does not block all
 traffic.
 
+#### 
`service.beta.kubernetes.io/cloudstack-load-balancer-stickiness-method-name`
+
+**Type:** String
+
+**Default:** Not set (no stickiness policy)
+
+**Description:** Creates a CloudStack **LB stickiness policy** on every load 
balancer rule belonging
+to the service, making the load balancer keep a client on the same backend 
node between requests.
+
+The value is the CloudStack stickiness method name and is passed through to 
CloudStack, which
+validates it against the methods the network's load balancer provider offers. 
The VirtualRouter
+(HAProxy) provider supports `LbCookie`, `AppCookie` and `SourceBased`. An 
unsupported method makes
+the service fail to sync with an `error creating stickiness policy` error.
+
+Each service port has its own load balancer rule, so a service exposing 
several ports gets one
+policy per port, all with the same method and parameters.
+
+**Use Case:** Applications that keep per-client state in the backend — a 
session held in process
+memory, for example — and therefore need successive requests from one client 
to land on the same
+node.
+
+**Example:**
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+  name: my-service
+  annotations:
+    
service.beta.kubernetes.io/cloudstack-load-balancer-stickiness-method-name: 
"LbCookie"
+    
service.beta.kubernetes.io/cloudstack-load-balancer-stickiness-method-param: 
"name=SERVERID"

Review Comment:
   This example uses `name`, but CloudStack's VirtualRouter stickiness methods 
expect the parameter key `cookie-name`; the controller passes annotation keys 
through unchanged, so this example will send an unsupported key and the service 
sync will fail. Use the actual CloudStack key here.



##########
cloudstack_loadbalancer.go:
##########
@@ -1236,6 +1372,23 @@ func getStringFromServiceAnnotation(service 
*corev1.Service, annotationKey strin
        return defaultSetting
 }
 
+// parseStickinessParams parses a comma-separated string of key=value pairs 
into a map.
+// Empty values and malformed entries are ignored.

Review Comment:
   This comment says empty values are ignored, but the implementation 
deliberately preserves `key=` values and the README documents that behavior. 
Clarify that empty entries are ignored while empty values are preserved so the 
comment does not mislead future changes.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to