From 92e858e398bf69380dbacebc042dde2bfa8cfe9c Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Fri, 14 Feb 2020 12:43:29 +0100 Subject: refactor: Integrate opendc-compute in existing model This change refactors the existing model to use the new interfaces from the opendc-compute module. --- .../main/kotlin/com/atlarge/opendc/compute/core/Server.kt | 1 - .../opendc/compute/metal/driver/FakeBareMetalDriver.kt | 12 ++++++++++-- .../opendc/compute/metal/service/ProvisioningService.kt | 7 +++++++ .../compute/metal/service/SimpleProvisioningService.kt | 1 + .../compute/metal/service/SimpleProvisioningServiceTest.kt | 7 ++----- 5 files changed, 20 insertions(+), 8 deletions(-) (limited to 'opendc/opendc-compute') diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/Server.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/Server.kt index dad24ebe..cb14835a 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/Server.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/Server.kt @@ -25,7 +25,6 @@ package com.atlarge.opendc.compute.core import com.atlarge.opendc.compute.core.image.Image -import com.atlarge.opendc.compute.metal.Node import com.atlarge.opendc.core.Identity import java.util.UUID diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/FakeBareMetalDriver.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/FakeBareMetalDriver.kt index 1b3782f6..7a6d9123 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/FakeBareMetalDriver.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/FakeBareMetalDriver.kt @@ -29,7 +29,6 @@ import com.atlarge.opendc.compute.core.Flavor import com.atlarge.opendc.compute.core.Server import com.atlarge.opendc.compute.core.ServerState import com.atlarge.opendc.compute.core.execution.ServerManagementContext -import com.atlarge.opendc.compute.core.execution.serialize import com.atlarge.opendc.compute.core.image.EmptyImage import com.atlarge.opendc.compute.core.image.Image import com.atlarge.opendc.compute.core.monitor.ServerMonitor @@ -71,7 +70,7 @@ public class FakeBareMetalDriver( val previousPowerState = node.powerState val server = when (node.powerState to powerState) { PowerState.POWER_OFF to PowerState.POWER_OFF -> null - PowerState.POWER_OFF to PowerState.POWER_ON -> Server(node.uid, node.name, flavor, node.image, ServerState.BUILD) + PowerState.POWER_OFF to PowerState.POWER_ON -> Server(UUID.randomUUID(), node.name, flavor, node.image, ServerState.BUILD) PowerState.POWER_ON to PowerState.POWER_OFF -> null // TODO Terminate existing image PowerState.POWER_ON to PowerState.POWER_ON -> node.server else -> throw IllegalStateException() @@ -110,6 +109,8 @@ public class FakeBareMetalDriver( } private val serverCtx = object : ServerManagementContext { + private var initialized: Boolean = false + override var server: Server get() = node.server!! set(value) { @@ -117,9 +118,15 @@ public class FakeBareMetalDriver( } override suspend fun init() { + if (initialized) { + throw IllegalStateException() + } + val previousState = server.state server = server.copy(state = ServerState.ACTIVE) monitor.onUpdate(server, previousState) + + initialized = true } override suspend fun exit(cause: Throwable?) { @@ -127,6 +134,7 @@ public class FakeBareMetalDriver( val state = if (cause == null) ServerState.SHUTOFF else ServerState.ERROR server = server.copy(state = state) monitor.onUpdate(server, previousState) + initialized = false } override suspend fun run(req: LongArray) { diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/ProvisioningService.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/ProvisioningService.kt index ba2ebc80..24ade799 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/ProvisioningService.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/ProvisioningService.kt @@ -28,6 +28,8 @@ import com.atlarge.opendc.compute.core.image.Image import com.atlarge.opendc.compute.core.monitor.ServerMonitor import com.atlarge.opendc.compute.metal.Node import com.atlarge.opendc.compute.metal.driver.BareMetalDriver +import com.atlarge.opendc.core.services.AbstractServiceKey +import java.util.UUID /** * A cloud platform service for provisioning bare-metal compute nodes on the platform. @@ -52,4 +54,9 @@ public interface ProvisioningService { * Deploy the specified [Image] on a compute node. */ public suspend fun deploy(node: Node, image: Image, monitor: ServerMonitor): Node + + /** + * The service key of this service. + */ + companion object Key : AbstractServiceKey(UUID.randomUUID(), "provisioner") } diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningService.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningService.kt index dc860405..6b5c0979 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningService.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningService.kt @@ -62,6 +62,7 @@ public class SimpleProvisioningService : ProvisioningService, ServerMonitor { val driver = nodes[node]!! driver.setImage(image) + driver.setPower(PowerState.POWER_OFF) val newNode = driver.setPower(PowerState.POWER_ON) monitors[newNode.server!!] = monitor return newNode diff --git a/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningServiceTest.kt b/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningServiceTest.kt index 0bbd4b75..9c4a4e2a 100644 --- a/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningServiceTest.kt +++ b/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningServiceTest.kt @@ -31,14 +31,12 @@ import com.atlarge.opendc.compute.core.Server import com.atlarge.opendc.compute.core.ServerState import com.atlarge.opendc.compute.core.image.FlopsApplicationImage import com.atlarge.opendc.compute.core.monitor.ServerMonitor -import com.atlarge.opendc.compute.metal.PowerState import com.atlarge.opendc.compute.metal.driver.FakeBareMetalDriver +import java.util.ServiceLoader +import java.util.UUID import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.Test -import java.util.ServiceLoader -import java.util.UUID - /** * Test suite for the [SimpleProvisioningService]. @@ -60,7 +58,6 @@ internal class SimpleProvisioningServiceTest { } val driver = FakeBareMetalDriver(UUID.randomUUID(), "test", flavor) - val provisioner = SimpleProvisioningService() provisioner.create(driver) delay(5) -- cgit v1.2.3