/
install.go
109 lines (100 loc) · 3.36 KB
/
install.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package clicmd
import (
"context"
"fmt"
"net/http"
"os"
"strings"
"github.com/google/go-containerregistry/pkg/name"
nddv1 "github.com/netw-device-driver/ndd-core/apis/pkg/v1"
nddpkg "github.com/netw-device-driver/ndd-core/internal/nddpkg"
"github.com/netw-device-driver/ndd-core/internal/version"
"github.com/pkg/errors"
"github.com/spf13/cobra"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/config"
)
const (
errPkgIdentifier = "invalid package image identifier"
errGetclient = "cannot get k8s client"
)
//var packageName string
//var providerName string
var revisionHistoryLimit int64
var PackagePullSecrets []string
var manualActivation bool
// installCmd represents the install command
var installCmd = &cobra.Command{
Use: "install",
Short: "install a ndd package",
Long: "install a ndd package for usage with the network device driver in kubernetes",
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
rap := nddv1.AutomaticActivation
if manualActivation {
rap = nddv1.ManualActivation
}
pkgName := providerName
if pkgName == "" {
ref, err := name.ParseReference(packageName)
if err != nil {
return errors.Wrap(err, errPkgIdentifier)
}
pkgName = nddpkg.ToDNSLabel(ref.Context().RepositoryStr())
}
packagePullSecrets := make([]corev1.LocalObjectReference, len(PackagePullSecrets))
for i, s := range PackagePullSecrets {
packagePullSecrets[i] = corev1.LocalObjectReference{
Name: s,
}
}
cr := &nddv1.Provider{
ObjectMeta: metav1.ObjectMeta{
Name: pkgName,
},
Spec: nddv1.ProviderSpec{
PackageSpec: nddv1.PackageSpec{
Package: packageName,
RevisionActivationPolicy: &rap,
RevisionHistoryLimit: &revisionHistoryLimit,
PackagePullSecrets: packagePullSecrets,
},
},
}
fmt.Printf("cr %v", cr)
k8sclopts := client.Options{
Scheme: scheme,
}
c, err := client.New(config.GetConfigOrDie(), k8sclopts)
if err != nil {
return errors.Wrap(warnIfNotFound(err), errGetclient)
}
if err := c.Create(context.Background(), cr); err != nil {
return errors.Wrap(warnIfNotFound(err), "cannot create provider")
}
_, err = fmt.Fprintf(os.Stdout, "%s/%s created\n", strings.ToLower(nddv1.ProviderGroupKind), pkgName)
return err
},
}
func init() {
i := make([]string, 0)
providerCmd.AddCommand(installCmd)
installCmd.PersistentFlags().StringVarP(&packageName, "PackageName", "p", "", "Image containing Provider package.")
installCmd.Flags().StringVarP(&providerName, "providerName", "n", "", "Name of Provider.")
installCmd.Flags().Int64VarP(&revisionHistoryLimit, "RevisionHistoryLimit", "r", 1, "Revision history limit.")
installCmd.Flags().BoolVarP(&manualActivation, "ManualActivation", "", false, "Enable manual revision activation policy")
installCmd.Flags().StringSliceVarP(&PackagePullSecrets, "PackagePullSecrets", "", i, "List of secrets used to pull package.")
}
func warnIfNotFound(err error) error {
serr, ok := err.(*apierrors.StatusError)
if !ok {
return err
}
if serr.ErrStatus.Code != http.StatusNotFound {
return err
}
return errors.WithMessagef(err, "kubectl-ndd plugin %s might be out of date", version.New().GetVersionString())
}