harvester / harvester Goto Github PK
View Code? Open in Web Editor NEWOpen source hyperconverged infrastructure (HCI) software
Home Page: https://harvesterhci.io/
License: Apache License 2.0
Open source hyperconverged infrastructure (HCI) software
Home Page: https://harvesterhci.io/
License: Apache License 2.0
Description:
In the UI the image status showing as active
when uploading image was failed, e.g
status:
appliedUrl: https://launchpad.net/cirros/trunk/0.3.2/+download/cirros-0.3.2-source.tar.gz
conditions:
- lastUpdateTime: "2020-08-18T10:43:46+08:00"
message: started image importing
reason: 'Get http://example.com:9000/vm-images/?location=: dial tcp 93.184.216.34:9000:
i/o timeout'
status: "False"
type: imported
downloadUrl: ""
progress: 0
Expected:
change status to failed
and display the error message.
Description:
user should be able to config the number of VM instances they want to create on the creating page
Description:
no bootable disk found after creating VM using CDI volume.
When the default version is set for the template, the version will be cleared
add USB-tablet enhancement to the QEMU config that allowing the mouse to report its position without having to grab the mouse.
https://www.qemu.org/docs/master/system/usb.html
This is a feature request:
Add a CRD to store user-customized ssh-keys, the user will need to specify the key name and public SSH key.
add a serial console to the VM using /apis/subresources.kubevirt.io/v1alpha3/virtualmachineinstances/console
Improvement:
The meaning of the env names of VM storage service is not clear enough, it should be compatible with other S3(Object storage) services.
Reference:
Clarify the env names of VM storage service, the following is a feasible proposal.
MINIO_ACCESS_KEY
-> VM_STORAGE_ACCESS_KEY
MINIO_SECRET_KEY
-> VM_STORAGE_SECRET_KEY
MINIO_URL
-> VM_STORAGE_ENDPOINT
TODO:
when trying to run ./bin/harvester, --image-storage flags are not set, and there is little explanation of what they should be set to.
what should they be set to in order to run harvester?
Problem:
When a user deletes an image from the UI the API shows the object is successfully removed, but the WebSocket will continue to push the deleted object to the frontend.
Expected Solution:
WebSocket should not continue to pushing deleted objects.
TODO
remove go vendor but still add go mod tidy
add image metadata ns:name
to the dataVolume template annotations when creating the VirtualMachine, therefore user/UI will be able to know which image the URL is related.
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
spec:
dataVolumeTemplates:
- metadata:
annotations:
harvester.cattle.io/imageId: default:myimage ## add image metadata annotation with `ns:name`
name: lawr-ubuntu
spec:
pvc: {...}
source:
http:
url: http://minio.default:9000/vm-images/xxxxx
template:
metadata:
creationTimestamp: null
labels:
kubevirt.io/vm: lawr-ubuntu
spec: {...}
when add a new vm, state is not refresh
set QEMU boot-order (virtual hard drive first and CD-ROM second)
Description:
add embedded/system templates that do not require pre-existing images
need to add Drone CI for the harvester-ui
Issue:
currently, the display name is auto-generated by its URL name and we don't validate whether its name is duplicated or not, the backend should add validation to this.
Solution:
The backed API should validate the display name and auto-increment the display name by 1. e.g os-aaacc
to os-aaacc1
few harvester-UI designs and feature changes:
This is a feature request:
Description:
improve image file validation, check whether CDI or QEMU have tools to validate the correct image type and content
goroutine 590 [running]:
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/runtime.logPanic(0x1800d20, 0x2b39d20)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:74 +0xa3
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:48 +0x82
panic(0x1800d20, 0x2b39d20)
/usr/local/go/src/runtime/panic.go:679 +0x1b2
github.com/rancher/harvester/pkg/controller/master/template.(*templateHandler).OnChanged(0xc000415320, 0xc00213a0a0, 0x18, 0x0, 0x7265736572703a66, 0x203000, 0x2273646c6569466e)
/go/src/github.com/rancher/harvester/pkg/controller/master/template/template_controller.go:16 +0x26
github.com/rancher/harvester/pkg/generated/controllers/vm.cattle.io/v1alpha1.FromTemplateHandlerToHandler.func1(0xc00213a0a0, 0x18, 0x0, 0x0, 0x19b07e0, 0x697461746f6e6e61, 0x7b3a22736e6f, 0x60)
/go/src/github.com/rancher/harvester/pkg/generated/controllers/vm.cattle.io/v1alpha1/template.go:103 +0xdb
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.SharedControllerHandlerFunc.OnChange(0xc0003f2b80, 0xc00213a0a0, 0x18, 0x0, 0x0, 0x65697061225c3a22, 0x408c5b, 0x1afa3a0, 0xc000217320)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/sharedcontroller.go:29 +0x4e
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*sharedHandler).OnChange(0xc0007140f0, 0xc00213a0a0, 0x18, 0x0, 0x0, 0x42d200, 0x0)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/sharedhandler.go:65 +0x150
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).syncHandler(0xc000324fd0, 0xc00213a0a0, 0x18, 0xc000a794d0, 0xc000bdad30)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:208 +0x122
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).processSingleItem(0xc000324fd0, 0x176d800, 0xc00271e610, 0x0, 0x0)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:193 +0xf0
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).processNextWorkItem(0xc000324fd0, 0xc000ba2e40)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:170 +0x51
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).runWorker(0xc000324fd0)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:159 +0x2b
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1(0xc0007494b0)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155 +0x5e
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.BackoffUntil(0xc0007494b0, 0x1c8c640, 0xc000648000, 0xc000bd4001, 0xc0000e2420)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156 +0xa3
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc0007494b0, 0x3b9aca00, 0x0, 0x3a2265706f637301, 0xc0000e2420)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0xe2
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.Until(0xc0007494b0, 0x3b9aca00, 0xc0000e2420)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90 +0x4d
created by github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).run
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:130 +0x35e
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x130 pc=0x15b1066]
goroutine 590 [running]:
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:55 +0x105
panic(0x1800d20, 0x2b39d20)
/usr/local/go/src/runtime/panic.go:679 +0x1b2
github.com/rancher/harvester/pkg/controller/master/template.(*templateHandler).OnChanged(0xc000415320, 0xc00213a0a0, 0x18, 0x0, 0x7265736572703a66, 0x203000, 0x2273646c6569466e)
/go/src/github.com/rancher/harvester/pkg/controller/master/template/template_controller.go:16 +0x26
github.com/rancher/harvester/pkg/generated/controllers/vm.cattle.io/v1alpha1.FromTemplateHandlerToHandler.func1(0xc00213a0a0, 0x18, 0x0, 0x0, 0x19b07e0, 0x697461746f6e6e61, 0x7b3a22736e6f, 0x60)
/go/src/github.com/rancher/harvester/pkg/generated/controllers/vm.cattle.io/v1alpha1/template.go:103 +0xdb
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.SharedControllerHandlerFunc.OnChange(0xc0003f2b80, 0xc00213a0a0, 0x18, 0x0, 0x0, 0x65697061225c3a22, 0x408c5b, 0x1afa3a0, 0xc000217320)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/sharedcontroller.go:29 +0x4e
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*sharedHandler).OnChange(0xc0007140f0, 0xc00213a0a0, 0x18, 0x0, 0x0, 0x42d200, 0x0)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/sharedhandler.go:65 +0x150
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).syncHandler(0xc000324fd0, 0xc00213a0a0, 0x18, 0xc000a794d0, 0xc000bdad30)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:208 +0x122
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).processSingleItem(0xc000324fd0, 0x176d800, 0xc00271e610, 0x0, 0x0)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:193 +0xf0
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).processNextWorkItem(0xc000324fd0, 0xc000ba2e40)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:170 +0x51
github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).runWorker(0xc000324fd0)
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:159 +0x2b
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1(0xc0007494b0)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155 +0x5e
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.BackoffUntil(0xc0007494b0, 0x1c8c640, 0xc000648000, 0xc000bd4001, 0xc0000e2420)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156 +0xa3
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc0007494b0, 0x3b9aca00, 0x0, 0x3a2265706f637301, 0xc0000e2420)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0xe2
github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait.Until(0xc0007494b0, 0x3b9aca00, 0xc0000e2420)
/go/src/github.com/rancher/harvester/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90 +0x4d
created by github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller.(*controller).run
/go/src/github.com/rancher/harvester/vendor/github.com/rancher/lasso/pkg/controller/controller.go:130 +0x35e
add unit testing cases to the VM template and template version
Steps to replicate:
CentOS-7-x86_64-GenericCloud.qcow2.xz
Result:
The virtual machine cannot be created because of the invalid hostname
Suggestion:
It makes no sense that a user cannot create a virtual machine by using a generated name by default even though a hostname is not allowed to have any upper case.
If there is no way to have this kind of name to be saved, it's better to let the frontend convert the uppercase to lowercase before sending it to the backend.
This is a feature request:
Description:
user should be able to add a VM template with customized virtual machine spec, also it should be able to add a image that belongs to this template.
namespace:name
)I not find the vm ui,this repository is a plugin for rancher?
Be able to show the format when a VM image is imported.
The incentive is to handle root volume differently for iso image.
Improvement:
It's necessary to add testings to control the quality of Harvester.
Reference:
TODO:
Description:
Add action handlers to the kubevirt virtual machine object.
VM is pending with booting from hard disk
when using minimal-cloud image (e.g. https://cloud-images.ubuntu.com/minimal/releases/focal/release-20200729/ubuntu-20.04-minimal-cloudimg-amd64.img)
add unit testing cases to the image and key-pair
Description:
allow the user to manage VM through subresource APIs - e.g pause, unpause, reboot, rename, guestosinfo
add vm e2e and integration testing framework
Issue:
the ssh-key controller should auto-generate the fingerprint when uploading a new ssh key.
Expected solution
the fingerprint should be added automatically either user created from the UI, API or kubectl.
Description:
harvester.cattle.io
instead of vm.cattle.io
.add rancher VM UI with the following scope
It would be nice to show the root volume size when a VM image is selected.
add rancherVM helm chart, the current chart should include:
Issue:
kubevirt's datavoulems
and cdiconfigs
keep updating its managedFields.time
field and it leads to steve keeps refreshing its loaded schema.
Reproduce steps:
kubectl get crds -w
and the following two CRDs keeps updating
datavolumes.cdi.kubevirt.io 2020-07-15T05:52:53Z
cdiconfigs.cdi.kubevirt.io 2020-07-15T05:52:53Z
check the VM server logs and it will print refreshing schema message in every 2-3 seconds:
INFO[0013] Refreshing all schemas
INFO[0014] Refreshing all schemas
INFO[0014] APIVersion /v1 Kind Bindin
...
Expected:
there are two ways to address this issue:
managedFields.time
is introduced in k8s 1.18 and only used as object metadata, it should not be updated continuously - preferred
.Import an image from https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
Result:
ERRO[4747] error importing image from https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img: strconv.Atoi: parsing "": invalid syntax
The server hosting the image file may return a chunked response withoutContent-Length
header. In this case, the total file size is unknown until the import is finished. The percentage progress will be unavailable to the users. We might need to show the downloaded size instead(similar to chrome's download behavior).
Description:
When the user chooses to boot MV from the .iso
image by default the CD-ROM will be set as the 1st bootable disk in its VM config if the root disk is empty, and after the OS is installed successfully we should allow unmounting the CR-ROM disk easily through the action handler.
manual process:
cdrom
disk and volume.root-disk
is enabled.example of YAML:
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
name: gc-ubuntu-server
namespace: default
spec:
dataVolumeTemplates:
- metadata:
name: gc-simple-iso
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
source:
http:
url: http://172.16.0.254:8080/ubuntu-18.04.4-live-server-amd64.iso
- metadata:
name: gc-simple-root
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
source:
blank: {}
running: true
template:
spec:
domain:
cpu:
cores: 1
devices:
disks:
- cdrom:
bus: sata
readonly: true
name: cdrom-disk
bootOrder: 2
- disk:
bus: virtio
name: datavolumedisk1
bootOrder: 1
resources:
requests:
memory: 2048M
volumes:
- dataVolume:
name: gc-simple-iso
name: cdrom-disk
- dataVolume:
name: gc-simple-root
name: datavolumedisk1
apiVersio: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
name: gc-ubuntu-server
namespace: default
spec:
dataVolumeTemplates:
- metadata:
name: gc-simple-root
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
source:
blank: {}
running: true
template:
spec:
domain:
cpu:
cores: 1
devices:
disks:
- disk:
bus: virtio
name: datavolumedisk1
machine:
type: q35
resources:
requests:
memory: 2048M
volumes:
- dataVolume:
name: gc-simple-root
name: datavolumedisk1
Description:
While uploading a new ssh-key, the UI should auto-generate the ssh-key name by its public key
Description:
Description:
both schema validation and generation are missing for the harvester CRD, better to add it since it will add properly schema check.
usage please refer to https://book.kubebuilder.io/reference/markers.html
1. Create a VM with no image selected, the create button turns to created - Validated
2. Create a VM with the only image selected, the page title disappears - Validated
3. An image just can be searched by using the accurate criteria, e.g., if a user searches the image by using the keyword cent
, it will just filter out all the items contains cent
accurately. (Case sensitive) - Validated
4. Choose a Size, CPU and Memory textboxes are allowed to fill in non-numeric values if a user is using a Chinese input method - Validated
5. Choose a Size, CPU and Memory textboxes are allowed to fill in a super large number, and they finally turn into infinity - Validated
6. Add a disk, there is no limit length on the Name, users can name it with a very very long string. Size has no limit as well, after clicking the show advanced
, there is show advanced
still displaying. Edit a disk, it still pops up a 'Add a disk' prompt - Validated
7. Add a networking interface, there is no limit length on the Name and Networking Name, users can name it with a very very long string, size has no limit as well. Edit a networking interface, it still pops up a 'Add a networking interface' prompt. An invalid Mac Address still can be saved - - Validated
8. Add an SSH key, the length limit for the Name is better to be set in the front end. the SSH-Key label overlaps the content in the textbox. - Will keep tracking it
Description:
allow the user to persist data volumes while deleting the VM so it can be reused later.
TODO:
ui-index
setting with value: local
Description:
set default template version when a new template is created
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.