Use Kubernetes API instead of API group
This commit is contained in:
		
							parent
							
								
									ec3f24c3ee
								
							
						
					
					
						commit
						fd449342e5
					
				|  | @ -50,6 +50,9 @@ func ControllerConfig() *controller.Config { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	restClient, err := k8sutil.KubernetesRestClient(restConfig) | 	restClient, err := k8sutil.KubernetesRestClient(restConfig) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Fatalf("Can't create rest client: %s", err) | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	return &controller.Config{ | 	return &controller.Config{ | ||||||
| 		KubeClient: client, | 		KubeClient: client, | ||||||
|  |  | ||||||
|  | @ -20,13 +20,13 @@ import ( | ||||||
| 
 | 
 | ||||||
| func (c *Controller) clusterListFunc(options api.ListOptions) (runtime.Object, error) { | func (c *Controller) clusterListFunc(options api.ListOptions) (runtime.Object, error) { | ||||||
| 	c.logger.Info("Getting list of currently running clusters") | 	c.logger.Info("Getting list of currently running clusters") | ||||||
| 	object, err := c.RestClient.Get(). | 
 | ||||||
| 		Namespace(c.opConfig.Namespace). | 	req := c.RestClient.Get(). | ||||||
| 		Resource(constants.ResourceName). | 		RequestURI(fmt.Sprintf(constants.ListClustersURITemplate, c.opConfig.Namespace)). | ||||||
| 		VersionedParams(&options, api.ParameterCodec). | 		VersionedParams(&options, api.ParameterCodec). | ||||||
| 		FieldsSelectorParam(fields.Everything()). | 		FieldsSelectorParam(fields.Everything()) | ||||||
| 		Do(). | 
 | ||||||
| 		Get() | 	object, err := req.Do().Get() | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("Can't get list of postgresql objects: %s", err) | 		return nil, fmt.Errorf("Can't get list of postgresql objects: %s", err) | ||||||
|  | @ -55,6 +55,15 @@ func (c *Controller) clusterListFunc(options api.ListOptions) (runtime.Object, e | ||||||
| 	return object, err | 	return object, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (c *Controller) clusterWatchFunc(options api.ListOptions) (watch.Interface, error) { | ||||||
|  | 	req := c.RestClient.Get(). | ||||||
|  | 		RequestURI(fmt.Sprintf(constants.WatchClustersURITemplate, c.opConfig.Namespace)). | ||||||
|  | 		VersionedParams(&options, api.ParameterCodec). | ||||||
|  | 		FieldsSelectorParam(fields.Everything()) | ||||||
|  | 
 | ||||||
|  | 	return req.Watch() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c *Controller) processEvent(obj interface{}) error { | func (c *Controller) processEvent(obj interface{}) error { | ||||||
| 	var clusterName spec.NamespacedName | 	var clusterName spec.NamespacedName | ||||||
| 
 | 
 | ||||||
|  | @ -184,16 +193,6 @@ func (c *Controller) queueClusterEvent(old, new *spec.Postgresql, eventType spec | ||||||
| 	c.logger.WithField("worker", workerId).Infof("%s of the '%s' cluster has been queued for", eventType, clusterName) | 	c.logger.WithField("worker", workerId).Infof("%s of the '%s' cluster has been queued for", eventType, clusterName) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Controller) clusterWatchFunc(options api.ListOptions) (watch.Interface, error) { |  | ||||||
| 	return c.RestClient.Get(). |  | ||||||
| 		Prefix("watch"). |  | ||||||
| 		Namespace(c.opConfig.Namespace). |  | ||||||
| 		Resource(constants.ResourceName). |  | ||||||
| 		VersionedParams(&options, api.ParameterCodec). |  | ||||||
| 		FieldsSelectorParam(fields.Everything()). |  | ||||||
| 		Watch() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (c *Controller) postgresqlAdd(obj interface{}) { | func (c *Controller) postgresqlAdd(obj interface{}) { | ||||||
| 	pg, ok := obj.(*spec.Postgresql) | 	pg, ok := obj.(*spec.Postgresql) | ||||||
| 	if !ok { | 	if !ok { | ||||||
|  |  | ||||||
|  | @ -81,9 +81,7 @@ func (c *Controller) createTPR() error { | ||||||
| 		c.logger.Infof("ThirdPartyResource '%s' has been registered", TPRName) | 		c.logger.Infof("ThirdPartyResource '%s' has been registered", TPRName) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	restClient := c.RestClient | 	return k8sutil.WaitTPRReady(c.RestClient, c.opConfig.TPR.ReadyWaitInterval, c.opConfig.TPR.ReadyWaitTimeout, c.opConfig.Namespace) | ||||||
| 
 |  | ||||||
| 	return k8sutil.WaitTPRReady(restClient, c.opConfig.TPR.ReadyWaitInterval, c.opConfig.TPR.ReadyWaitTimeout, c.opConfig.Namespace) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Controller) getInfrastructureRoles() (result map[string]spec.PgUser, err error) { | func (c *Controller) getInfrastructureRoles() (result map[string]spec.PgUser, err error) { | ||||||
|  |  | ||||||
|  | @ -6,6 +6,10 @@ const ( | ||||||
| 	TPRVendor                 = "acid.zalan.do" | 	TPRVendor                 = "acid.zalan.do" | ||||||
| 	TPRDescription            = "Managed PostgreSQL clusters" | 	TPRDescription            = "Managed PostgreSQL clusters" | ||||||
| 	TPRApiVersion             = "v1" | 	TPRApiVersion             = "v1" | ||||||
|  | 	ListClustersURITemplate   = "/apis/" + TPRVendor + "/" + TPRApiVersion + "/namespaces/%s/" + ResourceName       // Namespace
 | ||||||
|  | 	WatchClustersURITemplate  = "/apis/" + TPRVendor + "/" + TPRApiVersion + "/watch/namespaces/%s/" + ResourceName // Namespace
 | ||||||
|  | 	K8sVersion                = "v1" | ||||||
|  | 	K8sApiPath                = "/api" | ||||||
| 	DataVolumeName            = "pgdata" | 	DataVolumeName            = "pgdata" | ||||||
| 	PasswordLength            = 64 | 	PasswordLength            = 64 | ||||||
| 	UserSecretTemplate        = "%s.%s.credentials.%s.%s" // Username, ClusterName, TPRName, TPRVendor
 | 	UserSecretTemplate        = "%s.%s.credentials.%s.%s" // Username, ClusterName, TPRName, TPRVendor
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,9 @@ | ||||||
| package k8sutil | package k8sutil | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"time" | ||||||
|  | 
 | ||||||
| 	"k8s.io/client-go/kubernetes" | 	"k8s.io/client-go/kubernetes" | ||||||
| 	"k8s.io/client-go/pkg/api" | 	"k8s.io/client-go/pkg/api" | ||||||
| 	apierrors "k8s.io/client-go/pkg/api/errors" | 	apierrors "k8s.io/client-go/pkg/api/errors" | ||||||
|  | @ -12,6 +15,7 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/spec" | 	"github.bus.zalan.do/acid/postgres-operator/pkg/spec" | ||||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/constants" | 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/constants" | ||||||
|  | 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/retryutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func RestConfig(kubeConfig string, outOfCluster bool) (*rest.Config, error) { | func RestConfig(kubeConfig string, outOfCluster bool) (*rest.Config, error) { | ||||||
|  | @ -34,17 +38,17 @@ func ResourceNotFound(err error) bool { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func KubernetesRestClient(c *rest.Config) (*rest.RESTClient, error) { | func KubernetesRestClient(c *rest.Config) (*rest.RESTClient, error) { | ||||||
| 	c.APIPath = "/apis" | 	c.GroupVersion = &unversioned.GroupVersion{Version: constants.K8sVersion} | ||||||
| 	c.GroupVersion = &unversioned.GroupVersion{ | 	c.APIPath = constants.K8sApiPath | ||||||
| 		Group:   constants.TPRVendor, |  | ||||||
| 		Version: constants.TPRApiVersion, |  | ||||||
| 	} |  | ||||||
| 	c.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} | 	c.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} | ||||||
| 
 | 
 | ||||||
| 	schemeBuilder := runtime.NewSchemeBuilder( | 	schemeBuilder := runtime.NewSchemeBuilder( | ||||||
| 		func(scheme *runtime.Scheme) error { | 		func(scheme *runtime.Scheme) error { | ||||||
| 			scheme.AddKnownTypes( | 			scheme.AddKnownTypes( | ||||||
| 				*c.GroupVersion, | 				unversioned.GroupVersion{ | ||||||
|  | 					Group:   constants.TPRVendor, | ||||||
|  | 					Version: constants.TPRApiVersion, | ||||||
|  | 				}, | ||||||
| 				&spec.Postgresql{}, | 				&spec.Postgresql{}, | ||||||
| 				&spec.PostgresqlList{}, | 				&spec.PostgresqlList{}, | ||||||
| 				&api.ListOptions{}, | 				&api.ListOptions{}, | ||||||
|  | @ -56,3 +60,16 @@ func KubernetesRestClient(c *rest.Config) (*rest.RESTClient, error) { | ||||||
| 
 | 
 | ||||||
| 	return rest.RESTClientFor(c) | 	return rest.RESTClientFor(c) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func WaitTPRReady(restclient rest.Interface, interval, timeout time.Duration, ns string) error { | ||||||
|  | 	return retryutil.Retry(interval, timeout, func() (bool, error) { | ||||||
|  | 		_, err := restclient.Get().RequestURI(fmt.Sprintf(constants.ListClustersURITemplate, ns)).DoRaw() | ||||||
|  | 		if err != nil { | ||||||
|  | 			if ResourceNotFound(err) { // not set up yet. wait more.
 | ||||||
|  | 				return false, nil | ||||||
|  | 			} | ||||||
|  | 			return false, err | ||||||
|  | 		} | ||||||
|  | 		return true, nil | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,28 +0,0 @@ | ||||||
| package k8sutil |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	"k8s.io/client-go/rest" |  | ||||||
| 
 |  | ||||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/constants" |  | ||||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/retryutil" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func listClustersURI(ns string) string { |  | ||||||
| 	return fmt.Sprintf("/apis/%s/%s/namespaces/%s/%s", constants.TPRVendor, constants.TPRApiVersion, ns, constants.ResourceName) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func WaitTPRReady(restclient rest.Interface, interval, timeout time.Duration, ns string) error { |  | ||||||
| 	return retryutil.Retry(interval, timeout, func() (bool, error) { |  | ||||||
| 		_, err := restclient.Get().RequestURI(listClustersURI(ns)).DoRaw() |  | ||||||
| 		if err != nil { |  | ||||||
| 			if ResourceNotFound(err) { // not set up yet. wait more.
 |  | ||||||
| 				return false, nil |  | ||||||
| 			} |  | ||||||
| 			return false, err |  | ||||||
| 		} |  | ||||||
| 		return true, nil |  | ||||||
| 	}) |  | ||||||
| } |  | ||||||
		Loading…
	
		Reference in New Issue