Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions pkg/apis/serving/v1alpha1/domainmapping_lifecycle.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ var domainMappingCondSet = apis.NewLivingConditionSet(
DomainMappingConditionDomainClaimed,
DomainMappingConditionReferenceResolved,
DomainMappingConditionIngressReady,
DomainMappingConditionCertificateProvisioned,
)

// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface.
Expand Down Expand Up @@ -57,6 +58,60 @@ func (dms *DomainMappingStatus) InitializeConditions() {
domainMappingCondSet.Manage(dms).InitializeConditions()
}

const (
// AutoTLSNotEnabledMessage is the message which is set on the
// DomainMappingConditionCertificateProvisioned condition when it is set to True
// because AutoTLS was not enabled.
AutoTLSNotEnabledMessage = "autoTLS is not enabled"
)

// MarkTLSNotEnabled sets DomainMappingConditionCertificateProvisioned to true when
// certificate config such as autoTLS is not enabled.
Comment thread
tcnghia marked this conversation as resolved.
Outdated
func (dms *DomainMappingStatus) MarkTLSNotEnabled(msg string) {
domainMappingCondSet.Manage(dms).MarkTrueWithReason(DomainMappingConditionCertificateProvisioned,
"TLSNotEnabled", msg)
}

// MarkCertificateReady marks the DomainMappingConditionCertificateProvisioned
// condition to indicate that the Certificate is ready.
func (dms *DomainMappingStatus) MarkCertificateReady(name string) {
domainMappingCondSet.Manage(dms).MarkTrue(DomainMappingConditionCertificateProvisioned)
}

// MarkCertificateNotReady marks the DomainMappingConditionCertificateProvisioned
// condition to indicate that the Certificate is not ready.
func (dms *DomainMappingStatus) MarkCertificateNotReady(name string) {
domainMappingCondSet.Manage(dms).MarkUnknown(DomainMappingConditionCertificateProvisioned,
"CertificateNotReady",
"Certificate %s is not ready.", name)
}

// MarkCertificateNotOwned changes the DomainMappingConditionCertificateProvisioned
// status to be false with the reason being that there is an existing
// certificate with the name we wanted to use.
func (dms *DomainMappingStatus) MarkCertificateNotOwned(name string) {
domainMappingCondSet.Manage(dms).MarkFalse(DomainMappingConditionCertificateProvisioned,
"CertificateNotOwned",
"There is an existing certificate %s that we don't own.", name)
}

// MarkCertificateProvisionFailed marks the
// DomainMappingConditionCertificateProvisioned condition to indicate that the
// Certificate provisioning failed.
func (dms *DomainMappingStatus) MarkCertificateProvisionFailed(name string) {
domainMappingCondSet.Manage(dms).MarkFalse(DomainMappingConditionCertificateProvisioned,
"CertificateProvisionFailed",
"Certificate %s fails to be provisioned.", name)
Comment thread
tcnghia marked this conversation as resolved.
Outdated
}

// MarkHTTPDowngrade sets DomainMappingConditionCertificateProvisioned to true when plain
// HTTP is enabled even when Certificated is not ready.
Comment thread
tcnghia marked this conversation as resolved.
Outdated
func (dms *DomainMappingStatus) MarkHTTPDowngrade(name string) {
domainMappingCondSet.Manage(dms).MarkTrueWithReason(DomainMappingConditionCertificateProvisioned,
"HTTPDowngrade",
"Certificate %s is not ready downgrade HTTP.", name)
}

