🎉
This commit is contained in:
134
main.go
Normal file
134
main.go
Normal file
@@ -0,0 +1,134 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"drone-kubernetes/k8s"
|
||||
"fmt"
|
||||
"github.com/urfave/cli/v2"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := &cli.App{
|
||||
Name: "drone-kubernetes",
|
||||
Usage: "Drone plugin to deploy to kubernetes",
|
||||
}
|
||||
|
||||
app.Action = run
|
||||
|
||||
app.Flags = []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Required: true,
|
||||
Name: "k8s_host",
|
||||
Usage: "k8s ip+port or domain",
|
||||
EnvVars: []string{"PLUGIN_K8S_HOST"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Required: true,
|
||||
Name: "k8s_auth_type",
|
||||
Usage: "k8s auth type example: token,config",
|
||||
EnvVars: []string{"PLUGIN_K8S_AUTH_TYPE"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "k8s_auth_config",
|
||||
Usage: "k8s auth config",
|
||||
EnvVars: []string{"PLUGIN_K8S_AUTH_CONFIG"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "k8s_auth_token",
|
||||
Usage: "k8s auth token",
|
||||
EnvVars: []string{"PLUGIN_K8S_AUTH_TOKEN"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "k8s_auth_ca_crt",
|
||||
Usage: "k8s auth ca crt",
|
||||
EnvVars: []string{"PLUGIN_K8S_AUTH_CA_CRT"},
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "k8s_auth_skip_tls",
|
||||
Usage: "k8s auth skip tls",
|
||||
EnvVars: []string{"PLUGIN_K8S_AUTH_SKIP_TLS"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Required: true,
|
||||
Name: "k8s_namespace",
|
||||
Usage: "k8s namespace example: default",
|
||||
DefaultText: "default",
|
||||
EnvVars: []string{"PLUGIN_K8S_NAMESPACE"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Required: true,
|
||||
Name: "kind",
|
||||
Usage: "workload type,example: deployment,service...",
|
||||
EnvVars: []string{"PLUGIN_KIND"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Required: true,
|
||||
Name: "resource_name",
|
||||
Usage: "resource name,example: deployments name pod name",
|
||||
EnvVars: []string{"PLUGIN_RESOURCE_NAME"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Required: true,
|
||||
Name: "action_method",
|
||||
Aliases: []string{"acm"},
|
||||
Usage: "workload action method,example: create,update,delete,restart...",
|
||||
EnvVars: []string{"PLUGIN_ACTION_METHOD"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "repo",
|
||||
Usage: "repo",
|
||||
EnvVars: []string{"PLUGIN_REPO"},
|
||||
},
|
||||
}
|
||||
|
||||
// 启动
|
||||
err := app.Run(os.Args)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func run(c *cli.Context) error {
|
||||
|
||||
authType := c.String("k8s_auth_type")
|
||||
authConfig := c.String("k8s_auth_config")
|
||||
authToken := c.String("k8s_auth_token")
|
||||
|
||||
if (authType != "") && (authConfig == "" && authToken == "") {
|
||||
return cli.Exit("auth token or auth config not empty", 1)
|
||||
}
|
||||
|
||||
if c.String("action_method") == "update" {
|
||||
if c.String("repo") == "" {
|
||||
return cli.Exit("repo not empty", 1)
|
||||
}
|
||||
}
|
||||
|
||||
k8sConf, err := k8s.NewConfig(
|
||||
k8s.WithHost(c.String("k8s_host")),
|
||||
k8s.WithAuthType(c.String("k8s_auth_type")),
|
||||
k8s.WithConfig(c.String("k8s_auth_config")),
|
||||
k8s.WithToken(c.String("k8s_auth_token")),
|
||||
k8s.WithCaCrt(c.String("k8s_auth_ca_crt")),
|
||||
k8s.WithIsSkipTls(c.Bool("k8s_auth_skip_tls")),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client, err := k8sConf.Client()
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("k8s client error: ", err.Error())
|
||||
return cli.Exit("k8s client error", 1)
|
||||
}
|
||||
|
||||
if err = client.Do(c.String("k8s_namespace"), c.String("kind"), c.String("resource_name"), c.String("action_method"), c.String("repo")); err != nil {
|
||||
return cli.Exit(err.Error(), 1)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user