2024-03-15 17:55:28 +00:00
package static
2024-03-15 03:56:49 +00:00
import (
"context"
"net/http"
2024-03-15 17:55:28 +00:00
"git.staur.ca/stobbsm/clustvirt/view/layouts"
2024-03-15 03:56:49 +00:00
"git.staur.ca/stobbsm/clustvirt/view/components"
)
// HomePage is the homepage, generated via templ components
func HomePage ( w http . ResponseWriter , r * http . Request ) {
defer r . Body . Close ( )
ibWhatIsThis := components . InfoBox (
components . InfoBoxConfig {
2024-03-15 17:55:28 +00:00
ColourClass : "uigreen" ,
InFlex : true ,
FlexBasis : "basis-1/3" ,
2024-03-15 03:56:49 +00:00
} ,
"What is this?" ,
components . ContentP (
` Clustvirt ( work in progress name ) aims to be the agnostic
cluster controller for libvirtd . The server component is
used to display both the WebUI and run the REST API used to
control one to many libvirtd hosts to manage virual machines ,
LXC containers ( through libvirtd ) , gather information about
each host , and monitor each host . ` ,
) ,
)
ibWhy := components . InfoBox (
components . InfoBoxConfig {
2024-03-15 17:55:28 +00:00
ColourClass : "uiyellow" ,
InFlex : true ,
FlexBasis : "basis-2/3" ,
2024-03-15 03:56:49 +00:00
} ,
"Why?" ,
components . ContentList (
"informational" ,
[ ] string {
"Broadcom buying VMWare, and VMWare losing a free teir for homelabbers pissed me off" ,
"Vendor lock-in pisses me off" ,
"Even good open source Hyperconverged systems (Proxmox, as an example) exhibit a form of vendor lock-in" ,
"Libvirt is terrific, has the functionality for everything those other providers do, but there really is not a great option for those dipping their toes into Open Source" ,
"Its fun to build things that solve a need" ,
"I really want to do it" ,
} ,
) ,
)
ibProjectGoals := components . InfoBox (
components . InfoBoxConfig {
2024-03-15 17:55:28 +00:00
ColourClass : "uiorange" ,
InFlex : true ,
FlexBasis : "basis-7/12" ,
2024-03-15 03:56:49 +00:00
} ,
"Project Goals" ,
components . ContentList (
"accepted" ,
[ ] string {
"Open source, currently on the MIT license" ,
"Base OS Agnostic. If it can run libvirtd, this should be able to control it on some level" ,
"Control the Virtual Machine life cycle on one or more libvirtd hosts" ,
"Add clusting capabilities to libvirtd host, including;" ,
"Migration of VMs" ,
"Syncronizing secrets" ,
"Syncronizing VLANs, bridges, host only networking" ,
"Sharing HA storage availability" ,
"Locking shared resources like disks" ,
"Starting VMs marked for HA on another host when one goes down" ,
"Manage a library of Cloud-init resources and templates to build new VMs quickly" ,
"Local Storage management, including local directory, lvm, zfs (if installed)" ,
"Advanced Storage management, such as Ceph, glusterfs, drbd, iscsi, nfs" ,
"Storage syncronization of local disks between hosts (zfs snapshots, lvm snapshots, rsync)" ,
"Backup scheduling, creation, restoration" ,
} ,
) ,
)
ibStretchGoals := components . InfoBox (
components . InfoBoxConfig {
2024-03-15 17:55:28 +00:00
ColourClass : "uiblue" ,
InFlex : true ,
FlexBasis : "basis-5/12" ,
2024-03-15 03:56:49 +00:00
} ,
"Stretch Goals" ,
components . ContentList (
"possible" ,
[ ] string {
"Install the OS which libvirtd is running on" ,
"Install/provision libvirtd on a host that does not have it installed" ,
"Tools to move from one vendor to clustvirt/libvirtd" ,
"VM templates for common aspects of VM creation and management, like appliances" ,
"External tool access that can be used to manage things that are not managed here (cephadm dashboard, for instance)" ,
} ,
) ,
)
ibRedditRequested := components . InfoBox (
components . InfoBoxConfig {
2024-03-15 17:55:28 +00:00
ColourClass : "uired" ,
InFlex : true ,
FlexBasis : "basis-8/12" ,
2024-03-15 03:56:49 +00:00
} ,
"Reddit Requested Features" ,
components . ContentList (
"possible" ,
[ ] string {
"Search/Filter on hosts/vms - @Lopsided_Speaker_553" ,
"Balance on resource usage per host/Automattically migrate to least used host - @Lopsided_Speaker_553" ,
"Support inter-vm only commmunication (VxLAN style) - @Lopsided_Speaker_553" ,
"Deploy VMs using only API - @Lopsided_Speaker_553" ,
"Well documented, first class API - @kasperlitheater" ,
"Bootstrap service to configure a new server - @phatpappa_" ,
"For the love of kitten, don't use XML as configuration files - @pascalbrax" ,
"Expose the Cluster Manager functionalities as API - @raven2611" ,
"CPU architecture awareness for migrations - @raven2611" ,
"Inter VM Communications via VXLAN/EVPN - @raven2611" ,
} ,
) ,
)
ibNeverHappening := components . InfoBox (
components . InfoBoxConfig {
2024-03-15 17:55:28 +00:00
ColourClass : "uiyellow" ,
InFlex : true ,
FlexBasis : "basis-4/12" ,
2024-03-15 03:56:49 +00:00
} ,
"Never Going to Happen" ,
components . ContentList (
"never" ,
[ ] string {
"Kubernetes" ,
"Application container management (docker, podman, etc)" ,
"Become an OS" ,
"Have a paywall" ,
"Vendor lock-in" ,
"Become a commercial entity (even indirectly)" ,
"Anything that does not have an Open Source standard behind it" ,
"Directly control a guest Operating System" ,
} ,
) ,
)
2024-03-15 17:55:28 +00:00
idx := layouts . StaticPage (
layouts . StaticPageConfig {
MainTitle : "ClustVirt" ,
SubTitle : "Libvirt, clustered and managed" ,
} ,
2024-03-15 03:56:49 +00:00
components . FlexRow (
true ,
ibWhatIsThis ,
ibWhy ,
) ,
components . FlexRow (
true ,
ibProjectGoals ,
ibStretchGoals ,
) ,
components . FlexRow (
true ,
ibRedditRequested ,
ibNeverHappening ,
) ,
)
idx . Render ( context . Background ( ) , w )
}