|
|
|
@ -34,6 +34,7 @@ import (
|
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
|
v1 "k8s.io/api/core/v1"
|
|
|
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
|
|
|
"k8s.io/apimachinery/pkg/api/meta"
|
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
|
"k8s.io/cli-runtime/pkg/resource"
|
|
|
|
|
"sigs.k8s.io/yaml"
|
|
|
|
@ -164,22 +165,38 @@ func (i *Install) installCRDs(crds []chart.CRD) error {
|
|
|
|
|
totalItems = append(totalItems, res...)
|
|
|
|
|
}
|
|
|
|
|
if len(totalItems) > 0 {
|
|
|
|
|
// Invalidate the local cache, since it will not have the new CRDs
|
|
|
|
|
// present.
|
|
|
|
|
// Give time for the CRD to be recognized.
|
|
|
|
|
if err := i.cfg.KubeClient.Wait(totalItems, 60*time.Second); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If we have already gathered the capabilities, we need to invalidate
|
|
|
|
|
// the cache so that the new CRDs are recognized. This should only be
|
|
|
|
|
// the case when an action configuration is reused for multiple actions,
|
|
|
|
|
// as otherwise it is later loaded by ourselves when getCapabilities
|
|
|
|
|
// is called later on in the installation process.
|
|
|
|
|
if i.cfg.Capabilities != nil {
|
|
|
|
|
discoveryClient, err := i.cfg.RESTClientGetter.ToDiscoveryClient()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i.cfg.Log("Clearing discovery cache")
|
|
|
|
|
discoveryClient.Invalidate()
|
|
|
|
|
// Give time for the CRD to be recognized.
|
|
|
|
|
|
|
|
|
|
if err := i.cfg.KubeClient.Wait(totalItems, 60*time.Second); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
_, _ = discoveryClient.ServerGroups()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Make sure to force a rebuild of the cache.
|
|
|
|
|
discoveryClient.ServerGroups()
|
|
|
|
|
// Invalidate the REST mapper, since it will not have the new CRDs
|
|
|
|
|
// present.
|
|
|
|
|
restMapper, err := i.cfg.RESTClientGetter.ToRESTMapper()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if resettable, ok := restMapper.(meta.ResettableRESTMapper); ok {
|
|
|
|
|
i.cfg.Log("Clearing REST mapper cache")
|
|
|
|
|
resettable.Reset()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|