github.com/spotahome/redis-operator@v1.2.4/service/k8s/redisfailover.go (about) 1 package k8s 2 3 import ( 4 "context" 5 6 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 7 "k8s.io/apimachinery/pkg/watch" 8 9 redisfailoverv1 "github.com/spotahome/redis-operator/api/redisfailover/v1" 10 redisfailoverclientset "github.com/spotahome/redis-operator/client/k8s/clientset/versioned" 11 "github.com/spotahome/redis-operator/log" 12 "github.com/spotahome/redis-operator/metrics" 13 ) 14 15 // RedisFailover the RF service that knows how to interact with k8s to get them 16 type RedisFailover interface { 17 // ListRedisFailovers lists the redisfailovers on a cluster. 18 ListRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (*redisfailoverv1.RedisFailoverList, error) 19 // WatchRedisFailovers watches the redisfailovers on a cluster. 20 WatchRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (watch.Interface, error) 21 } 22 23 // RedisFailoverService is the RedisFailover service implementation using API calls to kubernetes. 24 type RedisFailoverService struct { 25 k8sCli redisfailoverclientset.Interface 26 logger log.Logger 27 metricsRecorder metrics.Recorder 28 } 29 30 // NewRedisFailoverService returns a new Workspace KubeService. 31 func NewRedisFailoverService(k8scli redisfailoverclientset.Interface, logger log.Logger, metricsRecorder metrics.Recorder) *RedisFailoverService { 32 logger = logger.With("service", "k8s.redisfailover") 33 return &RedisFailoverService{ 34 k8sCli: k8scli, 35 logger: logger, 36 metricsRecorder: metricsRecorder, 37 } 38 } 39 40 // ListRedisFailovers satisfies redisfailover.Service interface. 41 func (r *RedisFailoverService) ListRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (*redisfailoverv1.RedisFailoverList, error) { 42 redisFailoverList, err := r.k8sCli.DatabasesV1().RedisFailovers(namespace).List(ctx, opts) 43 recordMetrics(namespace, "RedisFailover", metrics.NOT_APPLICABLE, "LIST", err, r.metricsRecorder) 44 return redisFailoverList, err 45 } 46 47 // WatchRedisFailovers satisfies redisfailover.Service interface. 48 func (r *RedisFailoverService) WatchRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (watch.Interface, error) { 49 watcher, err := r.k8sCli.DatabasesV1().RedisFailovers(namespace).Watch(ctx, opts) 50 recordMetrics(namespace, "RedisFailover", metrics.NOT_APPLICABLE, "WATCH", err, r.metricsRecorder) 51 return watcher, err 52 }