Add ability to run clair against server with internally signed certs

updates
Jacob McCann 7 years ago
parent 6464a6e96e
commit b4813c342b

@ -24,7 +24,7 @@ func main() {
cli.StringFlag{ cli.StringFlag{
Name: "url", Name: "url",
Usage: "clair server URL", Usage: "clair server URL",
EnvVar: "PLUGIN_URL", EnvVar: "CLAIR_URL,PLUGIN_URL",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "username", Name: "username",
@ -41,6 +41,11 @@ func main() {
Usage: "docker image to scan with clair", Usage: "docker image to scan with clair",
EnvVar: "PLUGIN_SCAN_IMAGE", EnvVar: "PLUGIN_SCAN_IMAGE",
}, },
cli.StringFlag{
Name: "ca_cert",
Usage: "ca cert to trust",
EnvVar: "CLAIR_CA_CERT,PLUGIN_CA_CERT",
},
} }
if err := app.Run(os.Args); err != nil { if err := app.Run(os.Args); err != nil {
@ -51,13 +56,14 @@ func main() {
func run(c *cli.Context) error { func run(c *cli.Context) error {
logrus.WithFields(logrus.Fields{ logrus.WithFields(logrus.Fields{
"Revision": revision, "Revision": revision,
}).Info("Drone clair Plugin Version") }).Info("Drone Clair Plugin Version")
plugin := Plugin{ plugin := Plugin{
Url: c.String("url"), Url: c.String("url"),
Username: c.String("username"), Username: c.String("username"),
Password: c.String("password"), Password: c.String("password"),
ScanImage: c.String("scan_image"), ScanImage: c.String("scan_image"),
CaCert: c.String("ca_cert"),
} }
return plugin.Exec() return plugin.Exec()

@ -1,6 +1,7 @@
package main package main
import ( import (
"io/ioutil"
"os" "os"
"os/exec" "os/exec"
@ -13,6 +14,7 @@ type (
Username string Username string
Password string Password string
ScanImage string ScanImage string
CaCert string
} }
) )
@ -27,21 +29,40 @@ func (p Plugin) Exec() error {
os.Setenv("DOCKER_PASSWORD", p.Password) os.Setenv("DOCKER_PASSWORD", p.Password)
} }
command := exec.Command( var commands []*exec.Cmd
"klar",
p.ScanImage, if p.CaCert != "" {
) commands = append(commands, installCaCert(p.CaCert))
}
commands = append(commands, scanImage(p.ScanImage))
command.Stdout = os.Stdout for _, command := range commands {
command.Stderr = os.Stderr command.Stdout = os.Stdout
command.Stderr = os.Stderr
err := command.Run() err := command.Run()
if err != nil { if err != nil {
logrus.WithFields(logrus.Fields{ logrus.WithFields(logrus.Fields{
"error": err, "error": err,
}).Fatal("Failed to execute a command") }).Fatal("Failed to execute a command")
}
} }
return nil return nil
} }
func installCaCert(cacert string) *exec.Cmd {
ioutil.WriteFile("/usr/local/share/ca-certificates/ca_cert.crt", []byte(cacert), 0644)
return exec.Command(
"update-ca-certificates",
)
}
func scanImage(image string) *exec.Cmd {
return exec.Command(
"klar",
image,
)
}

Loading…
Cancel
Save