summaryrefslogtreecommitdiff
path: root/opendc/opendc-compute
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-02-14 12:43:29 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-02-14 12:50:35 +0100
commit92e858e398bf69380dbacebc042dde2bfa8cfe9c (patch)
treea7431f3d74dd449d5c6053e77b4cb60cdb36d924 /opendc/opendc-compute
parent5095d42c0a1fe0a593c84bccfdd594712e12ca1a (diff)
refactor: Integrate opendc-compute in existing model
This change refactors the existing model to use the new interfaces from the opendc-compute module.
Diffstat (limited to 'opendc/opendc-compute')
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/Server.kt1
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/FakeBareMetalDriver.kt12
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/ProvisioningService.kt7
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningService.kt1
-rw-r--r--opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/metal/service/SimpleProvisioningServiceTest.kt7
5 files changed, 20 insertions, 8 deletions
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<ProvisioningService>(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)