Added HostKeyCallback to sshConfig. Right now using the ssh.InsecureIgnoreHost() callback. This returns a function that in turn returns nil. Note: returning nil would result in acceptance of any host key. Hence, we need to change this to a callback of our own implementation. Fixed the command to run the throttling script. There were spacing issues. Also, using strings.Join(...) instead of adding spaces in the string (which is error prone).
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package rapl
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/pkg/errors"
|
|
elekEnv "gitlab.com/spdf/elektron/environment"
|
|
"golang.org/x/crypto/ssh"
|
|
"strings"
|
|
)
|
|
|
|
func Cap(host, username string, percentage float64) error {
|
|
|
|
if percentage > 100 || percentage < 0 {
|
|
return errors.New("Percentage is out of range")
|
|
}
|
|
|
|
sshConfig := &ssh.ClientConfig{
|
|
User: username,
|
|
Auth: []ssh.AuthMethod{
|
|
// TODO: CHANGE and MAKE THIS USE SSH KEY!!!!
|
|
ssh.Password(os.Getenv(elekEnv.RaplPassword)),
|
|
},
|
|
// TODO Do not allow accepting any host key.
|
|
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
}
|
|
|
|
connection, err := ssh.Dial("tcp", host+":22", sshConfig)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to dial")
|
|
}
|
|
|
|
session, err := connection.NewSession()
|
|
defer session.Close()
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to create session")
|
|
}
|
|
|
|
err = session.Run(strings.Join([]string{"sudo", os.Getenv(elekEnv.RaplThrottleScriptLocation),
|
|
strconv.FormatFloat(percentage, 'f', 2, 64)}, " "))
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to run RAPL script")
|
|
}
|
|
|
|
return nil
|
|
}
|