@@ -438,3 +438,49 @@ func ChangeProvisionState(client *gophercloud.ServiceClient, id string, opts Pro
438438 })
439439 return
440440}
441+
442+ type TargetPowerState string
443+
444+ // TargetPowerState is used when changing the power state of a node.
445+ const (
446+ PowerOn TargetPowerState = "power on"
447+ PowerOff = "power off"
448+ Rebooting = "rebooting"
449+ SoftPowerOff = "soft power off"
450+ SoftRebooting = "soft rebooting"
451+ )
452+
453+ // PowerStateOptsBuilder allows extensions to add additional parameters to the ChangePowerState request.
454+ type PowerStateOptsBuilder interface {
455+ ToPowerStateMap () (map [string ]interface {}, error )
456+ }
457+
458+ // PowerStateOpts for a request to change a node's power state.
459+ type PowerStateOpts struct {
460+ Target TargetPowerState `json:"target" required:"true"`
461+ Timeout int `json:"timeout,omitempty"`
462+ }
463+
464+ // ToPowerStateMap assembles a request body based on the contents of a PowerStateOpts.
465+ func (opts PowerStateOpts ) ToPowerStateMap () (map [string ]interface {}, error ) {
466+ body , err := gophercloud .BuildRequestBody (opts , "" )
467+ if err != nil {
468+ return nil , err
469+ }
470+
471+ return body , nil
472+ }
473+
474+ // Request to change a Node's power state.
475+ func ChangePowerState (client * gophercloud.ServiceClient , id string , opts PowerStateOptsBuilder ) (r ChangePowerStateResult ) {
476+ reqBody , err := opts .ToPowerStateMap ()
477+ if err != nil {
478+ r .Err = err
479+ return
480+ }
481+
482+ _ , r .Err = client .Put (powerStateURL (client , id ), reqBody , nil , & gophercloud.RequestOpts {
483+ OkCodes : []int {202 },
484+ })
485+ return
486+ }
0 commit comments