@@ -163,6 +163,49 @@ func createLoadBalancer(settings string) (*HostComputeLoadBalancer, error) {
163163 return & outputLoadBalancer , nil
164164}
165165
166+ func updateLoadBalancer (loadbalancerId string , settings string ) (* HostComputeLoadBalancer , error ) {
167+ loadBalancerGuid , err := guid .FromString (loadbalancerId )
168+ if err != nil {
169+ return nil , errInvalidLoadBalancerID
170+ }
171+ // Update loadBalancer.
172+ var (
173+ loadBalancerHandle hcnLoadBalancer
174+ resultBuffer * uint16
175+ propertiesBuffer * uint16
176+ )
177+ hr := hcnOpenLoadBalancer (& loadBalancerGuid , & loadBalancerHandle , & resultBuffer )
178+ if err := checkForErrors ("hcnOpenLoadBalancer" , hr , resultBuffer ); err != nil {
179+ return nil , err
180+ }
181+ hr = hcnModifyLoadBalancer (loadBalancerHandle , settings , & resultBuffer )
182+ if err := checkForErrors ("hcnModifyLoadBalancer" , hr , resultBuffer ); err != nil {
183+ return nil , err
184+ }
185+ // Query loadBalancer.
186+ hcnQuery := defaultQuery ()
187+ query , err := json .Marshal (hcnQuery )
188+ if err != nil {
189+ return nil , err
190+ }
191+ hr = hcnQueryLoadBalancerProperties (loadBalancerHandle , string (query ), & propertiesBuffer , & resultBuffer )
192+ if err := checkForErrors ("hcnQueryLoadBalancerProperties" , hr , resultBuffer ); err != nil {
193+ return nil , err
194+ }
195+ properties := interop .ConvertAndFreeCoTaskMemString (propertiesBuffer )
196+ // Close loadBalancer.
197+ hr = hcnCloseLoadBalancer (loadBalancerHandle )
198+ if err := checkForErrors ("hcnCloseLoadBalancer" , hr , nil ); err != nil {
199+ return nil , err
200+ }
201+ // Convert output to HostComputeLoadBalancer
202+ var outputLoadBalancer HostComputeLoadBalancer
203+ if err := json .Unmarshal ([]byte (properties ), & outputLoadBalancer ); err != nil {
204+ return nil , err
205+ }
206+ return & outputLoadBalancer , nil
207+ }
208+
166209func deleteLoadBalancer (loadBalancerID string ) error {
167210 loadBalancerGUID , err := guid .FromString (loadBalancerID )
168211 if err != nil {
@@ -237,6 +280,23 @@ func (loadBalancer *HostComputeLoadBalancer) Create() (*HostComputeLoadBalancer,
237280 return loadBalancer , nil
238281}
239282
283+ // Update Loadbalancer.
284+ func (loadBalancer * HostComputeLoadBalancer ) Update (hnsLoadbalancerID string ) (* HostComputeLoadBalancer , error ) {
285+ logrus .Debugf ("hcn::HostComputeLoadBalancer::Create id=%s" , hnsLoadbalancerID )
286+
287+ jsonString , err := json .Marshal (loadBalancer )
288+ if err != nil {
289+ return nil , err
290+ }
291+
292+ logrus .Debugf ("hcn::HostComputeLoadBalancer::Update JSON: %s" , jsonString )
293+ loadBalancer , hcnErr := updateLoadBalancer (hnsLoadbalancerID , string (jsonString ))
294+ if hcnErr != nil {
295+ return nil , hcnErr
296+ }
297+ return loadBalancer , nil
298+ }
299+
240300// Delete LoadBalancer.
241301func (loadBalancer * HostComputeLoadBalancer ) Delete () error {
242302 logrus .Debugf ("hcn::HostComputeLoadBalancer::Delete id=%s" , loadBalancer .Id )
0 commit comments