Merge remote-tracking branch 'origin/release/v3.2.x' into release/v3.x
This commit is contained in:
commit
bdcf6a60b3
29 changed files with 7568 additions and 121 deletions
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
# Run Qemu in Kubernetes Pods
|
||||
|
||||
The goal of this project is to provide the means for running Qemu
|
||||
based VMs in Kubernetes pods.
|
||||
The goal of this project is to provide easy to use and flexible components
|
||||
for running Qemu based VMs in Kubernetes pods.
|
||||
|
||||
See the [project's home page](https://jdrupes.org/vm-operator/)
|
||||
for details.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ buildscript {
|
|||
plugins {
|
||||
id 'org.ajoberstar.grgit' version '5.2.0' apply false
|
||||
id 'org.ajoberstar.git-publish' version '4.2.0' apply false
|
||||
id 'pl.allegro.tech.build.axion-release' version '1.15.0' apply false
|
||||
id 'pl.allegro.tech.build.axion-release' version '1.17.2' apply false
|
||||
id 'org.jdrupes.vmoperator.versioning-conventions'
|
||||
id 'org.jdrupes.vmoperator.java-doc-conventions'
|
||||
id 'eclipse'
|
||||
id "com.github.node-gradle.node" version "7.0.1"
|
||||
|
|
|
|||
|
|
@ -1410,6 +1410,9 @@ spec:
|
|||
display:
|
||||
type: object
|
||||
properties:
|
||||
outputs:
|
||||
type: integer
|
||||
default: 1
|
||||
spice:
|
||||
type: object
|
||||
properties:
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public class K8sObserver<O extends KubernetesObject,
|
|||
api = new GenericKubernetesApi<>(objectClass, objectListClass,
|
||||
context.getGroup(), context.getPreferredVersion(),
|
||||
context.getResourcePlural(), client);
|
||||
thread = new Thread(() -> {
|
||||
thread = Thread.ofVirtual().unstarted(() -> {
|
||||
try {
|
||||
logger.config(() -> "Watching " + context.getResourcePlural()
|
||||
+ " (" + context.getPreferredVersion() + ")"
|
||||
|
|
@ -100,7 +100,7 @@ public class K8sObserver<O extends KubernetesObject,
|
|||
while (changed.hasNext()) {
|
||||
handler.accept(client, changed.next());
|
||||
}
|
||||
} catch (ApiException e) {
|
||||
} catch (ApiException | RuntimeException e) {
|
||||
logger.log(Level.FINE, e, () -> "Problem watching"
|
||||
+ " (will retry): " + e.getMessage());
|
||||
delayRestart(startedAt);
|
||||
|
|
@ -117,7 +117,6 @@ public class K8sObserver<O extends KubernetesObject,
|
|||
}
|
||||
}
|
||||
});
|
||||
thread.setDaemon(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ plugins {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
api 'org.jgrapes:org.jgrapes.core:[1.19.0,2)'
|
||||
api 'org.jgrapes:org.jgrapes.core:[1.21.0,2)'
|
||||
api project(':org.jdrupes.vmoperator.common')
|
||||
api 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:[2.16.1,3]'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,15 +13,14 @@ dependencies {
|
|||
|
||||
implementation 'commons-cli:commons-cli:1.5.0'
|
||||
|
||||
implementation 'org.jgrapes:org.jgrapes.core:[1.19.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.io:[2.7.0,3)'
|
||||
implementation 'org.jgrapes:org.jgrapes.http:[3.1.0,4)'
|
||||
implementation 'org.jgrapes:org.jgrapes.util:[1.34.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.util:[1.36.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.io:[2.11.0,3)'
|
||||
implementation 'org.jgrapes:org.jgrapes.http:[3.5.0,4)'
|
||||
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.base:[1.7.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.base:[1.8.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.vuejs:[1.5.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.rbac:[1.3.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconlet.oidclogin:[1.6.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.rbac:[1.4.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconlet.oidclogin:[1.7.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconlet.markdowndisplay:[1.2.0,2)'
|
||||
|
||||
runtimeOnly 'org.jgrapes:org.jgrapes.webconlet.sysinfo:[1.4.0,2)'
|
||||
|
|
@ -47,6 +46,7 @@ application {
|
|||
|
||||
project.ext.gitBranch = grgit.branch.current.name.replace('/', '-')
|
||||
def registry = "${project.rootProject.properties['docker.registry']}"
|
||||
def rootVersion = rootProject.version
|
||||
|
||||
task buildImage(type: Exec) {
|
||||
dependsOn installDist
|
||||
|
|
@ -70,7 +70,7 @@ task pushImage(type: Exec) {
|
|||
task tagWithVersion(type: Exec) {
|
||||
dependsOn pushImage
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
|
||||
commandLine 'podman', 'push', \
|
||||
"${project.name}:${project.gitBranch}",\
|
||||
|
|
@ -80,9 +80,9 @@ task tagWithVersion(type: Exec) {
|
|||
task tagAsLatest(type: Exec) {
|
||||
dependsOn tagWithVersion
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
&& !project.version.contains("alpha") \
|
||||
&& !project.version.contains("beta") \
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
&& !rootVersion.contains("alpha") \
|
||||
&& !rootVersion.contains("beta") \
|
||||
|| project.rootProject.properties['docker.testRegistry'] \
|
||||
&& project.rootProject.properties['docker.registry'] \
|
||||
== project.rootProject.properties['docker.testRegistry']
|
||||
|
|
|
|||
|
|
@ -201,6 +201,9 @@ data:
|
|||
</#list>
|
||||
|
||||
display:
|
||||
<#if cr.spec.vm.display.outputs?? >
|
||||
outputs: ${ cr.spec.vm.display.outputs.asInt?c }
|
||||
</#if>
|
||||
<#if cr.spec.vm.display.spice??>
|
||||
spice:
|
||||
port: ${ cr.spec.vm.display.spice.port.asInt?c }
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ plugins {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'org.jgrapes:org.jgrapes.core:[1.19.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.io:[2.7.0,3)'
|
||||
implementation 'org.jgrapes:org.jgrapes.http:[3.1.0,4)'
|
||||
implementation 'org.jgrapes:org.jgrapes.util:[1.31.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.core:[1.21.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.util:[1.36.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.io:[2.11.0,3)'
|
||||
implementation 'org.jgrapes:org.jgrapes.http:[3.5.0,4)'
|
||||
implementation project(':org.jdrupes.vmoperator.common')
|
||||
|
||||
implementation 'commons-cli:commons-cli:1.5.0'
|
||||
|
|
@ -33,6 +33,7 @@ application {
|
|||
|
||||
project.ext.gitBranch = grgit.branch.current.name.replace('/', '-')
|
||||
def registry = "${project.rootProject.properties['docker.registry']}"
|
||||
def rootVersion = rootProject.version
|
||||
|
||||
task buildImageArch(type: Exec) {
|
||||
dependsOn installDist
|
||||
|
|
@ -54,7 +55,7 @@ task pushImageArch(type: Exec) {
|
|||
task tagWithVersionArch(type: Exec) {
|
||||
dependsOn pushImageArch
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
|
||||
commandLine 'podman', 'push', \
|
||||
"${project.name}-arch:${project.gitBranch}",\
|
||||
|
|
@ -64,9 +65,9 @@ task tagWithVersionArch(type: Exec) {
|
|||
task tagAsLatestArch(type: Exec) {
|
||||
dependsOn tagWithVersionArch
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
&& !project.version.contains("alpha") \
|
||||
&& !project.version.contains("beta") \
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
&& !rootVersion.contains("alpha") \
|
||||
&& !rootVersion.contains("beta") \
|
||||
|| project.rootProject.properties['docker.testRegistry'] \
|
||||
&& project.rootProject.properties['docker.registry'] \
|
||||
== project.rootProject.properties['docker.testRegistry']
|
||||
|
|
@ -96,7 +97,7 @@ task pushImageAlpine(type: Exec) {
|
|||
task tagWithVersionAlpine(type: Exec) {
|
||||
dependsOn pushImageAlpine
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
|
||||
commandLine 'podman', 'push', \
|
||||
"${project.name}-alpine:${project.gitBranch}",\
|
||||
|
|
@ -106,9 +107,9 @@ task tagWithVersionAlpine(type: Exec) {
|
|||
task tagAsLatestAlpine(type: Exec) {
|
||||
dependsOn tagWithVersionAlpine
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
&& !project.version.contains("alpha") \
|
||||
&& !project.version.contains("beta") \
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
&& !rootVersion.contains("alpha") \
|
||||
&& !rootVersion.contains("beta") \
|
||||
|| project.rootProject.properties['docker.testRegistry'] \
|
||||
&& project.rootProject.properties['docker.registry'] \
|
||||
== project.rootProject.properties['docker.testRegistry']
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
+30
|
||||
+1800
|
||||
|
|
@ -245,6 +245,9 @@ public class Configuration implements Dto {
|
|||
*/
|
||||
public static class Display implements Dto {
|
||||
|
||||
/** The number of outputs. */
|
||||
public int outputs = 1;
|
||||
|
||||
/** The spice. */
|
||||
public Spice spice;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,7 +137,8 @@
|
|||
- [ "-device", "virtio-rng-pci,rng=objrng0,id=rng0" ]
|
||||
# * Graphics and Audio Card
|
||||
# This is the only video "card" without a flickering cursor.
|
||||
- [ "-device", "virtio-vga,id=video0,max_outputs=1" ]
|
||||
- [ "-device", "virtio-vga,id=video0,max_outputs=${ vm.display.outputs },\
|
||||
max_hostmem=${ (vm.display.outputs * 256 * 1024 * 1024)?c }" ]
|
||||
- [ "-device", "ich9-intel-hda,id=sound0" ]
|
||||
# Network
|
||||
<#assign nwCounter = 0/>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ plugins {
|
|||
dependencies {
|
||||
implementation project(':org.jdrupes.vmoperator.manager.events')
|
||||
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.base:[1.3.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.base:[1.8.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.provider.vue:[1,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.provider.jgwcvuecomponents:[1.2,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.provider.chartjs:[1.2,2)'
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ plugins {
|
|||
dependencies {
|
||||
implementation project(':org.jdrupes.vmoperator.manager.events')
|
||||
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.base:[1.7.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.base:[1.8.0,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.provider.vue:[1,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.provider.jgwcvuecomponents:[1.2,2)'
|
||||
implementation 'org.jgrapes:org.jgrapes.webconsole.provider.chartjs:[1.2,2)'
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
position: absolute;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 100;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,5 +3,8 @@ A Kubernetes operator for running VMs as pods.
|
|||
VM-Operator
|
||||
===========
|
||||
|
||||
The VM-operator is built on the [JGrapes](https://mnlipp.github.io/jgrapes/)
|
||||
event driven framework.
|
||||
The VM-operator enables you to easily run Qemu based VMs as pods
|
||||
in Kubernetes. It is built on the
|
||||
[JGrapes](https://mnlipp.github.io/jgrapes/) event driven framework.
|
||||
|
||||
See the project's [home page](https://jdrupes.org/vm-operator/) for details.
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ dependencies {
|
|||
|
||||
project.ext.gitBranch = grgit.branch.current.name.replace('/', '-')
|
||||
def registry = "${project.rootProject.properties['docker.registry']}"
|
||||
def rootVersion = rootProject.version
|
||||
|
||||
task buildImage(type: Exec) {
|
||||
inputs.files 'Containerfile'
|
||||
|
|
@ -26,7 +27,7 @@ task pushImage(type: Exec) {
|
|||
task tagWithVersion(type: Exec) {
|
||||
dependsOn pushImage
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
|
||||
commandLine 'podman', 'push', \
|
||||
"${project.name}:${project.gitBranch}",\
|
||||
|
|
@ -36,9 +37,9 @@ task tagWithVersion(type: Exec) {
|
|||
task tagAsLatest(type: Exec) {
|
||||
dependsOn tagWithVersion
|
||||
|
||||
enabled = !project.version.contains("SNAPSHOT")
|
||||
&& !project.version.contains("alpha") \
|
||||
&& !project.version.contains("beta") \
|
||||
enabled = !rootVersion.contains("SNAPSHOT")
|
||||
&& !rootVersion.contains("alpha") \
|
||||
&& !rootVersion.contains("beta") \
|
||||
|| project.rootProject.properties['docker.testRegistry'] \
|
||||
&& project.rootProject.properties['docker.registry'] \
|
||||
== project.rootProject.properties['docker.testRegistry']
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
<header>
|
||||
<div>
|
||||
<div style="float: left;">
|
||||
<h1><a style="color: #222;" href="http://vm-operator.jdrupes.org">VM-Operator</a></h1>
|
||||
<h3>By <a href="https://github.com/mnlipp">Michael N. Lipp</a></h3>
|
||||
<div class="index-title"><a style="color: #222;" href="https://jdrupes.org/vm-operator/">VM-Operator</a></div>
|
||||
<div class="index-subtitle">By <a href="https://github.com/mnlipp/">Michael N. Lipp</a></div>
|
||||
<p><a rel="me" href="https://fosstodon.org/@mnl"><img alt="Mastodon Follow"
|
||||
src="https://img.shields.io/mastodon/follow/108843609567976408?domain=https%3A%2F%2Ffosstodon.org&style=social"></a></p>
|
||||
</div>
|
||||
|
|
@ -40,11 +40,11 @@
|
|||
<ul style="margin-bottom: 0;" class="no-bullets">
|
||||
<li><p class="part-entry"><a href="controller.html">The Controller</a></p></li>
|
||||
</ul>
|
||||
<p class="part-list-title"><a href="webgui.html">The Web-GUI</a></p>
|
||||
<p class="part-list-title"><a href="webgui.html">Web interface</a></p>
|
||||
<ul style="margin-bottom: 0;" class="no-bullets">
|
||||
<li><p class="part-entry"><a href="admin-gui.html">For Admins</a></p></li>
|
||||
<li><p class="part-entry"><a href="user-gui.html">For Users</a></p></li>
|
||||
</ulstyle="margin-bottom: 0;">
|
||||
</ul>
|
||||
<p class="part-list-title"><a href="upgrading.html">Upgrading</a></p>
|
||||
<p class="part-list-title"><a href="latest-release/javadoc/index.html">Javadoc</a></p>
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ body {
|
|||
color:#595959;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
h1, h2, h3, h4, h5, h6, .index-title, .index-subtitle {
|
||||
color:#222;
|
||||
margin:0 0 20px;
|
||||
}
|
||||
|
|
@ -14,11 +14,11 @@ p, ul, ol, table, pre, dl {
|
|||
margin:0 0 20px;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
h1, h2, h3, .index-title, .index-subtitle {
|
||||
line-height:1.1;
|
||||
}
|
||||
|
||||
h1 {
|
||||
h1, .index-title {
|
||||
font-size:28px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
|
@ -28,11 +28,15 @@ h2 {
|
|||
font-weight: 500;
|
||||
}
|
||||
|
||||
h3, h4, h5, h6 {
|
||||
h3, h4, h5, h6, .index-subtitle {
|
||||
color:#494949;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.index-subtitle {
|
||||
font-size: 1.17em;
|
||||
}
|
||||
|
||||
a {
|
||||
color:#39c;
|
||||
text-decoration:none;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
viewBox="0 0 331.50461 323.22329"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="VM-Operator.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
|
|
@ -25,9 +25,9 @@
|
|||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="245"
|
||||
inkscape:cy="145.71429"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="190.35714"
|
||||
inkscape:cy="178.57143"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
|
|
@ -171,12 +171,12 @@
|
|||
cy="-109.05605"
|
||||
r="9.2055216" />
|
||||
<g
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:180px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:0px;word-spacing:0px;fill:#238220;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:180px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:0px;word-spacing:0px;fill:#238220;fill-opacity:1;stroke:#ffffff;stroke-width:5.28893486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="flowRoot4814"
|
||||
transform="matrix(0.25165808,0,0,0.24991064,-709.96916,-218.52595)">
|
||||
transform="matrix(0.32800241,0,0,0.32572486,-723.34527,-233.01684)">
|
||||
<path
|
||||
d="m 210.10352,57.161102 h 25.92773 V 138.7236 q 0,15.9961 -2.8125,24.60938 -3.7793,11.25 -13.71094,18.10547 -9.93164,6.76757 -26.1914,6.76757 -19.07227,0 -29.35547,-10.63476 -10.28321,-10.72266 -10.3711,-31.37696 l 24.52149,-2.8125 q 0.43945,11.07422 3.25195,15.64454 4.21875,6.94336 12.83203,6.94336 8.70117,0 12.30469,-4.92188 3.60352,-5.00977 3.60352,-20.6543 z"
|
||||
style="fill:#238220;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
|
||||
style="fill:#238220;fill-opacity:1;stroke:#ffffff;stroke-width:5.28893486;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4823"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: VM-Operator Web-GUI for Admins
|
||||
title: "VM-Operator: Administrator View — Provides an overview of running VMs"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: VM-Operator Controller
|
||||
title: "VM-Operator: Controller — Reconciles the VM CRs"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -2,23 +2,20 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="10.64148mm"
|
||||
height="12.555316mm"
|
||||
viewBox="0 0 37.706033 44.487341"
|
||||
width="93.557968mm"
|
||||
height="91.220795mm"
|
||||
viewBox="0 0 331.50461 323.22329"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="ML-Logo1.svg"
|
||||
inkscape:export-filename="/home/mnl/Dokumente/mnl/ML-Logo1.png"
|
||||
inkscape:export-xdpi="299.41104"
|
||||
inkscape:export-ydpi="299.41104">
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="VM-Operator.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
|
|
@ -29,20 +26,23 @@
|
|||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="132.46074"
|
||||
inkscape:cy="-297.07411"
|
||||
inkscape:cx="245"
|
||||
inkscape:cy="145.71429"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="1"
|
||||
fit-margin-left="1"
|
||||
fit-margin-right="1"
|
||||
fit-margin-bottom="1"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1" />
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
|
|
@ -51,7 +51,6 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
|
|
@ -59,30 +58,127 @@
|
|||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-175.34341,-117.71255)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="187.14285"
|
||||
y="150.93362"
|
||||
id="text3370"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3372"
|
||||
x="187.14285"
|
||||
y="150.93362"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono'">M</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:51.30387497px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="173.50081"
|
||||
y="158.65659"
|
||||
id="text3370-6"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3372-5"
|
||||
x="173.50081"
|
||||
y="158.65659"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono'">L</tspan></text>
|
||||
transform="translate(799.83239,410.74206)">
|
||||
<g
|
||||
id="path300"
|
||||
inkscape:transform-center-x="-0.49891951"
|
||||
inkscape:transform-center-y="-10.814906"
|
||||
transform="matrix(0.93749998,0,0,0.93749998,-364.15225,128.12438)">
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#326de6;fill-opacity:1;stroke:#ffffff;stroke-linecap:square;stroke-miterlimit:0;paint-order:fill markers stroke"
|
||||
id="path1033"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="7"
|
||||
sodipodi:cx="-790.008"
|
||||
sodipodi:cy="-357.15076"
|
||||
sodipodi:r1="221.23064"
|
||||
sodipodi:r2="199.10757"
|
||||
sodipodi:arg1="1.1215879"
|
||||
sodipodi:arg2="1.5605315"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -693.93801,-157.86816 -94.02622,-0.18551 -97.95052,0.26412 -58.47935,-73.62832 -61.2776,-76.41613 21.10362,-91.6275 21.53854,-95.55347 84.79518,-40.6293 88.13578,-42.7371 84.6342,40.96358 88.36497,42.26117 20.74194,91.71007 22.05354,95.43592 -58.76943,73.39699 z"
|
||||
transform="matrix(0.81788201,0,0,0.81788201,358.19384,-101.37507)"
|
||||
inkscape:transform-center-x="1.2804791"
|
||||
inkscape:transform-center-y="-8.9686433" />
|
||||
</g>
|
||||
<g
|
||||
aria-label="VM"
|
||||
id="text300"
|
||||
style="font-size:16.6665px;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;fill:none;stroke:#ffffff;stroke-width:1.04165">
|
||||
<g
|
||||
id="path305">
|
||||
<path
|
||||
style="color:#000000;-inkscape-font-specification:'Nimbus Sans Narrow, Bold Semi-Condensed';fill:#ff6600;stroke:none;-inkscape-stroke:none"
|
||||
d="m -698.0792,-217.35754 -25.39961,-109.59835 h -26.39961 l 39.59941,143.59784 h 23.39965 l 39.99939,-143.59784 h -25.59961 z"
|
||||
id="path312" />
|
||||
<path
|
||||
style="color:#000000;-inkscape-font-specification:'Nimbus Sans Narrow, Bold Semi-Condensed';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||
d="m -750.5625,-327.47656 39.88672,144.63867 h 24.19141 l 40.29101,-144.63867 h -26.69922 l -25.18554,107.82226 -24.98633,-107.82226 z m 1.36719,1.04101 h 25.30273 l 25.30664,109.19532 1.01367,0.002 25.50586,-109.19727 h 24.50196 l -39.71094,142.55664 h -22.60742 z"
|
||||
id="path325" />
|
||||
</g>
|
||||
<g
|
||||
id="path307">
|
||||
<path
|
||||
style="color:#000000;-inkscape-font-specification:'Nimbus Sans Narrow, Bold Semi-Condensed';fill:#ff6600;stroke:none;-inkscape-stroke:none"
|
||||
d="m -518.28172,-326.95589 h -35.39947 l -21.19968,113.99829 -21.59968,-113.99829 h -35.79946 v 143.59784 h 22.79966 v -121.79817 l 21.79967,121.79817 h 24.19963 l 22.39967,-121.79817 v 121.79817 h 22.79966 z"
|
||||
id="path318" />
|
||||
<path
|
||||
style="color:#000000;-inkscape-font-specification:'Nimbus Sans Narrow, Bold Semi-Condensed';fill:#ffffff;stroke:none;-inkscape-stroke:none"
|
||||
d="m -632.80078,-327.47656 v 144.63867 h 23.8418 v -116.45313 l 20.84179,116.45313 h 25.07032 l 21.44531,-116.60742 v 116.60742 h 23.83984 v -144.63867 h -0.51953 -35.83203 l -20.77149,111.69726 -21.16406,-111.69726 z m 1.04101,1.04101 h 34.84766 l 21.51953,113.57422 1.02344,-0.002 21.12109,-113.57227 h 34.44532 v 142.55664 h -21.75782 v -121.27734 l -1.0332,-0.0937 -22.32031,121.37109 h -23.33008 l -21.72266,-121.36914 -1.03515,0.0918 v 121.27734 h -21.75782 z"
|
||||
id="path320" />
|
||||
</g>
|
||||
</g>
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136"
|
||||
cx="-691.58337"
|
||||
cy="-161.52753"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-8"
|
||||
cx="-671.12665"
|
||||
cy="-161.52753"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-1"
|
||||
cx="-650.66992"
|
||||
cy="-161.52753"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-2"
|
||||
cx="-630.2132"
|
||||
cy="-161.52753"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-8-8"
|
||||
cx="-681.66187"
|
||||
cy="-144.03705"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-1-9"
|
||||
cx="-661.20514"
|
||||
cy="-144.03705"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-2-3"
|
||||
cx="-640.74841"
|
||||
cy="-144.03705"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-8-6"
|
||||
cx="-671.53577"
|
||||
cy="-126.23969"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-1-8"
|
||||
cx="-651.07904"
|
||||
cy="-126.23969"
|
||||
r="9.2055216" />
|
||||
<circle
|
||||
style="fill:#6606b5;fill-opacity:1;stroke:#ffffff;stroke-width:1.07634;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4136-2-0"
|
||||
cx="-661.61426"
|
||||
cy="-109.05605"
|
||||
r="9.2055216" />
|
||||
<g
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:180px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:0px;word-spacing:0px;fill:#238220;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="flowRoot4814"
|
||||
transform="matrix(0.25165808,0,0,0.24991064,-709.96916,-218.52595)">
|
||||
<path
|
||||
d="m 210.10352,57.161102 h 25.92773 V 138.7236 q 0,15.9961 -2.8125,24.60938 -3.7793,11.25 -13.71094,18.10547 -9.93164,6.76757 -26.1914,6.76757 -19.07227,0 -29.35547,-10.63476 -10.28321,-10.72266 -10.3711,-31.37696 l 24.52149,-2.8125 q 0.43945,11.07422 3.25195,15.64454 4.21875,6.94336 12.83203,6.94336 8.70117,0 12.30469,-4.92188 3.60352,-5.00977 3.60352,-20.6543 z"
|
||||
style="fill:#238220;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
|
||||
id="path4823"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 8.5 KiB |
7329
webpages/vm-operator/index-pic.svg
Normal file
7329
webpages/vm-operator/index-pic.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 588 KiB |
|
|
@ -1,13 +1,15 @@
|
|||
---
|
||||
title: VM-Operator by mnlipp
|
||||
description: A Kubernetes operator for running virtual machines (notably Qemu VMs) in pods on Kubernetes
|
||||
title: Run Qemu based VMs on Kubernetes
|
||||
description: A Kubernetes operator for running virtual machines (notably Qemu VMs) in pods on Kubernetes with a web interface for admins and users.
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
# Welcome to VM-Operator
|
||||
|
||||
The goal of this project is to provide the means for running Qemu
|
||||
based VMs in Kubernetes pods.
|
||||

|
||||
|
||||
The goal of this project is to provide easy to use and flexible components
|
||||
for running Qemu based VMs in Kubernetes pods.
|
||||
|
||||
The image used for the VM pods combines Qemu and a control program
|
||||
for starting and managing the Qemu process. This application is called
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: VM-Operator Manager
|
||||
title: "VM-Operator: The Manager — Provides the controller and a web user interface"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
|
|
@ -7,7 +7,7 @@ layout: vm-operator
|
|||
|
||||
The Manager is the program that provides the controller from the
|
||||
[operator pattern](https://github.com/cncf/tag-app-delivery/blob/eece8f7307f2970f46f100f51932db106db46968/operator-wg/whitepaper/Operator-WhitePaper_v1-0.md#operator-components-in-kubernetes)
|
||||
together with a Web-GUI. It should be run in a container in the cluster.
|
||||
together with a web user interface. It should be run in a container in the cluster.
|
||||
|
||||
## Installation
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: VM-Operator Runner
|
||||
title: "VM-Operator: The Runner — Starts and monitors a VM"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: Upgrading
|
||||
title: "VM-Operator: Upgrading — Issues to watch out for"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: VM-Operator Web-GUI for Users
|
||||
title: "VM-Operator: User View — Allows users to manage their own VMs"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ spec:
|
|||
spice:
|
||||
port: 5930
|
||||
server: 192.168.19.32
|
||||
proxyUrl: http://lgpe-spice.some.host:1234
|
||||
proxyUrl: http://vms-spice.some.host:1234
|
||||
generateSecret: true
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
title: VM-Operator Web-GUI
|
||||
title: "VM-Operator: Web user interface — Provides easy access to VM management"
|
||||
layout: vm-operator
|
||||
---
|
||||
|
||||
# The Web-GUI
|
||||
# Web user interface
|
||||
|
||||
The manager component provides a GUI via a web server. The web GUI is
|
||||
The manager component provides a GUI via a web server. This web user interface is
|
||||
implemented using components from the
|
||||
[JGrapes WebConsole](https://jgrapes.org/WebConsole.html)
|
||||
project. Configuration of the GUI therefore follows the conventions
|
||||
|
|
@ -31,7 +31,7 @@ from the
|
|||
|
||||
## User Access
|
||||
|
||||
Access to the web GUI is controlled by the login conlet. The framework
|
||||
Access to the web user interface is controlled by the login conlet. The framework
|
||||
does not include sophisticated components for user management. Rather,
|
||||
it assumes that an OIDC provider is responsible for user authentication
|
||||
and role management.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue