blob: 1f55e8090cf54322fd6883ad433d816ec655fa9c [file] [log] [blame]
package devices
import (
"fmt"
"net/http"
)
// ActsPDUConn contains all of the information necessary to communicate with the PDUs
// used in Fuchsia lab946.
type ActsPDUConn struct {
host string
username string
password string
}
// NewActsPDUConn initializes an ActsPDU object that we can use to reboot later.
func NewActsPDUConn(host, username, password string) *ActsPDUConn {
return &ActsPDUConn{host: host, username: username, password: password}
}
// Reboot uses to PDU to powercycle the given port. The port should be either 0 or 1.
func (a *ActsPDUConn) Reboot(port int) error {
if port != 0 && port != 1 {
return fmt.Errorf("port must be either 0 or 1, got %d", port)
}
req, err := http.NewRequest("GET", fmt.Sprintf("http://%s/cmd.cgi?rb=%d", a.host, port), nil)
if err != nil {
return err
}
req.SetBasicAuth(a.username, a.password)
client := &http.Client{}
if _, err := client.Do(req); err != nil {
return err
}
return nil
}