summaryrefslogtreecommitdiff
path: root/opendc/opendc-compute/src
diff options
context:
space:
mode:
Diffstat (limited to 'opendc/opendc-compute/src')
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/Node.kt5
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt2
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt13
3 files changed, 12 insertions, 8 deletions
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/Node.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/Node.kt
index 7df5d99b..55948d3c 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/Node.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/Node.kt
@@ -44,6 +44,11 @@ data class Node(
public override val name: String,
/**
+ * Meta data of the node.
+ */
+ public val metadata: Map<String, Any> = emptyMap(),
+
+ /**
* The last known state of the compute node.
*/
public val state: NodeState,
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt
index 4fe8d740..4b9a03a6 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt
@@ -81,7 +81,7 @@ public class SimpleBareMetalDriver(
/**
* The machine state.
*/
- private var node: Node = Node(uid, name, NodeState.SHUTOFF, EmptyImage, null)
+ private var node: Node = Node(uid, name, mapOf("driver" to this), NodeState.SHUTOFF, EmptyImage, null)
set(value) {
if (field.state != value.state) {
domain.launch {
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt
index f0bb4e25..9fad2396 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt
@@ -44,8 +44,8 @@ class SimpleVirtProvisioningService(
init {
ctx.domain.launch {
- val provisionedNodes = provisioningService.nodes().toList()
- val deployedNodes = provisionedNodes.map { node ->
+ val provisionedNodes = provisioningService.nodes()
+ provisionedNodes.forEach { node ->
val hypervisorImage = HypervisorImage(hypervisorMonitor)
val deployedNode = provisioningService.deploy(node, hypervisorImage, this@SimpleVirtProvisioningService)
val server = deployedNode.server!!
@@ -55,6 +55,7 @@ class SimpleVirtProvisioningService(
0,
server.flavor.memorySize
)
+ hypervisors[server] = hvView
yield()
server.serviceRegistry[VirtDriver.Key].addMonitor(object : VirtDriverMonitor {
override suspend fun onUpdate(numberOfActiveServers: Int, availableMemory: Long) {
@@ -62,9 +63,7 @@ class SimpleVirtProvisioningService(
hvView.availableMemory = availableMemory
}
})
- server to hvView
}
- hypervisors.putAll(deployedNodes)
}
}
@@ -84,9 +83,10 @@ class SimpleVirtProvisioningService(
val imagesToBeScheduled = incomingImages.toSet()
for (imageInstance in imagesToBeScheduled) {
- println("Spawning $imageInstance")
val selectedNode = availableHypervisors.minWith(allocationPolicy().thenBy { it.server.uid }) ?: break
try {
+ println("Spawning ${imageInstance.image}")
+ incomingImages -= imageInstance
imageInstance.server = selectedNode.server.serviceRegistry[VirtDriver.Key].spawn(
imageInstance.image,
imageInstance.monitor,
@@ -97,7 +97,6 @@ class SimpleVirtProvisioningService(
println("Unable to deploy image due to insufficient memory")
}
- incomingImages -= imageInstance
}
}
@@ -117,7 +116,7 @@ class SimpleVirtProvisioningService(
}
}
- class ImageView(
+ data class ImageView(
val image: Image,
val monitor: ServerMonitor,
val flavor: Flavor,