Skip to content

Commit 43fde1e

Browse files
authored
Don't let expired contract to block getting new license (#44)
Signed-off-by: Tamal Saha <tamal@appscode.com>
1 parent df38d41 commit 43fde1e

File tree

7 files changed

+37
-17
lines changed

7 files changed

+37
-17
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.81.0
1111
github.com/spf13/cobra v1.9.1
1212
github.com/spf13/pflag v1.0.6
13-
go.bytebuilders.dev/license-verifier v0.14.6
13+
go.bytebuilders.dev/license-verifier v0.14.7
1414
gocloud.dev v0.40.0
1515
gomodules.xyz/blobfs v0.2.2
1616
gomodules.xyz/cert v1.6.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,8 @@ github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
518518
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
519519
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
520520
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
521-
go.bytebuilders.dev/license-verifier v0.14.6 h1:0iHYGURUbx8toiXvFKftn/qMpeHzqHbAgEnEzOCNLvo=
522-
go.bytebuilders.dev/license-verifier v0.14.6/go.mod h1:LqWXJKee5ofDcCYM6T5WilYlUc4NlKeZz58tHwO8GEs=
521+
go.bytebuilders.dev/license-verifier v0.14.7 h1:EHbrFXg75u04FRLKbVQB/nX0rTfo5LiwYonymduDPMs=
522+
go.bytebuilders.dev/license-verifier v0.14.7/go.mod h1:BviSsSxXgXVXBSCXvYmftuTEtxchb04G0cV/AlD/Tu8=
523523
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
524524
go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0=
525525
go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I=

pkg/manager/license_acquirer.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package manager
1818

