Skip to content

Commit 5639a43

Browse files
committed
fix
1 parent 9d0cfda commit 5639a43

File tree

3 files changed

+101
-28
lines changed

3 files changed

+101
-28
lines changed

pkg/addons/seaweedfs/install.go

Lines changed: 73 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package seaweedfs
22

33
import (
4+
"bytes"
45
"context"
56
"encoding/json"
67
"fmt"
@@ -12,6 +13,7 @@ import (
1213
"github.com/replicatedhq/embedded-cluster/pkg/helpers"
1314
batchv1 "k8s.io/api/batch/v1"
1415
corev1 "k8s.io/api/core/v1"
16+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1517
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1618
"k8s.io/apimachinery/pkg/util/intstr"
1719
"k8s.io/client-go/metadata"
@@ -32,23 +34,36 @@ func (s *SeaweedFS) Install(
3234
return errors.Wrap(err, "generate helm values")
3335
}
3436

35-
err = s.ensurePostInstallHooksDeleted(ctx, kcli)
36-
if err != nil {
37-
return errors.Wrap(err, "ensure hooks deleted")
37+
if !s.DryRun {
38+
err = s.ensurePostInstallHooksDeleted(ctx, kcli)
39+
if err != nil {
40+
return errors.Wrap(err, "ensure hooks deleted")
41+
}
3842
}
3943

40-
_, err = hcli.Install(ctx, helm.InstallOptions{
44+
opts := helm.InstallOptions{
4145
ReleaseName: s.ReleaseName(),
4246
ChartPath: s.ChartLocation(domains),
4347
ChartVersion: Metadata.Version,
4448
Values: values,
4549
Namespace: s.Namespace(),
4650
Labels: getBackupLabels(),
4751
LogFn: helm.LogFn(logf),
48-
})
49-
if err != nil {
50-
return errors.Wrap(err, "helm install")
5152
}
53+
54+
if s.DryRun {
55+
manifests, err := hcli.Render(ctx, opts)
56+
if err != nil {
57+
return errors.Wrap(err, "dry run values")
58+
}
59+
s.dryRunManifests = append(s.dryRunManifests, manifests...)
60+
} else {
61+
_, err = hcli.Install(ctx, opts)
62+
if err != nil {
63+
return errors.Wrap(err, "helm install")
64+
}
65+
}
66+
5267
return nil
5368
}
5469

@@ -69,13 +84,21 @@ func (s *SeaweedFS) ensurePreRequisites(ctx context.Context, kcli client.Client)
6984
}
7085

7186
func (s *SeaweedFS) ensureNamespace(ctx context.Context, kcli client.Client) error {
72-
ns := corev1.Namespace{
87+
obj := &corev1.Namespace{
7388
ObjectMeta: metav1.ObjectMeta{
7489
Name: s.Namespace(),
7590
},
7691
}
77-
if err := kcli.Create(ctx, &ns); client.IgnoreAlreadyExists(err) != nil {
78-
return err
92+
if s.DryRun {
93+
b := bytes.NewBuffer(nil)
94+
if err := serializer.Encode(obj, b); err != nil {
95+
return errors.Wrap(err, "serialize")
96+
}
97+
s.dryRunManifests = append(s.dryRunManifests, b.Bytes())
98+
} else {
99+
if err := kcli.Create(ctx, obj); err != nil && !k8serrors.IsAlreadyExists(err) {
100+
return err
101+
}
79102
}
80103
return nil
81104
}
@@ -91,6 +114,10 @@ func (s *SeaweedFS) ensureService(ctx context.Context, kcli client.Client, servi
91114
}
92115

93116
obj := &corev1.Service{
117+
TypeMeta: metav1.TypeMeta{
118+
Kind: "Service",
119+
APIVersion: "v1",
120+
},
94121
ObjectMeta: metav1.ObjectMeta{Name: _s3SVCName, Namespace: s.Namespace()},
95122
Spec: corev1.ServiceSpec{
96123
ClusterIP: clusterIP,
@@ -111,22 +138,30 @@ func (s *SeaweedFS) ensureService(ctx context.Context, kcli client.Client, servi
111138

112139
obj.Labels = ApplyLabels(obj.Labels, "s3")
113140

114-
var existingObj corev1.Service
115-
if err := kcli.Get(ctx, client.ObjectKey{Name: obj.Name, Namespace: obj.Namespace}, &existingObj); client.IgnoreNotFound(err) != nil {
116-
return errors.Wrap(err, "get s3 service")
117-
} else if err == nil {
118-
// if the service already exists and has the correct cluster IP, do not recreate it
119-
if existingObj.Spec.ClusterIP == clusterIP {
120-
return nil
141+
if s.DryRun {
142+
b := bytes.NewBuffer(nil)
143+
if err := serializer.Encode(obj, b); err != nil {
144+
return errors.Wrap(err, "serialize")
121145
}
122-
err := kcli.Delete(ctx, &existingObj)
123-
if err != nil {
124-
return errors.Wrap(err, "delete existing s3 service")
146+
s.dryRunManifests = append(s.dryRunManifests, b.Bytes())
147+
} else {
148+
var existingObj corev1.Service
149+
if err := kcli.Get(ctx, client.ObjectKey{Name: obj.Name, Namespace: obj.Namespace}, &existingObj); client.IgnoreNotFound(err) != nil {
150+
return errors.Wrap(err, "get s3 service")
151+
} else if err == nil {
152+
// if the service already exists and has the correct cluster IP, do not recreate it
153+
if existingObj.Spec.ClusterIP == clusterIP {
154+
return nil
155+
}
156+
err := kcli.Delete(ctx, &existingObj)
157+
if err != nil {
158+
return errors.Wrap(err, "delete existing s3 service")
159+
}
125160
}
126-
}
127161

128-
if err := kcli.Create(ctx, obj); err != nil {
129-
return errors.Wrap(err, "create s3 service")
162+
if err := kcli.Create(ctx, obj); err != nil {
163+
return errors.Wrap(err, "create s3 service")
164+
}
130165
}
131166

132167
return nil
@@ -157,16 +192,29 @@ func (s *SeaweedFS) ensureS3Secret(ctx context.Context, kcli client.Client) erro
157192
}
158193

159194
obj := &corev1.Secret{
195+
TypeMeta: metav1.TypeMeta{
196+
Kind: "Secret",
197+
APIVersion: "v1",
198+
},
160199
ObjectMeta: metav1.ObjectMeta{Name: _s3SecretName, Namespace: s.Namespace()},
200+
Type: "Opaque",
161201
Data: map[string][]byte{
162202
"seaweedfs_s3_config": configData,
163203
},
164204
}
165205

166206
obj.Labels = ApplyLabels(obj.Labels, "s3")
167207

168-
if err := kcli.Create(ctx, obj); client.IgnoreAlreadyExists(err) != nil {
169-
return errors.Wrap(err, "create s3 secret")
208+
if s.DryRun {
209+
b := bytes.NewBuffer(nil)
210+
if err := serializer.Encode(obj, b); err != nil {
211+
return errors.Wrap(err, "serialize")
212+
}
213+
s.dryRunManifests = append(s.dryRunManifests, b.Bytes())
214+
} else {
215+
if err := kcli.Create(ctx, obj); err != nil && !k8serrors.IsAlreadyExists(err) {
216+
return errors.Wrap(err, "create s3 secret")
217+
}
170218
}
171219

172220
return nil

pkg/addons/seaweedfs/seaweedfs.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import (
66
ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
77
"github.com/replicatedhq/embedded-cluster/pkg-new/constants"
88
"github.com/replicatedhq/embedded-cluster/pkg/addons/types"
9+
"github.com/replicatedhq/embedded-cluster/pkg/kubeutils"
10+
"k8s.io/apimachinery/pkg/runtime"
11+
jsonserializer "k8s.io/apimachinery/pkg/runtime/serializer/json"
912
)
1013

1114
const (
@@ -25,11 +28,29 @@ const (
2528
_s3SecretName = "secret-seaweedfs-s3"
2629
)
2730

31+
var (
32+
serializer runtime.Serializer
33+
)
34+
35+
func init() {
36+
scheme := kubeutils.Scheme
37+
serializer = jsonserializer.NewSerializerWithOptions(jsonserializer.DefaultMetaFactory, scheme, scheme, jsonserializer.SerializerOptions{
38+
Yaml: true,
39+
})
40+
}
41+
2842
var _ types.AddOn = (*SeaweedFS)(nil)
2943

3044
type SeaweedFS struct {
3145
ServiceCIDR string
3246
SeaweedFSDataDir string
47+
48+
// DryRun is a flag to enable dry-run mode for SeaweedFS.
49+
// If true, SeaweedFS will only render the helm template and additional manifests, but not install
50+
// the release.
51+
DryRun bool
52+
53+
dryRunManifests [][]byte
3354
}
3455

3556
func (s *SeaweedFS) Name() string {
@@ -60,3 +81,7 @@ func (s *SeaweedFS) ChartLocation(domains ecv1beta1.Domains) string {
6081
}
6182
return strings.Replace(Metadata.Location, "proxy.replicated.com", domains.ProxyRegistryDomain, 1)
6283
}
84+
85+
func (s *SeaweedFS) DryRunManifests() [][]byte {
86+
return s.dryRunManifests
87+
}

pkg/addons/seaweedfs/static/values.tpl.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
global:
22
enableReplication: true
33
replicationPlacment: "001"
4-
{{- if .ReplaceImages }}
5-
registry: "proxy.replicated.com/anonymous/"
6-
{{- end }}
74

85
master:
96
{{- if .ReplaceImages }}
@@ -145,3 +142,6 @@ filer:
145142
createBuckets:
146143
- name: registry
147144
anonymousRead: false
145+
146+
s3:
147+
enabled: false

0 commit comments

Comments
 (0)