Merge pull request #15640 from johngmyers/vfscontext

Refactor out references to global vfs.Context
This commit is contained in:
Kubernetes Prow Robot 2023-07-17 09:15:19 -07:00 committed by GitHub
commit 5d08bc3b0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 41 additions and 50 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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 {

View File

@ -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)
}

View File

@ -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

View File

@ -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
}