1919
import (
2020
"context"
21+
"crypto/x509"
22+
"errors"
2123
"fmt"
2224
"os"
2325
"path/filepath"
@@ -35,6 +37,8 @@ import (
3537
core "k8s.io/api/core/v1"
3638
apierrors "k8s.io/apimachinery/pkg/api/errors"
3739
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
40+
utilerrors "k8s.io/apimachinery/pkg/util/errors"
41+
"k8s.io/klog/v2"
3842
clusterv1 "open-cluster-management.io/api/cluster/v1"
3943
ctrl "sigs.k8s.io/controller-runtime"
4044
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -129,6 +133,8 @@ func (r *LicenseAcquirer) reconcile(ctx context.Context, clusterName, cid string
129133
return err
130134
}
131135

136+
var errList []error
137+
132138
reg, err := r.getLicenseRegistry(cid)
133139
if err != nil {
134140
return err
@@ -138,19 +144,28 @@ func (r *LicenseAcquirer) reconcile(ctx context.Context, clusterName, cid string
138144
if !found {
139145
var c *v1alpha1.Contract
140146
l, c, err = r.getNewLicense(ctx, cid, []string{feature})
141-
if err != nil {
142-
return err
147+
if err == nil {
148+
reg.Add(l, c)
149+
} else {
150+
klog.ErrorS(err, "failed to get new license", "feature", feature)
151+
var ce *x509.CertificateInvalidError
152+
if !errors.As(err, &ce) {
153+
errList = append(errList, err)
154+
}
143155
}
144-
reg.Add(l, c)
145156
}
146-
sec.Data[l.PlanName] = l.Data
157+
if l != nil && l.Status == v1alpha1.LicenseActive {
158+
sec.Data[l.PlanName] = l.Data
159+
}
147160
}
148161

149162
if secretExists {
150-
return r.Update(context.TODO(), &sec)
163+
errList = append(errList, r.Update(context.TODO(), &sec))
151164
} else {
152-
return r.Create(context.TODO(), &sec)
165+
errList = append(errList, r.Create(context.TODO(), &sec))
153166
}
167+
168+
return utilerrors.NewAggregate(errList)
154169
}
155170

156171
func (r *LicenseAcquirer) getNewLicense(ctx context.Context, cid string, features []string) (*v1alpha1.License, *v1alpha1.Contract, error) {

pkg/manager/manager.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"embed"
2222
"fmt"
2323
"os"
24+
"time"
2425

2526
"go.bytebuilders.dev/license-proxyserver/pkg/common"
2627
"go.bytebuilders.dev/license-proxyserver/pkg/manager/rbac"
@@ -42,6 +43,7 @@ import (
4243
cmdfactory "open-cluster-management.io/addon-framework/pkg/cmd/factory"
4344
"open-cluster-management.io/api/addon/v1alpha1"
4445
ctrl "sigs.k8s.io/controller-runtime"
46+
"sigs.k8s.io/controller-runtime/pkg/cache"
4547
"sigs.k8s.io/controller-runtime/pkg/log"
4648
"sigs.k8s.io/controller-runtime/pkg/manager"
4749
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
@@ -78,6 +80,7 @@ func NewManagerCommand() *cobra.Command {
7880

7981
func runManagerController(ctx context.Context, cfg *rest.Config, opts *ManagerOptions) error {
8082
log.SetLogger(klog.NewKlogr())
83+
resyncPeriod := 1 * time.Hour
8184

8285
hubManager, err := ctrl.NewManager(cfg, manager.Options{
8386
Scheme: scheme,
@@ -86,6 +89,9 @@ func runManagerController(ctx context.Context, cfg *rest.Config, opts *ManagerOp
8689
LeaderElection: false,
8790
LeaderElectionID: "5b87adeb.mager.licenses.appscode.com",
8891
NewClient: cu.NewClient,
92+
Cache: cache.Options{
93+
SyncPeriod: &resyncPeriod,
94+
},
8995
})
9096
if err != nil {
9197
return err

vendor/go.bytebuilders.dev/license-verifier/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ ARCH := $(if $(GOARCH),$(GOARCH),$(shell go env GOARCH))
6464
BASEIMAGE_PROD ?= gcr.io/distroless/static-debian12
6565
BASEIMAGE_DBG ?= debian:12
6666

67-
GO_VERSION ?= 1.23
67+
GO_VERSION ?= 1.24
6868
BUILD_IMAGE ?= ghcr.io/appscode/golang-dev:$(GO_VERSION)
6969

7070
OUTBIN = bin/$(OS)_$(ARCH)/$(BIN)
@@ -220,7 +220,7 @@ lint: $(BUILD_DIRS)
220220
--env GO111MODULE=on \
221221
--env GOFLAGS="-mod=vendor" \
222222
$(BUILD_IMAGE) \
223-
golangci-lint run --enable $(ADDTL_LINTERS) --deadline=10m --skip-files="generated.*\.go$\" --skip-dirs-use-default --skip-dirs=client,vendor
223+
golangci-lint run --enable $(ADDTL_LINTERS) --deadline=10m --exclude-files="generated.*\.go$\" --exclude-dirs-use-default --exclude-dirs=client,vendor
224224

225225
$(BUILD_DIRS):
226226
@mkdir -p $@
@@ -256,7 +256,7 @@ add-license:
256256
--env HTTP_PROXY=$(HTTP_PROXY) \
257257
--env HTTPS_PROXY=$(HTTPS_PROXY) \
258258
$(BUILD_IMAGE) \
259-
ltag -t "./hack/license" --excludes "vendor contrib libbuild" -v
259+
ltag -t "./hack/license" --excludes ".go vendor contrib libbuild" -v
260260

261261
.PHONY: check-license
262262
check-license:
@@ -269,7 +269,7 @@ check-license:
269269
--env HTTP_PROXY=$(HTTP_PROXY) \
270270
--env HTTPS_PROXY=$(HTTPS_PROXY) \
271271
$(BUILD_IMAGE) \
272-
ltag -t "./hack/license" --excludes "vendor contrib libbuild" --check -v
272+
ltag -t "./hack/license" --excludes ".go vendor contrib libbuild" --check -v
273273

274274
.PHONY: ci
275275
ci: verify check-license lint build unit-tests #cover

vendor/go.bytebuilders.dev/license-verifier/lib.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"go.bytebuilders.dev/license-verifier/apis/licenses/v1alpha1"
2525
"go.bytebuilders.dev/license-verifier/info"
2626

27-
"github.com/pkg/errors"
2827
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2928
"k8s.io/apimachinery/pkg/util/sets"
3029
)
@@ -158,7 +157,7 @@ func ParseLicense(opts ParserOptions) (v1alpha1.License, error) {
158157

159158
// ref: https://github.com/appscode/gitea/blob/master/models/stripe_license.go#L117-L126
160159
if _, err := cert.Verify(crtopts); err != nil {
161-
e2 := errors.Wrap(err, "failed to verify certificate")
160+
e2 := fmt.Errorf("failed to verify certificate due to %w", err)
162161
license.Status = v1alpha1.LicenseInvalid
163162
license.Reason = e2.Error()
164163
return license, e2

vendor/modules.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -552,8 +552,8 @@ github.com/yudai/golcs
552552
# github.com/zeebo/xxh3 v1.0.2
553553
## explicit; go 1.17
554554
github.com/zeebo/xxh3
555-
# go.bytebuilders.dev/license-verifier v0.14.6
556-
## explicit; go 1.21
555+
# go.bytebuilders.dev/license-verifier v0.14.7
556+
## explicit; go 1.23.0
557557
go.bytebuilders.dev/license-verifier
558558
go.bytebuilders.dev/license-verifier/apis/licenses
559559
go.bytebuilders.dev/license-verifier/apis/licenses/v1alpha1

0 commit comments

Comments
 (0)