HoneyComb

HoneyComb is a web interface for managing FreeBSD jails and Bhyve VMs.
Log | Files | Refs | README | LICENSE

commit 084cfd9bf5572652191d729cdda5f05be94ffd37
parent 271b8128ffaeea84a1ee738b6580fdec11f909aa
Author: Tyler Clark <tyler.clark@foxide.xyz>
Date:   Thu, 25 Sep 2025 21:45:33 -0400

Refactoring some function and working to get templates working.

I am refactoring some of the functions so I can pass data more easily.
Also working to figure out how to get the html templates to render properly,
currently the template block is rendering as HTML rather than rendering the HTML template.

Diffstat:
Mcmd/main.go | 51++++++++++++++++++++++++++++++++++++++++-----------
Astatic/buttons.html | 4++++
Mstatic/index.html | 16++++++++++------
3 files changed, 54 insertions(+), 17 deletions(-)

diff --git a/cmd/main.go b/cmd/main.go @@ -20,10 +20,9 @@ func helloHandler(w http.ResponseWriter, r *http.Request) { tmpl.Execute(w, map[string]string{"Name": "HTMX + Go"}) } -func j_start(w http.ResponseWriter, r *http.Request) { +func j_status(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("static/cmd.html")) - j_name := get_name(0) - cmd := exec.Command("doas", "service", "jail", "onestart", j_name); + cmd := exec.Command("jls"); output, err := cmd.Output() if err != nil { fmt.Println("Error:", err) @@ -33,10 +32,9 @@ func j_start(w http.ResponseWriter, r *http.Request) { tmpl.Execute(w, map[string]string{"Output": out}) } -func j_stop(w http.ResponseWriter, r *http.Request) { +func j_start(w http.ResponseWriter, r *http.Request, j_name string) { tmpl := template.Must(template.ParseFiles("static/cmd.html")) - j_name := get_name(0) - cmd := exec.Command("doas", "service", "jail", "onestop", j_name); + cmd := exec.Command("doas", "service", "jail", "onestart", j_name); output, err := cmd.Output() if err != nil { fmt.Println("Error:", err) @@ -46,9 +44,9 @@ func j_stop(w http.ResponseWriter, r *http.Request) { tmpl.Execute(w, map[string]string{"Output": out}) } -func j_status(w http.ResponseWriter, r *http.Request) { +func j_stop(w http.ResponseWriter, r *http.Request, j_name string) { tmpl := template.Must(template.ParseFiles("static/cmd.html")) - cmd := exec.Command("jls"); + cmd := exec.Command("doas", "service", "jail", "onestop", j_name); output, err := cmd.Output() if err != nil { fmt.Println("Error:", err) @@ -58,11 +56,42 @@ func j_status(w http.ResponseWriter, r *http.Request) { tmpl.Execute(w, map[string]string{"Output": out}) } +/* Example function to be able to pass arguments through */ +/* The web server handler */ +func handler(w http.ResponseWriter, r *http.Request, random string) { + tmpl := template.Must(template.ParseFiles("static/hello.html")) + tmpl.Execute(w, map[string]string{"Name": random}) +} + +/* This function handles rendering the buttons for the * +* various jails on the system, will be extented for * +* VMs as well. */ +func render_ui(w http.ResponseWriter, r *http.Request, j_name string) { + tmpl := template.Must(template.ParseFiles("static/buttons.html")) + tmpl.Execute(w, map[string]string{"j_name": j_name}) +} + func main() { + + test := "Tyler" + jail_name := "ca" + + http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) { + handler(w, r, test) + }) + + /* Start Jails */ + http.HandleFunc("/start", func(w http.ResponseWriter, r *http.Request) { + j_start(w, r, jail_name) + }) + + /* Stop Jails */ + http.HandleFunc("/stop", func(w http.ResponseWriter, r *http.Request) { + j_stop(w, r, jail_name) + }) + + http.Handle("/", http.FileServer(http.Dir("./static"))) http.HandleFunc("/status", j_status) - http.HandleFunc("/start", j_start) - http.HandleFunc("/stop", j_stop) http.HandleFunc("/hello", helloHandler) - http.Handle("/", http.FileServer(http.Dir("./static"))) http.ListenAndServe(":8080", nil) } diff --git a/static/buttons.html b/static/buttons.html @@ -0,0 +1,4 @@ +{{ define "genButton"}} +<button hx-get="/start" hx-target="#result" hx-swap="innerHTML">Start {{ .j_name }}</button><br /> +<button hx-get="/stop" hx-target="#result" hx-swap="innerHTML">Stop {{ .j_name }}</button><br /> +{{end}} diff --git a/static/index.html b/static/index.html @@ -1,4 +1,3 @@ -<!-- static/index.html --> <!DOCTYPE html> <html> <head> @@ -6,10 +5,15 @@ </head> <body> <h1>HTMX + Go Demo</h1> - <button hx-get="/hello" hx-target="#result" hx-swap="innerHTML">Click Me</button> - <button hx-get="/status" hx-target="#result" hx-swap="innerHTML">Jail Status</button> - <button hx-get="/start" hx-target="#result" hx-swap="innerHTML">Start Jail</button> - <button hx-get="/stop" hx-target="#result" hx-swap="innerHTML">Stop Jail</button> - <div id="result"></div> + <div id="buttons"></div> + <button hx-get="/test" hx-target="#result" hx-swap="innerHTML">Test Button</button> + <button hx-get="/start" hx-target="#result" hx-swap="innerHTML">Start Jail</button><br /> + <button hx-get="/stop" hx-target="#result" hx-swap="innerHTML">Stop Jail</button><br /> + <button hx-get="/status" hx-target="#result" hx-swap="innerHTML">Jail Status</button><br /> + <button hx-get="/buttons" hx-target="#result" hx-swap "innerHTML">Generate Button</button><br /> + <div id="result"> + {{template "genButton"}} + </div> </body> </html> +