/
installpackages.go
113 lines (95 loc) 路 3.6 KB
/
installpackages.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
110
111
112
113
package cmd
import (
"context"
"fmt"
"log"
"github.com/spf13/cobra"
"github.com/aws/eks-anywhere/pkg/curatedpackages"
"github.com/aws/eks-anywhere/pkg/kubeconfig"
)
type installPackageOptions struct {
kubeVersion string
clusterName string
packageName string
registry string
customConfigs []string
// kubeConfig is an optional kubeconfig file to use when querying an
// existing cluster.
kubeConfig string
bundlesOverride string
}
var ipo = &installPackageOptions{}
func init() {
installCmd.AddCommand(installPackageCommand)
installPackageCommand.Flags().StringVar(&ipo.kubeVersion, "kube-version", "",
"Kubernetes Version of the cluster to be used. Format <major>.<minor>")
installPackageCommand.Flags().StringVarP(&ipo.packageName, "package-name", "n",
"", "Custom name of the curated package to install")
installPackageCommand.Flags().StringVar(&ipo.registry, "registry",
"", "Used to specify an alternative registry for discovery")
installPackageCommand.Flags().StringArrayVar(&ipo.customConfigs, "set",
[]string{}, "Provide custom configurations for curated packages. Format key:value")
installPackageCommand.Flags().StringVar(&ipo.kubeConfig, "kubeconfig", "",
"Path to an optional kubeconfig file to use.")
installPackageCommand.Flags().StringVar(&ipo.clusterName, "cluster", "",
"Target cluster for installation.")
installPackageCommand.Flags().StringVar(&ipo.bundlesOverride, "bundles-override", "",
"Override default Bundles manifest (not recommended)")
if err := installPackageCommand.MarkFlagRequired("package-name"); err != nil {
log.Fatalf("marking package-name flag as required: %s", err)
}
if err := installPackageCommand.MarkFlagRequired("cluster"); err != nil {
log.Fatalf("marking cluster flag as required: %s", err)
}
}
var installPackageCommand = &cobra.Command{
Use: "package [flags] package",
Short: "Install package",
Long: "This command is used to Install a curated package. Use list to discover curated packages",
PreRunE: preRunPackages,
SilenceUsage: true,
RunE: runInstallPackages,
Args: func(cmd *cobra.Command, args []string) error {
if err := cobra.ExactArgs(1)(cmd, args); err == nil {
return nil
}
return fmt.Errorf("The name of the package to install must be specified as an argument")
},
}
func runInstallPackages(cmd *cobra.Command, args []string) error {
if err := curatedpackages.ValidateKubeVersion(ipo.kubeVersion, ipo.clusterName); err != nil {
return err
}
return installPackages(cmd.Context(), args)
}
func installPackages(ctx context.Context, args []string) error {
kubeConfig, err := kubeconfig.ResolveAndValidateFilename(ipo.kubeConfig, "")
if err != nil {
return err
}
deps, err := NewDependenciesForPackages(ctx, WithRegistryName(ipo.registry), WithKubeVersion(ipo.kubeVersion), WithMountPaths(kubeConfig), WithBundlesOverride(ipo.bundlesOverride))
if err != nil {
return fmt.Errorf("unable to initialize executables: %v", err)
}
bm := curatedpackages.CreateBundleManager(deps.Logger)
b := curatedpackages.NewBundleReader(kubeConfig, ipo.clusterName, deps.Kubectl, bm, deps.BundleRegistry)
bundle, err := b.GetLatestBundle(ctx, ipo.kubeVersion)
if err != nil {
return err
}
packages := curatedpackages.NewPackageClient(
deps.Kubectl,
curatedpackages.WithBundle(bundle),
curatedpackages.WithCustomConfigs(ipo.customConfigs),
)
p, err := packages.GetPackageFromBundle(args[0])
if err != nil {
return err
}
curatedpackages.PrintLicense()
err = packages.InstallPackage(ctx, p, ipo.packageName, ipo.clusterName, kubeConfig)
if err != nil {
return err
}
return nil
}