diff --git a/pkg/template/license_context.go b/pkg/template/license_context.go index 6c10bd2a68..cc4d0d0a07 100644 --- a/pkg/template/license_context.go +++ b/pkg/template/license_context.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "encoding/json" "fmt" + "strconv" "text/template" kotsv1beta1 "github.com/replicatedhq/kots/kotskinds/apis/kots/v1beta1" @@ -27,11 +28,34 @@ func (ctx LicenseCtx) licenseFieldValue(name string) string { return "" } - entitlement, ok := ctx.License.Spec.Entitlements[name] - if ok { - return fmt.Sprintf("%v", entitlement.Value.Value()) + switch name { + case "isGitOpsSupported": + return strconv.FormatBool(ctx.License.Spec.IsGitOpsSupported) + case "isAirgapSupported": + return strconv.FormatBool(ctx.License.Spec.IsAirgapSupported) + case "licenseType": + return ctx.License.Spec.LicenseType + case "licenseSequence": + return strconv.FormatInt(ctx.License.Spec.LicenseSequence, 10) + case "signature": + return string(ctx.License.Spec.Signature) + case "appSlug": + return ctx.License.Spec.AppSlug + case "channelName": + return ctx.License.Spec.ChannelName + case "customerName": + return ctx.License.Spec.CustomerName + case "endpoint": + return ctx.License.Spec.Endpoint + case "licenseID", "licenseId": + return ctx.License.Spec.LicenseID + default: + entitlement, ok := ctx.License.Spec.Entitlements[name] + if ok { + return fmt.Sprintf("%v", entitlement.Value.Value()) + } + return "" } - return "" } func (ctx LicenseCtx) licenseDockercfg() string { diff --git a/pkg/template/license_context_test.go b/pkg/template/license_context_test.go index f478d91af4..45f6e9d716 100644 --- a/pkg/template/license_context_test.go +++ b/pkg/template/license_context_test.go @@ -44,7 +44,7 @@ func TestLicenseCtx_licenseFieldValue(t *testing.T) { License: &kotsv1beta1.License{ Spec: kotsv1beta1.LicenseSpec{ Entitlements: map[string]kotsv1beta1.EntitlementField{ - "abc": kotsv1beta1.EntitlementField{ + "abc": { Value: kotsv1beta1.EntitlementValue{ Type: kotsv1beta1.String, StrVal: "abc", @@ -61,7 +61,7 @@ func TestLicenseCtx_licenseFieldValue(t *testing.T) { License: &kotsv1beta1.License{ Spec: kotsv1beta1.LicenseSpec{ Entitlements: map[string]kotsv1beta1.EntitlementField{ - "integerField": kotsv1beta1.EntitlementField{ + "integerField": { Value: kotsv1beta1.EntitlementValue{ Type: kotsv1beta1.Int, IntVal: 587, @@ -78,7 +78,7 @@ func TestLicenseCtx_licenseFieldValue(t *testing.T) { License: &kotsv1beta1.License{ Spec: kotsv1beta1.LicenseSpec{ Entitlements: map[string]kotsv1beta1.EntitlementField{ - "strField": kotsv1beta1.EntitlementField{ + "strField": { Value: kotsv1beta1.EntitlementValue{ Type: kotsv1beta1.String, StrVal: "strValue", @@ -90,6 +90,142 @@ func TestLicenseCtx_licenseFieldValue(t *testing.T) { fieldName: "strField", want: "strValue", }, + { + name: "built-in isGitOpsSupported", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + IsGitOpsSupported: true, + Entitlements: map[string]kotsv1beta1.EntitlementField{ + "strField": { + Value: kotsv1beta1.EntitlementValue{ + Type: kotsv1beta1.String, + StrVal: "strValue", + }, + }, + }, + }, + }, + fieldName: "isGitOpsSupported", + want: "true", + }, + { + name: "built-in isAirgapSupported", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + IsAirgapSupported: true, + }, + }, + fieldName: "isAirgapSupported", + want: "true", + }, + { + name: "built-in licenseSequence", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + LicenseSequence: 987, + }, + }, + fieldName: "licenseSequence", + want: "987", + }, + { + name: "built-in licenseType", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + LicenseType: "test", + }, + }, + fieldName: "licenseType", + want: "test", + }, + { + name: "built-in appSlug", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + AppSlug: "appSlug", + }, + }, + fieldName: "appSlug", + want: "appSlug", + }, + { + name: "built-in channelName", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelName: "stable", + }, + }, + fieldName: "channelName", + want: "stable", + }, + { + name: "built-in customerName", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + CustomerName: "name", + }, + }, + fieldName: "customerName", + want: "name", + }, + { + name: "built-in licenseID", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + LicenseID: "123", + }, + }, + fieldName: "licenseID", + want: "123", + }, + { + name: "built-in licenseId", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + LicenseID: "123", + }, + }, + fieldName: "licenseId", + want: "123", + }, + { + name: "built-in signature", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + IsGitOpsSupported: true, + Entitlements: map[string]kotsv1beta1.EntitlementField{ + "strField": { + Value: kotsv1beta1.EntitlementValue{ + Type: kotsv1beta1.String, + StrVal: "strValue", + }, + }, + }, + Signature: []byte("abcdef0123456789"), + }, + }, + fieldName: "signature", + want: "abcdef0123456789", + }, + { + name: "built-in signature with a custom field of the same name", + License: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + IsGitOpsSupported: true, + Entitlements: map[string]kotsv1beta1.EntitlementField{ + "signature": { + Value: kotsv1beta1.EntitlementValue{ + Type: kotsv1beta1.String, + StrVal: "strValue", + }, + }, + }, + Signature: []byte("abcdef0123456789"), + }, + }, + fieldName: "signature", + want: "abcdef0123456789", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {