mirror of https://github.com/kubernetes/kops.git
Merge pull request #15640 from johngmyers/vfscontext
Refactor out references to global vfs.Context
This commit is contained in:
commit
5d08bc3b0a
|
|
@ -157,7 +157,7 @@ func (a *Addon) GetManifestFullUrl() (*url.URL, error) {
|
|||
return manifestURL, nil
|
||||
}
|
||||
|
||||
func (a *Addon) EnsureUpdated(ctx context.Context, k8sClient kubernetes.Interface, cmClient certmanager.Interface, pruner *Pruner, applier Applier, existingVersion *ChannelVersion) (*AddonUpdate, error) {
|
||||
func (a *Addon) EnsureUpdated(ctx context.Context, vfsContext *vfs.VFSContext, k8sClient kubernetes.Interface, cmClient certmanager.Interface, pruner *Pruner, applier Applier, existingVersion *ChannelVersion) (*AddonUpdate, error) {
|
||||
required, err := a.GetRequiredUpdates(ctx, k8sClient, cmClient, existingVersion)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -169,7 +169,7 @@ func (a *Addon) EnsureUpdated(ctx context.Context, k8sClient kubernetes.Interfac
|
|||
var merr error
|
||||
|
||||
if required.NewVersion != nil {
|
||||
err := a.updateAddon(ctx, k8sClient, pruner, applier, required)
|
||||
err := a.updateAddon(ctx, k8sClient, vfsContext, pruner, applier, required)
|
||||
if err != nil {
|
||||
merr = multierr.Append(merr, err)
|
||||
}
|
||||
|
|
@ -183,7 +183,7 @@ func (a *Addon) EnsureUpdated(ctx context.Context, k8sClient kubernetes.Interfac
|
|||
return required, merr
|
||||
}
|
||||
|
||||
func (a *Addon) updateAddon(ctx context.Context, k8sClient kubernetes.Interface, pruner *Pruner, applier Applier, required *AddonUpdate) error {
|
||||
func (a *Addon) updateAddon(ctx context.Context, k8sClient kubernetes.Interface, vfsContext *vfs.VFSContext, pruner *Pruner, applier Applier, required *AddonUpdate) error {
|
||||
manifestURL, err := a.GetManifestFullUrl()
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -192,7 +192,7 @@ func (a *Addon) updateAddon(ctx context.Context, k8sClient kubernetes.Interface,
|
|||
klog.Infof("Applying update from %q", manifestURL)
|
||||
|
||||
// We copy the manifest to a temp file because it is likely e.g. an s3 URL, which kubectl can't read
|
||||
data, err := vfs.Context.ReadFile(manifestURL.String())
|
||||
data, err := vfsContext.ReadFile(manifestURL.String())
|
||||
if err != nil {
|
||||
return fmt.Errorf("error reading manifest: %w", err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,9 +34,9 @@ type Addons struct {
|
|||
APIObject *api.Addons
|
||||
}
|
||||
|
||||
func LoadAddons(name string, location *url.URL) (*Addons, error) {
|
||||
func LoadAddons(vfsContext *vfs.VFSContext, name string, location *url.URL) (*Addons, error) {
|
||||
klog.V(2).Infof("Loading addons channel from %q", location)
|
||||
data, err := vfs.Context.ReadFile(location.String())
|
||||
data, err := vfsContext.ReadFile(location.String())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading addons from %q: %v", location, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import (
|
|||
"k8s.io/client-go/restmapper"
|
||||
"k8s.io/kops/channels/pkg/channels"
|
||||
"k8s.io/kops/util/pkg/tables"
|
||||
"k8s.io/kops/util/pkg/vfs"
|
||||
)
|
||||
|
||||
type ApplyChannelOptions struct {
|
||||
|
|
@ -97,15 +98,15 @@ func RunApplyChannel(ctx context.Context, f Factory, out io.Writer, options *App
|
|||
channelLocation := args[0]
|
||||
|
||||
// menu is the expected list of addons in the cluster and their configurations.
|
||||
menu, err := buildMenu(kubernetesVersion, channelLocation)
|
||||
menu, err := buildMenu(f.VFSContext(), kubernetesVersion, channelLocation)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot build the addon menu from args: %w", err)
|
||||
}
|
||||
|
||||
return applyMenu(ctx, menu, k8sClient, cmClient, dynamicClient, restMapper, options.Yes)
|
||||
return applyMenu(ctx, menu, f.VFSContext(), k8sClient, cmClient, dynamicClient, restMapper, options.Yes)
|
||||
}
|
||||
|
||||
func applyMenu(ctx context.Context, menu *channels.AddonMenu, k8sClient kubernetes.Interface, cmClient versioned.Interface, dynamicClient dynamic.Interface, restMapper *restmapper.DeferredDiscoveryRESTMapper, apply bool) error {
|
||||
func applyMenu(ctx context.Context, menu *channels.AddonMenu, vfsContext *vfs.VFSContext, k8sClient kubernetes.Interface, cmClient versioned.Interface, dynamicClient dynamic.Interface, restMapper *restmapper.DeferredDiscoveryRESTMapper, apply bool) error {
|
||||
// channelVersions is the list of installed addons in the cluster.
|
||||
// It is keyed by <namespace>:<addon name>.
|
||||
channelVersions, err := getChannelVersions(ctx, k8sClient)
|
||||
|
|
@ -172,7 +173,7 @@ func applyMenu(ctx context.Context, menu *channels.AddonMenu, k8sClient kubernet
|
|||
var merr error
|
||||
|
||||
for _, needUpdate := range needUpdates {
|
||||
update, err := needUpdate.EnsureUpdated(ctx, k8sClient, cmClient, pruner, applier, channelVersions[needUpdate.GetNamespace()+":"+needUpdate.Name])
|
||||
update, err := needUpdate.EnsureUpdated(ctx, vfsContext, k8sClient, cmClient, pruner, applier, channelVersions[needUpdate.GetNamespace()+":"+needUpdate.Name])
|
||||
if err != nil {
|
||||
merr = multierr.Append(merr, fmt.Errorf("updating %q: %w", needUpdate.Name, err))
|
||||
} else if update != nil {
|
||||
|
|
@ -216,7 +217,7 @@ func getChannelVersions(ctx context.Context, k8sClient kubernetes.Interface) (ma
|
|||
return channelVersions, nil
|
||||
}
|
||||
|
||||
func buildMenu(kubernetesVersion semver.Version, channelLocation string) (*channels.AddonMenu, error) {
|
||||
func buildMenu(vfsContext *vfs.VFSContext, kubernetesVersion semver.Version, channelLocation string) (*channels.AddonMenu, error) {
|
||||
menu := channels.NewAddonMenu()
|
||||
|
||||
location, err := url.Parse(channelLocation)
|
||||
|
|
@ -229,7 +230,7 @@ func buildMenu(kubernetesVersion semver.Version, channelLocation string) (*chann
|
|||
// https://raw.githubusercontent.com/kubernetes/kops/master/addons/<name>/addon.yaml
|
||||
return nil, fmt.Errorf("legacy addons are deprecated and unmaintained, use managed addons instead of %s", expanded)
|
||||
}
|
||||
o, err := channels.LoadAddons(channelLocation, location)
|
||||
o, err := channels.LoadAddons(vfsContext, channelLocation, location)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error loading channel %q: %v", location, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"k8s.io/client-go/dynamic"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/restmapper"
|
||||
"k8s.io/kops/util/pkg/vfs"
|
||||
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||
|
||||
|
|
@ -27,6 +28,7 @@ import (
|
|||
)
|
||||
|
||||
type Factory interface {
|
||||
VFSContext() *vfs.VFSContext
|
||||
KubernetesClient() (kubernetes.Interface, error)
|
||||
CertManagerClient() (certmanager.Interface, error)
|
||||
RESTMapper() (*restmapper.DeferredDiscoveryRESTMapper, error)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ import (
|
|||
)
|
||||
|
||||
// NewLegacyNodeReconciler is the constructor for a LegacyNodeReconciler
|
||||
func NewLegacyNodeReconciler(mgr manager.Manager, configPath string, identifier nodeidentity.LegacyIdentifier) (*LegacyNodeReconciler, error) {
|
||||
func NewLegacyNodeReconciler(mgr manager.Manager, vfsContext *vfs.VFSContext, configPath string, identifier nodeidentity.LegacyIdentifier) (*LegacyNodeReconciler, error) {
|
||||
r := &LegacyNodeReconciler{
|
||||
client: mgr.GetClient(),
|
||||
log: ctrl.Log.WithName("controllers").WithName("Node"),
|
||||
|
|
@ -52,7 +52,7 @@ func NewLegacyNodeReconciler(mgr manager.Manager, configPath string, identifier
|
|||
}
|
||||
r.coreV1Client = coreClient
|
||||
|
||||
configBase, err := vfs.Context.BuildVfsPath(configPath)
|
||||
configBase, err := vfsContext.BuildVfsPath(configPath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse ConfigBase %q: %v", configPath, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/hetzner"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/openstack"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/scaleway"
|
||||
"k8s.io/kops/util/pkg/vfs"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/manager"
|
||||
|
|
@ -115,6 +116,8 @@ func main() {
|
|||
os.Exit(1)
|
||||
}
|
||||
|
||||
vfsContext := vfs.NewVFSContext()
|
||||
|
||||
if opt.Server != nil {
|
||||
var verifier bootstrap.Verifier
|
||||
var err error
|
||||
|
|
@ -173,7 +176,7 @@ func main() {
|
|||
os.Exit(1)
|
||||
}
|
||||
|
||||
srv, err := server.NewServer(&opt, verifier, uncachedClient)
|
||||
srv, err := server.NewServer(vfsContext, &opt, verifier, uncachedClient)
|
||||
if err != nil {
|
||||
setupLog.Error(err, "unable to create server")
|
||||
os.Exit(1)
|
||||
|
|
@ -189,7 +192,7 @@ func main() {
|
|||
}
|
||||
}
|
||||
|
||||
if err := addNodeController(mgr, &opt); err != nil {
|
||||
if err := addNodeController(mgr, vfsContext, &opt); err != nil {
|
||||
setupLog.Error(err, "unable to create controller", "controller", "NodeController")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
|
@ -219,7 +222,7 @@ func buildScheme() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func addNodeController(mgr manager.Manager, opt *config.Options) error {
|
||||
func addNodeController(mgr manager.Manager, vfsContext *vfs.VFSContext, opt *config.Options) error {
|
||||
var legacyIdentifier nodeidentity.LegacyIdentifier
|
||||
var identifier nodeidentity.Identifier
|
||||
var err error
|
||||
|
|
@ -289,7 +292,7 @@ func addNodeController(mgr manager.Manager, opt *config.Options) error {
|
|||
return fmt.Errorf("must specify secretStore")
|
||||
}
|
||||
|
||||
nodeController, err := controllers.NewLegacyNodeReconciler(mgr, opt.ConfigBase, legacyIdentifier)
|
||||
nodeController, err := controllers.NewLegacyNodeReconciler(mgr, vfsContext, opt.ConfigBase, legacyIdentifier)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ import (
|
|||
|
||||
type Server struct {
|
||||
opt *config.Options
|
||||
certNames sets.String
|
||||
certNames sets.Set[string]
|
||||
keypairIDs map[string]string
|
||||
server *http.Server
|
||||
verifier bootstrap.Verifier
|
||||
|
|
@ -70,30 +70,29 @@ type Server struct {
|
|||
|
||||
var _ manager.LeaderElectionRunnable = &Server{}
|
||||
|
||||
func NewServer(opt *config.Options, verifier bootstrap.Verifier, uncachedClient client.Client) (*Server, error) {
|
||||
func NewServer(vfsContext *vfs.VFSContext, opt *config.Options, verifier bootstrap.Verifier, uncachedClient client.Client) (*Server, error) {
|
||||
server := &http.Server{
|
||||
Addr: opt.Server.Listen,
|
||||
TLSConfig: &tls.Config{
|
||||
MinVersion: tls.VersionTLS12,
|
||||
PreferServerCipherSuites: true,
|
||||
MinVersion: tls.VersionTLS12,
|
||||
},
|
||||
}
|
||||
|
||||
s := &Server{
|
||||
opt: opt,
|
||||
certNames: sets.NewString(opt.Server.CertNames...),
|
||||
certNames: sets.New(opt.Server.CertNames...),
|
||||
server: server,
|
||||
verifier: verifier,
|
||||
uncachedClient: uncachedClient,
|
||||
}
|
||||
|
||||
configBase, err := vfs.Context.BuildVfsPath(opt.ConfigBase)
|
||||
configBase, err := vfsContext.BuildVfsPath(opt.ConfigBase)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse ConfigBase %q: %w", opt.ConfigBase, err)
|
||||
}
|
||||
s.configBase = configBase
|
||||
|
||||
p, err := vfs.Context.BuildVfsPath(opt.SecretStore)
|
||||
p, err := vfsContext.BuildVfsPath(opt.SecretStore)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse SecretStore %q: %w", opt.SecretStore, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ import (
|
|||
"k8s.io/kops/util/pkg/vfs"
|
||||
)
|
||||
|
||||
func apply(ctx context.Context) error {
|
||||
clientset := vfsclientset.NewVFSClientset(vfs.Context, registryBase)
|
||||
func apply(vfsContext *vfs.VFSContext, ctx context.Context) error {
|
||||
clientset := vfsclientset.NewVFSClientset(vfsContext, registryBase)
|
||||
|
||||
cluster, err := clientset.GetCluster(ctx, clusterName)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,9 @@ var (
|
|||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
err := parseFlags()
|
||||
vfsContext := vfs.NewVFSContext()
|
||||
|
||||
err := parseFlags(vfsContext)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||
os.Exit(1)
|
||||
|
|
@ -59,23 +61,23 @@ func main() {
|
|||
|
||||
ctx := context.TODO()
|
||||
|
||||
err = up(ctx)
|
||||
err = up(vfsContext, ctx)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "error from up: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
err = apply(ctx)
|
||||
err = apply(vfsContext, ctx)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "error from apply: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func parseFlags() error {
|
||||
func parseFlags(vfsContext *vfs.VFSContext) error {
|
||||
var err error
|
||||
|
||||
registryBase, err = vfs.Context.BuildVfsPath(*flagRegistryBase)
|
||||
registryBase, err = vfsContext.BuildVfsPath(*flagRegistryBase)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error parsing registry path %q: %v", *flagRegistryBase, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ import (
|
|||
"k8s.io/kops/util/pkg/vfs"
|
||||
)
|
||||
|
||||
func up(ctx context.Context) error {
|
||||
clientset := vfsclientset.NewVFSClientset(vfs.Context, registryBase)
|
||||
func up(vfsContext *vfs.VFSContext, ctx context.Context) error {
|
||||
clientset := vfsclientset.NewVFSClientset(vfsContext, registryBase)
|
||||
|
||||
cluster := &api.Cluster{}
|
||||
cluster.ObjectMeta.Name = clusterName
|
||||
|
|
|
|||
|
|
@ -89,22 +89,6 @@ func (v *VFSContext) WithGCSClient(gcsClient *storage.Service) *VFSContext {
|
|||
return v2
|
||||
}
|
||||
|
||||
type contextKeyType int
|
||||
|
||||
var contextKey contextKeyType
|
||||
|
||||
func FromContext(ctx context.Context) *VFSContext {
|
||||
o := ctx.Value(contextKey)
|
||||
if o != nil {
|
||||
return o.(*VFSContext)
|
||||
}
|
||||
return Context
|
||||
}
|
||||
|
||||
func WithContext(parent context.Context, vfsContext *VFSContext) context.Context {
|
||||
return context.WithValue(parent, contextKey, vfsContext)
|
||||
}
|
||||
|
||||
type vfsOptions struct {
|
||||
backoff wait.Backoff
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue