Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,5 @@ fun <S, T : CustomResource<*, S>> T.patchOrUpdateResourceAndStatus(desiredStatus
desiredStatus -> UpdateControl.updateResource(this)
else -> UpdateControl.updateResourceAndPatchStatus(apply { status = desiredStatus })
}

fun Resource<*>.exists() = get() != null

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package eu.glasskube.operator.apps.matomo

import eu.glasskube.kubernetes.client.patchOrUpdateStatus
import eu.glasskube.kubernetes.client.resources
import eu.glasskube.operator.api.reconciler.HasRegistrationCondition
import eu.glasskube.operator.api.reconciler.getSecondaryResource
import eu.glasskube.operator.api.reconciler.informerEventSource
import eu.glasskube.operator.apps.matomo.Matomo.Companion.APP_NAME
Expand All @@ -24,7 +22,6 @@ import eu.glasskube.operator.webhook.WebhookService
import eu.glasskube.utils.logger
import io.fabric8.kubernetes.api.model.PersistentVolumeClaim
import io.fabric8.kubernetes.api.model.Secret
import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition
import io.fabric8.kubernetes.api.model.apps.Deployment
import io.fabric8.kubernetes.client.KubernetesClient
import io.javaoperatorsdk.operator.api.reconciler.Context
Expand Down Expand Up @@ -57,7 +54,8 @@ import kotlin.jvm.optionals.getOrNull
Dependent(
type = MatomoMariaDB::class,
name = "MatomoMariaDB",
readyPostcondition = MatomoMariaDB.ReadyPostCondition::class
readyPostcondition = MatomoMariaDB.ReadyPostCondition::class,
activationCondition = MatomoMariaDB.ActivationCondition::class
),
Dependent(type = MatomoCronJob::class, name = "MatomoCronJob", dependsOn = ["MatomoDeployment"]),
Dependent(
Expand All @@ -79,15 +77,7 @@ import kotlin.jvm.optionals.getOrNull
]
)
class MatomoReconciler(private val kubernetesClient: KubernetesClient, webhookService: WebhookService) :
BaseReconciler<Matomo>(webhookService), EventSourceInitializer<Matomo>, HasRegistrationCondition {

override val isRegistrationEnabled
get() = kubernetesClient.resources<CustomResourceDefinition>()
.withName("mariadbs.mariadb.mmontes.io")
.isReady

override val registrationConditionHint =
"CRDs provided by the MariaDB Operator must be present on the cluster."
BaseReconciler<Matomo>(webhookService), EventSourceInitializer<Matomo> {

override fun processReconciliation(resource: Matomo, context: Context<Matomo>) = with(context) {
getSecondaryResources(PersistentVolumeClaim::class.java)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import eu.glasskube.operator.apps.matomo.mariaDbLabels
import eu.glasskube.operator.apps.matomo.resourceLabels
import eu.glasskube.operator.config.ConfigKey
import eu.glasskube.operator.config.ConfigService
import eu.glasskube.operator.generic.condition.CustomResourceDefinitionExistsCondition
import eu.glasskube.operator.generic.condition.MariaDBReadyCondition
import eu.glasskube.operator.infra.mariadb.Exporter
import eu.glasskube.operator.infra.mariadb.MariaDB
Expand All @@ -39,6 +40,7 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDep
class MatomoMariaDB(private val configService: ConfigService) :
CRUDKubernetesDependentResource<MariaDB, Matomo>(MariaDB::class.java) {

class ActivationCondition : CustomResourceDefinitionExistsCondition<MariaDB, Matomo>(MariaDB.CANONICAL_NAME)
class ReadyPostCondition : MariaDBReadyCondition<Matomo>()

private val defaultStorageSize = "10Gi"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import com.fasterxml.jackson.module.kotlin.KotlinFeature
import com.fasterxml.jackson.module.kotlin.jsonMapper
import com.fasterxml.jackson.module.kotlin.kotlinModule
import eu.glasskube.operator.Environment
import eu.glasskube.operator.api.reconciler.HasRegistrationCondition
import eu.glasskube.utils.logger
import io.fabric8.kubernetes.api.model.HasMetadata
import io.fabric8.kubernetes.client.KubernetesClient
Expand Down Expand Up @@ -43,17 +42,7 @@ class OperatorConfig {
fun operator(configurationService: ConfigurationService, reconcilers: List<Reconciler<*>>) =
Operator(configurationService).apply {
reconcilers.forEach {
if (it !is HasRegistrationCondition || it.isRegistrationEnabled) {
registerForNamespaceOrCluster(it)
} else {
log.warn(
listOfNotNull(
"Reconciler was not registered because it's registration condition is not met: ${it.javaClass.name}.",
it.registrationConditionHint,
"Resources managed by this controller will not be reconciled!"
).joinToString(" ")
)
}
registerForNamespaceOrCluster(it)
}
start()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package eu.glasskube.operator.generic.condition

import eu.glasskube.kubernetes.client.exists
import eu.glasskube.kubernetes.client.resources
import io.fabric8.kubernetes.api.model.HasMetadata
import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition
import io.javaoperatorsdk.operator.api.reconciler.Context
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition

abstract class CustomResourceDefinitionExistsCondition<R, P : HasMetadata>(private val name: String) : Condition<R, P> {
override fun isMet(dependentResource: DependentResource<R, P>, primary: P, context: Context<P>) =
context.client.resources<CustomResourceDefinition>().withName(name).exists()
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ class MariaDB : CustomResource<MariaDBSpec, MariaDBStatus>(), Namespaced {
override fun setSpec(spec: MariaDBSpec?) {
super.setSpec(spec)
}

companion object {
const val CANONICAL_NAME = "mariadbs.mariadb.mmontes.io"
}
}

inline fun mariaDB(block: (@MariaDBDslMarker MariaDB).() -> Unit) =
Expand Down