@@ -46,7 +46,7 @@ func (s *SeaweedFS) createPreRequisites(ctx context.Context, kcli client.Client)
4646 return errors .Wrap (err , "create namespace" )
4747 }
4848
49- if err := createService (ctx , kcli , s .ServiceCIDR ); err != nil {
49+ if err := ensureService (ctx , kcli , s .ServiceCIDR ); err != nil {
5050 return errors .Wrap (err , "create s3 service" )
5151 }
5252
@@ -69,7 +69,7 @@ func createNamespace(ctx context.Context, kcli client.Client, namespace string)
6969 return nil
7070}
7171
72- func createService (ctx context.Context , kcli client.Client , serviceCIDR string ) error {
72+ func ensureService (ctx context.Context , kcli client.Client , serviceCIDR string ) error {
7373 if serviceCIDR == "" {
7474 return errors .New ("service CIDR not present" )
7575 }
@@ -100,6 +100,20 @@ func createService(ctx context.Context, kcli client.Client, serviceCIDR string)
100100
101101 obj .ObjectMeta .Labels = ApplyLabels (obj .ObjectMeta .Labels , "s3" )
102102
103+ var existingObj corev1.Service
104+ if err := kcli .Get (ctx , client.ObjectKey {Name : obj .Name , Namespace : obj .Namespace }, & existingObj ); err != nil && ! k8serrors .IsNotFound (err ) {
105+ return errors .Wrap (err , "get s3 service" )
106+ } else if err == nil {
107+ // if the service already exists and has the correct cluster IP, do not recreate it
108+ if existingObj .Spec .ClusterIP == clusterIP {
109+ return nil
110+ }
111+ err := kcli .Delete (ctx , & existingObj )
112+ if err != nil {
113+ return errors .Wrap (err , "delete existing s3 service" )
114+ }
115+ }
116+
103117 if err := kcli .Create (ctx , obj ); err != nil && ! k8serrors .IsAlreadyExists (err ) {
104118 return errors .Wrap (err , "create s3 service" )
105119 }
0 commit comments