mirror of https://github.com/knative/func.git
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package kubectl
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/boson-project/faas"
|
|
"github.com/boson-project/faas/k8s"
|
|
)
|
|
|
|
// Remover implemented using the kubectl binary.
|
|
type Remover struct {
|
|
// Verbose logging.
|
|
Verbose bool
|
|
}
|
|
|
|
// NewRemover creates an instance of the kubectl-based deployer.
|
|
func NewRemover() *Remover {
|
|
return &Remover{}
|
|
}
|
|
|
|
// Remove the named service.
|
|
// Name is expected
|
|
func (d *Remover) Remove(name string) (err error) {
|
|
// assert kubectl
|
|
if _, err = exec.LookPath("kubectl"); err != nil {
|
|
err = errors.New("please install 'kubectl'")
|
|
return
|
|
}
|
|
|
|
// Convert the project name proper (a valid domain) to how it is being
|
|
// represented: as a kubernetes and docker valid name (RFC1035 label)
|
|
serviceName, err := k8s.ToSubdomain(name)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// Command to run
|
|
cmd := exec.Command("kubectl", "delete", "kservice", serviceName, "--namespace", faas.DefaultNamespace)
|
|
|
|
// If verbose logging is enabled, echo appsody's chatty stdout.
|
|
if d.Verbose {
|
|
fmt.Println(cmd)
|
|
cmd.Stdout = os.Stdout
|
|
}
|
|
|
|
// Capture stderr for echoing on failure.
|
|
var stderr bytes.Buffer
|
|
cmd.Stderr = &stderr
|
|
|
|
// Run the command, echoing captured stderr as well as the cmd internal error.
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
err = fmt.Errorf("%v. %v", stderr.String(), err.Error())
|
|
}
|
|
return
|
|
}
|