Skip to content

Commit af882c2

Browse files
committed
feat: Config Default package install syncPeriod
Signed-off-by: imusmanmalik <[email protected]>
1 parent 4d92b8f commit af882c2

File tree

10 files changed

+83
-30
lines changed

10 files changed

+83
-30
lines changed

cm.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
# Name must be `kapp-controller-config` for kapp controller to pick it up
5+
name: kapp-controller-config
6+
7+
# Namespace must match the namespace kapp-controller is deployed to
8+
namespace: kapp-controller
9+
10+
stringData:
11+
# Time duration value used as a default for App CR's spec.syncPeriod
12+
# if one is not specified explicitly. Minimum is 30s.
13+
# Value is parsed via go's time.ParseDuration.
14+
# (optional; v0.41.0+)
15+
appDefaultSyncPeriod: "30s"
16+
17+
# Time duration value to force a minimum for App CR's spec.syncPeriod.
18+
# If this value is greater than explicitly specified syncPeriod,
19+
# this value value will be used instead. Minimum is 30s.
20+
# Value is parsed via go's time.ParseDuration.
21+
# (optional; v0.41.0+)
22+
appMinimumSyncPeriod: "30s"
23+
packageInstallDefaultSyncPeriod: "40s"
24+

cmd/controller/run.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ func Run(opts Options, runLog logr.Logger) error {
226226
pkgToPkgInstallHandler := pkginstall.NewPackageInstallVersionHandler(
227227
kcClient, opts.PackagingGlobalNS, runLog.WithName("handler"))
228228

229-
reconciler := pkginstall.NewReconciler(kcClient, pkgClient, coreClient, pkgToPkgInstallHandler, runLog.WithName("pkgi"), compInfo)
229+
reconciler := pkginstall.NewReconciler(kcClient, pkgClient, coreClient, pkgToPkgInstallHandler, runLog.WithName("pkgi"), compInfo, kcConfig)
230230

231231
ctrl, err := controller.New("pkgi", mgr, controller.Options{
232232
Reconciler: reconciler,

pkg/config/config.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ type configData struct {
3838
kappDeployRawOptions []string
3939
skipTLSVerify string
4040

41-
appDefaultSyncPeriod time.Duration
42-
appMinimumSyncPeriod time.Duration
41+
appDefaultSyncPeriod time.Duration
42+
appMinimumSyncPeriod time.Duration
43+
packageInstallDefaultSyncPeriod time.Duration
4344
}
4445

4546
const (
@@ -191,6 +192,16 @@ func (gc *Config) AppMinimumSyncPeriod() time.Duration {
191192
return min
192193
}
193194

195+
// PackageInstallDefaultSyncPeriod returns duration that is used by Apps
196+
// that do not explicitly specify sync period.
197+
func (gc *Config) PackageInstallDefaultSyncPeriod() time.Duration {
198+
const defaultSyncPeriod = 10 * time.Minute
199+
if gc.data.packageInstallDefaultSyncPeriod != 0 {
200+
return gc.data.packageInstallDefaultSyncPeriod
201+
}
202+
return defaultSyncPeriod
203+
}
204+
194205
func (gc *Config) addSecretDataToConfig(secret *v1.Secret) error {
195206
extractedValues := map[string]string{}
196207
for key, value := range secret.Data {
@@ -218,6 +229,14 @@ func (gc *Config) addDataToConfig(rawData map[string]string) error {
218229
data.appDefaultSyncPeriod = dur
219230
}
220231

232+
if val := rawData["packageInstallDefaultSyncPeriod"]; len(val) > 0 {
233+
dur, err := time.ParseDuration(val)
234+
if err != nil {
235+
return fmt.Errorf("Unmarshaling packageInstallDefaultSyncPeriod as duration: %s", err)
236+
}
237+
data.packageInstallDefaultSyncPeriod = dur
238+
}
239+
221240
if val := rawData["appMinimumSyncPeriod"]; len(val) > 0 {
222241
dur, err := time.ParseDuration(val)
223242
if err != nil {

pkg/packageinstall/app.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const (
3333
ExtFetchSecretNameAnnKeyFmt = "ext.packaging.carvel.dev/fetch-%d-secret-name"
3434
)
3535

36-
func NewApp(existingApp *v1alpha1.App, pkgInstall *pkgingv1alpha1.PackageInstall, pkgVersion datapkgingv1alpha1.Package) (*v1alpha1.App, error) {
36+
func NewApp(existingApp *v1alpha1.App, pkgInstall *pkgingv1alpha1.PackageInstall, pkgVersion datapkgingv1alpha1.Package, opts Opts) (*v1alpha1.App, error) {
3737
desiredApp := existingApp.DeepCopy()
3838

3939
if _, found := existingApp.Annotations[ManuallyControlledAnnKey]; found {
@@ -53,9 +53,11 @@ func NewApp(existingApp *v1alpha1.App, pkgInstall *pkgingv1alpha1.PackageInstall
5353
desiredApp.Spec = *pkgVersion.Spec.Template.Spec
5454
desiredApp.Spec.ServiceAccountName = pkgInstall.Spec.ServiceAccountName
5555
if pkgInstall.Spec.SyncPeriod == nil {
56-
desiredApp.Spec.SyncPeriod = &metav1.Duration{Duration: time.Minute * 10}
56+
if opts.DefaultSyncPeriod != 0 {
57+
desiredApp.Spec.SyncPeriod = &metav1.Duration{Duration: opts.DefaultSyncPeriod}
58+
}
5759
} else {
58-
desiredApp.Spec.SyncPeriod = pkgInstall.Spec.SyncPeriod
60+
desiredApp.Spec.SyncPeriod = &metav1.Duration{Duration: time.Minute * 10}
5961
}
6062
desiredApp.Spec.NoopDelete = pkgInstall.Spec.NoopDelete
6163
desiredApp.Spec.Paused = pkgInstall.Spec.Paused

pkg/packageinstall/app_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func TestAppExtPathsFromSecretNameAnn(t *testing.T) {
5555
},
5656
}
5757

58-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
58+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
5959
if err != nil {
6060
t.Fatalf("Expected no err, but was: %s", err)
6161
}
@@ -167,7 +167,7 @@ func TestAppHelmOverlaysFromAnn(t *testing.T) {
167167
},
168168
}
169169

170-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
170+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
171171
if err != nil {
172172
t.Fatalf("Expected no err, but was: %s", err)
173173
}
@@ -239,7 +239,7 @@ func TestAppExtYttDataValuesOverlaysAnn(t *testing.T) {
239239
},
240240
}
241241

242-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
242+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
243243
if err != nil {
244244
t.Fatalf("Expected no err, but was: %s", err)
245245
}
@@ -309,7 +309,7 @@ func TestAppYttValues(t *testing.T) {
309309
},
310310
}
311311

312-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
312+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
313313
if err != nil {
314314
t.Fatalf("Expected no err, but was: %s", err)
315315
}
@@ -378,7 +378,7 @@ func TestAppHelmTemplateValues(t *testing.T) {
378378
},
379379
}
380380

381-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
381+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
382382
if err != nil {
383383
t.Fatalf("Expected no err, but was: %s", err)
384384
}
@@ -458,7 +458,7 @@ func TestAppManuallyControlled(t *testing.T) {
458458
},
459459
}
460460

461-
app, err := packageinstall.NewApp(existingApp, ipkg, pkgVersion)
461+
app, err := packageinstall.NewApp(existingApp, ipkg, pkgVersion, packageinstall.Opts{})
462462
if err != nil {
463463
t.Fatalf("Expected no err, but was: %s", err)
464464
}
@@ -523,7 +523,7 @@ func TestAppCustomFetchSecretNames(t *testing.T) {
523523
},
524524
}
525525

526-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
526+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
527527
require.NoError(t, err)
528528

529529
expectedApp := &kcv1alpha1.App{
@@ -582,7 +582,7 @@ func TestAppPackageDetailsAnnotations(t *testing.T) {
582582
},
583583
}
584584

585-
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion)
585+
app, err := packageinstall.NewApp(&kcv1alpha1.App{}, ipkg, pkgVersion, packageinstall.Opts{})
586586
require.NoError(t, err)
587587

588588
trueVal := true

pkg/packageinstall/packageinstall.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package packageinstall
66
import (
77
"context"
88
"fmt"
9+
"time"
910

1011
"github.com/go-logr/logr"
1112
semver "github.com/k14s/semver/v4"
@@ -52,13 +53,17 @@ type PackageInstallCR struct {
5253
pkgclient pkgclient.Interface
5354
coreClient kubernetes.Interface
5455
compInfo ComponentInfo
56+
opts Opts
57+
}
58+
type Opts struct {
59+
DefaultSyncPeriod time.Duration
5560
}
5661

5762
func NewPackageInstallCR(model *pkgingv1alpha1.PackageInstall, log logr.Logger,
58-
kcclient kcclient.Interface, pkgclient pkgclient.Interface, coreClient kubernetes.Interface, compInfo ComponentInfo) *PackageInstallCR {
63+
kcclient kcclient.Interface, pkgclient pkgclient.Interface, coreClient kubernetes.Interface, compInfo ComponentInfo, opts Opts) *PackageInstallCR {
5964

6065
return &PackageInstallCR{model: model, unmodifiedModel: model.DeepCopy(), log: log,
61-
kcclient: kcclient, pkgclient: pkgclient, coreClient: coreClient, compInfo: compInfo}
66+
kcclient: kcclient, pkgclient: pkgclient, coreClient: coreClient, compInfo: compInfo, opts: opts}
6267
}
6368

6469
func (pi *PackageInstallCR) Reconcile() (reconcile.Result, error) {
@@ -174,7 +179,7 @@ func (pi *PackageInstallCR) reconcile(modelStatus *reconciler.Status) (reconcile
174179
}
175180

176181
func (pi *PackageInstallCR) createAppFromPackage(pkg datapkgingv1alpha1.Package) (reconcile.Result, error) {
177-
desiredApp, err := NewApp(&v1alpha1.App{}, pi.model, pkg)
182+
desiredApp, err := NewApp(&v1alpha1.App{}, pi.model, pkg, pi.opts)
178183
if err != nil {
179184
return reconcile.Result{Requeue: true}, err
180185
}
@@ -193,7 +198,7 @@ func (pi *PackageInstallCR) reconcileAppWithPackage(existingApp *kcv1alpha1.App,
193198
return reconcile.Result{}, err
194199
}
195200

196-
desiredApp, err := NewApp(existingApp, pi.model, pkgWithPlaceholderSecrets)
201+
desiredApp, err := NewApp(existingApp, pi.model, pkgWithPlaceholderSecrets, pi.opts)
197202
if err != nil {
198203
return reconcile.Result{Requeue: true}, err
199204
}

pkg/packageinstall/packageinstall_deletion_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func Test_PackageInstallDeletion(t *testing.T) {
6565
appClient := fakekappctrl.NewSimpleClientset(pkgInstall, existingApp)
6666
coreClient := fake.NewSimpleClientset()
6767

68-
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, coreClient, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
68+
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, coreClient, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
6969
_, err := ip.Reconcile()
7070
assert.Nil(t, err)
7171

pkg/packageinstall/packageinstall_downgrade_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func Test_PackageInstallVersionDowngrades(t *testing.T) {
9898
GitVersion: "v0.20.0",
9999
}
100100

101-
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
101+
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
102102
_, err := ip.Reconcile()
103103
assert.Nil(t, err)
104104

@@ -147,7 +147,7 @@ func Test_PackageInstallVersionDowngrades(t *testing.T) {
147147
GitVersion: "v0.20.0",
148148
}
149149

150-
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
150+
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
151151
_, err := ip.Reconcile()
152152
assert.Nil(t, err)
153153

@@ -196,7 +196,7 @@ func Test_PackageInstallVersionDowngrades(t *testing.T) {
196196
GitVersion: "v0.20.0",
197197
}
198198

199-
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
199+
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
200200
_, err := ip.Reconcile()
201201
assert.Nil(t, err)
202202

@@ -251,7 +251,7 @@ func Test_PackageInstallVersionDowngrades(t *testing.T) {
251251
GitVersion: "v0.20.0",
252252
}
253253

254-
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
254+
ip := NewPackageInstallCR(pkgInstall, log, appClient, pkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
255255
_, err := ip.Reconcile()
256256
assert.Nil(t, err)
257257

pkg/packageinstall/packageinstall_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ func Test_PlaceHolderSecretCreated_WhenPackageHasNoSecretRef(t *testing.T) {
402402
GitVersion: "v0.20.0",
403403
}
404404

405-
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
405+
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
406406

407407
_, err := ip.Reconcile()
408408
assert.Nil(t, err)
@@ -481,7 +481,7 @@ func Test_PlaceHolderSecretsCreated_WhenPackageHasMultipleFetchStages(t *testing
481481
GitVersion: "v0.20.0",
482482
}
483483

484-
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
484+
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
485485

486486
_, err := ip.Reconcile()
487487
assert.Nil(t, err)
@@ -571,7 +571,7 @@ func Test_PlaceHolderSecretsNotCreated_WhenFetchStagesHaveSecrets(t *testing.T)
571571
GitVersion: "v0.20.0",
572572
}
573573

574-
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
574+
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
575575

576576
_, err := ip.Reconcile()
577577
assert.Nil(t, err)
@@ -648,7 +648,7 @@ func Test_PlaceHolderSecretCreated_WhenPackageInstallUpdated(t *testing.T) {
648648

649649
fakekctrl := fakekappctrl.NewSimpleClientset(model, existingApp)
650650
fakek8s := fake.NewSimpleClientset()
651-
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")})
651+
ip := NewPackageInstallCR(model, log, fakekctrl, fakePkgClient, fakek8s, FakeComponentInfo{KCVersion: semver.MustParse("0.42.31337")}, Opts{})
652652

653653
// mock the kubernetes server version
654654
fakeDiscovery, _ := fakek8s.Discovery().(*fakediscovery.FakeDiscovery)

pkg/packageinstall/reconciler.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
datapkgingv1alpha1 "github.com/vmware-tanzu/carvel-kapp-controller/pkg/apiserver/apis/datapackaging/v1alpha1"
1414
pkgclient "github.com/vmware-tanzu/carvel-kapp-controller/pkg/apiserver/client/clientset/versioned"
1515
kcclient "github.com/vmware-tanzu/carvel-kapp-controller/pkg/client/clientset/versioned"
16+
kcconfig "github.com/vmware-tanzu/carvel-kapp-controller/pkg/config"
1617
"k8s.io/apimachinery/pkg/api/errors"
1718
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1819
"k8s.io/client-go/kubernetes"
@@ -30,19 +31,21 @@ type Reconciler struct {
3031
pkgToPkgInstallHandler *PackageInstallVersionHandler
3132
compInfo ComponentInfo
3233
log logr.Logger
34+
opts Opts
3335
}
3436

3537
// NewReconciler is the constructor for the Reconciler struct
3638
func NewReconciler(kcClient kcclient.Interface, pkgClient pkgclient.Interface,
3739
coreClient kubernetes.Interface, pkgToPkgInstallHandler *PackageInstallVersionHandler,
38-
log logr.Logger, compInfo ComponentInfo) *Reconciler {
40+
log logr.Logger, compInfo ComponentInfo, kcConfig *kcconfig.Config) *Reconciler {
3941

4042
return &Reconciler{kcClient: kcClient,
4143
pkgClient: pkgClient,
4244
coreClient: coreClient,
4345
pkgToPkgInstallHandler: pkgToPkgInstallHandler,
4446
compInfo: compInfo,
45-
log: log}
47+
log: log,
48+
opts: Opts{DefaultSyncPeriod: kcConfig.PackageInstallDefaultSyncPeriod()}}
4649
}
4750

4851
var _ reconcile.Reconciler = &Reconciler{}
@@ -85,5 +88,5 @@ func (r *Reconciler) Reconcile(ctx context.Context, request reconcile.Request) (
8588
return reconcile.Result{}, err
8689
}
8790

88-
return NewPackageInstallCR(existingPkgInstall, log, r.kcClient, r.pkgClient, r.coreClient, r.compInfo).Reconcile()
91+
return NewPackageInstallCR(existingPkgInstall, log, r.kcClient, r.pkgClient, r.coreClient, r.compInfo, r.opts).Reconcile()
8992
}

0 commit comments

Comments
 (0)