// MarkIngressNotConfigured changes the IngressReady condition to be unknown to reflect
// that the Ingress does not yet have a Status.
func (dms *DomainMappingStatus) MarkIngressNotConfigured() {
Expand Down
45 changes: 45 additions & 0 deletions pkg/apis/serving/v1alpha1/domainmapping_lifecycle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ func TestDomainClaimConditions(t *testing.T) {
dms := &DomainMappingStatus{}

dms.InitializeConditions()
dms.MarkTLSNotEnabled("AutoTLS not yet available for DomainMapping")
apistest.CheckConditionOngoing(dms, DomainMappingConditionDomainClaimed, t)
apistest.CheckConditionOngoing(dms, DomainMappingConditionReady, t)

Expand Down Expand Up @@ -102,6 +103,7 @@ func TestReferenceResolvedCondition(t *testing.T) {
dms := &DomainMappingStatus{}

dms.InitializeConditions()
dms.MarkTLSNotEnabled("AutoTLS not yet available for DomainMapping")
apistest.CheckConditionOngoing(dms, DomainMappingConditionReferenceResolved, t)
apistest.CheckConditionOngoing(dms, DomainMappingConditionReady, t)

Expand Down Expand Up @@ -129,10 +131,53 @@ func TestReferenceResolvedCondition(t *testing.T) {
apistest.CheckConditionFailed(dms, DomainMappingConditionReady, t)
}

func TestCertificateNotReady(t *testing.T) {
dms := &DomainMappingStatus{}

dms.InitializeConditions()
dms.MarkCertificateNotReady("cert pending")

apistest.CheckConditionOngoing(dms, DomainMappingConditionCertificateProvisioned, t)
}

func TestCertificateProvisionFailed(t *testing.T) {
dms := &DomainMappingStatus{}

dms.InitializeConditions()
dms.MarkCertificateProvisionFailed("cert failed")

apistest.CheckConditionFailed(dms, DomainMappingConditionCertificateProvisioned, t)
}

func TestDomainMappingNotOwnCertificate(t *testing.T) {
dms := &DomainMappingStatus{}
dms.InitializeConditions()
dms.MarkCertificateNotOwned("cert not owned")

apistest.CheckConditionFailed(dms, DomainMappingConditionCertificateProvisioned, t)
}

func TestDomainMappingAutoTLSNotEnabled(t *testing.T) {
dms := &DomainMappingStatus{}
dms.InitializeConditions()
dms.MarkTLSNotEnabled(AutoTLSNotEnabledMessage)

apistest.CheckConditionSucceeded(dms, DomainMappingConditionCertificateProvisioned, t)
}

func TestDomainMappingHTTPDowngrade(t *testing.T) {
dms := &DomainMappingStatus{}
dms.InitializeConditions()
dms.MarkHTTPDowngrade("downgraded to HTTP because we can't obtain cert")

apistest.CheckConditionSucceeded(dms, DomainMappingConditionCertificateProvisioned, t)
}

func TestPropagateIngressStatus(t *testing.T) {
dms := &DomainMappingStatus{}

dms.InitializeConditions()
dms.MarkTLSNotEnabled("AutoTLS not yet available for DomainMapping")
apistest.CheckConditionOngoing(dms, DomainMappingConditionIngressReady, t)
apistest.CheckConditionOngoing(dms, DomainMappingConditionReady, t)

Expand Down
4 changes: 4 additions & 0 deletions pkg/apis/serving/v1alpha1/domainmapping_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ const (
// DomainMappingConditionDomainClaimed reflects that the ClusterDomainClaim
// for this DomainMapping exists, and is owned by this DomainMapping.
DomainMappingConditionDomainClaimed apis.ConditionType = "DomainClaimed"

// DomainMappingConditionCertificateProvisioned is set to False when the
// Knative Certificates fail to be provisioned for the DomainMapping.
DomainMappingConditionCertificateProvisioned apis.ConditionType = "CertificateProvisioned"
)

// GetStatus retrieves the status of the DomainMapping. Implements the KRShaped interface.
Expand Down
3 changes: 3 additions & 0 deletions pkg/reconciler/domainmapping/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, dm *v1alpha1.DomainMappi
logger := logging.FromContext(ctx)
logger.Debugf("Reconciling DomainMapping %s/%s", dm.Namespace, dm.Name)

// TODO(https://github.com/knative/serving/issues/10247)
dm.Status.MarkTLSNotEnabled("AutoTLS for DomainMapping is not implemented")

// Defensively assume the ingress is not configured until we manage to
// successfully reconcile it below. This avoids error cases where we fail
// before we've reconciled the ingress and get a new ObservedGeneration but
Expand Down
1 change: 1 addition & 0 deletions pkg/reconciler/domainmapping/table_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,7 @@ func withPropagatedStatus(status netv1alpha1.IngressStatus) domainMappingOption

func withInitDomainMappingConditions(dm *v1alpha1.DomainMapping) {
dm.Status.InitializeConditions()
dm.Status.MarkTLSNotEnabled("AutoTLS for DomainMapping is not implemented")
}

func withDomainClaimNotOwned(dm *v1alpha1.DomainMapping) {
Expand Down