Many years ago I built and demoed a prototype of a simple web ui with a slider, and as you moved it left and right, it started up or shutdown some number of virtual machines. The webui was standalone code, but the rough idea of having events from a high-level overview flow into mgmt, was what I wanted to test out. At this stage, I didn't even have the language built yet. This prototype helped convince me of the way a web ui would fit into everything. Years later, I build an autogrouping prototype which looks quite similar to what we have today. I recently picked it back up to polish it a bit more. It's certainly not perfect, and might even be buggy, but it's useful enough that it's worth sharing. If I had more cycles, I'd probably consider removing the "store" mode, and replace it with the normal "value" system, but we would need the resource "mutate" API if we wanted this. This would allow us to directly change the "value" field, without triggering a graph swap, which would be a lot less clunky than the "store" situation. Of course I'd love to see a GTK version of this concept, but I figured it would be more practical to have a web ui over HTTP. One notable missing feature, is that if the "web ui" changes (rather than just a value changing) we need to offer to the user to reload it. It currently doesn't get an event for that, and so don't confuse your users. We also need to be better at validating "untrusted" input here. There's also no major reason to use the "gin" framework, we should probably redo this with the standard library alone, but it was easier for me to push out something quick this way. We can optimize that later. Lastly, this is all quite ugly since I'm not a very good web dev, so if you want to make this polished, please do! The wasm code is also quite terrible due to limitations in the compiler, and maybe one day when that works better and doesn't constantly deadlock, we can improve it.
203 lines
9.8 KiB
Modula-2
203 lines
9.8 KiB
Modula-2
module github.com/purpleidea/mgmt
|
|
|
|
go 1.23.5
|
|
|
|
require (
|
|
github.com/alexflint/go-arg v1.5.1
|
|
github.com/ashcrow/osrelease v0.0.0-20180626175927-9b292693c55c
|
|
github.com/aws/aws-sdk-go v1.55.6
|
|
github.com/bmc-toolbox/bmclib/v2 v2.3.4
|
|
github.com/coredhcp/coredhcp v0.0.0-20250113163832-cbc175753a45
|
|
github.com/coreos/go-systemd/v22 v22.5.0
|
|
github.com/cyphar/filepath-securejoin v0.4.0
|
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
|
|
github.com/deniswernert/go-fstab v0.0.0-20141204152952-eb4090f26517
|
|
github.com/docker/docker v27.5.1+incompatible
|
|
github.com/docker/go-connections v0.5.0
|
|
github.com/fsnotify/fsnotify v1.8.0
|
|
github.com/go-git/go-git/v5 v5.13.2
|
|
github.com/godbus/dbus/v5 v5.1.0
|
|
github.com/google/nftables v0.2.0
|
|
github.com/google/uuid v1.6.0
|
|
github.com/hashicorp/consul/api v1.31.0
|
|
github.com/hashicorp/go-multierror v1.1.1
|
|
github.com/hashicorp/hil v0.0.0-20241119142051-4415e05c565c
|
|
github.com/hetznercloud/hcloud-go v1.59.2
|
|
github.com/iancoleman/strcase v0.3.0
|
|
github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905
|
|
github.com/kylelemons/godebug v1.1.0
|
|
github.com/libvirt/libvirt-go v7.4.0+incompatible
|
|
github.com/libvirt/libvirt-go-xml v7.4.0+incompatible
|
|
github.com/pin/tftp/v3 v3.1.0
|
|
github.com/pkg/errors v0.9.1
|
|
github.com/prometheus/client_golang v1.20.5
|
|
github.com/sanity-io/litter v1.5.5
|
|
github.com/spf13/afero v1.12.0
|
|
github.com/tredoe/osutil v1.5.0
|
|
github.com/vishvananda/netlink v1.3.0
|
|
github.com/yalue/merged_fs v1.3.0
|
|
go.etcd.io/etcd/api/v3 v3.5.18
|
|
go.etcd.io/etcd/client/pkg/v3 v3.5.18
|
|
go.etcd.io/etcd/client/v3 v3.5.18
|
|
go.etcd.io/etcd/server/v3 v3.5.18
|
|
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
|
|
golang.org/x/crypto v0.37.0
|
|
golang.org/x/sys v0.32.0
|
|
golang.org/x/time v0.9.0
|
|
golang.org/x/tools v0.29.0
|
|
gopkg.in/yaml.v2 v2.4.0
|
|
honnef.co/go/augeas v0.0.0-20161110001225-ca62e35ed6b8
|
|
)
|
|
|
|
require (
|
|
dario.cat/mergo v1.0.1 // indirect
|
|
github.com/Jeffail/gabs/v2 v2.7.0 // indirect
|
|
github.com/Microsoft/go-winio v0.6.2 // indirect
|
|
github.com/ProtonMail/go-crypto v1.1.5 // indirect
|
|
github.com/VictorLowther/simplexml v0.0.0-20180716164440-0bff93621230 // indirect
|
|
github.com/VictorLowther/soap v0.0.0-20150314151524-8e36fca84b22 // indirect
|
|
github.com/alexflint/go-scalar v1.2.0 // indirect
|
|
github.com/armon/go-metrics v0.4.1 // indirect
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
|
github.com/bits-and-blooms/bitset v1.20.0 // indirect
|
|
github.com/bmc-toolbox/common v0.0.0-20250114061816-fab80349cae0 // indirect
|
|
github.com/bytedance/sonic v1.13.2 // indirect
|
|
github.com/bytedance/sonic/loader v0.2.4 // indirect
|
|
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb // indirect
|
|
github.com/cloudflare/circl v1.5.0 // indirect
|
|
github.com/cloudwego/base64x v0.1.5 // indirect
|
|
github.com/cloudwego/iasm v0.2.0 // indirect
|
|
github.com/containerd/log v0.1.0 // indirect
|
|
github.com/coreos/go-semver v0.3.1 // indirect
|
|
github.com/distribution/reference v0.6.0 // indirect
|
|
github.com/docker/go-units v0.5.0 // indirect
|
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
|
github.com/emirpasic/gods v1.18.1 // indirect
|
|
github.com/fatih/color v1.18.0 // indirect
|
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
|
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
|
|
github.com/ghodss/yaml v1.0.0 // indirect
|
|
github.com/gin-contrib/sse v1.1.0 // indirect
|
|
github.com/gin-gonic/gin v1.10.0 // indirect
|
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
|
github.com/go-git/go-billy/v5 v5.6.2 // indirect
|
|
github.com/go-logr/logr v1.4.2 // indirect
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
|
github.com/go-playground/locales v0.14.1 // indirect
|
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
|
github.com/go-playground/validator/v10 v10.26.0 // indirect
|
|
github.com/goccy/go-json v0.10.5 // indirect
|
|
github.com/gogo/protobuf v1.3.2 // indirect
|
|
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
|
|
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
|
github.com/golang/protobuf v1.5.4 // indirect
|
|
github.com/google/btree v1.1.3 // indirect
|
|
github.com/google/go-cmp v0.6.0 // indirect
|
|
github.com/gorilla/websocket v1.5.3 // indirect
|
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
|
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
|
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
|
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0 // indirect
|
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
|
github.com/hashicorp/go-hclog v1.6.3 // indirect
|
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
|
github.com/hashicorp/go-metrics v0.5.4 // indirect
|
|
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
|
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
|
github.com/hashicorp/serf v0.10.2 // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/jacobweinstock/iamt v0.0.0-20230502042727-d7cdbe67d9ef // indirect
|
|
github.com/jacobweinstock/registrar v0.4.7 // indirect
|
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
|
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
|
github.com/jonboulle/clockwork v0.5.0 // indirect
|
|
github.com/josharian/native v1.1.0 // indirect
|
|
github.com/json-iterator/go v1.1.12 // indirect
|
|
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
|
github.com/klauspost/compress v1.17.11 // indirect
|
|
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
|
|
github.com/leodido/go-urn v1.4.0 // indirect
|
|
github.com/mattn/go-colorable v0.1.14 // indirect
|
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 // indirect
|
|
github.com/mdlayher/netlink v1.7.2 // indirect
|
|
github.com/mdlayher/packet v1.1.2 // indirect
|
|
github.com/mdlayher/raw v0.1.0 // indirect
|
|
github.com/mdlayher/socket v0.5.1 // indirect
|
|
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
|
github.com/moby/docker-image-spec v1.3.1 // indirect
|
|
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd // indirect
|
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
|
github.com/morikuni/aec v1.0.0 // indirect
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
github.com/nxadm/tail v1.4.11 // indirect
|
|
github.com/opencontainers/go-digest v1.0.0 // indirect
|
|
github.com/opencontainers/image-spec v1.1.0 // indirect
|
|
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
|
github.com/pierrec/lz4/v4 v4.1.22 // indirect
|
|
github.com/pjbgf/sha1cd v0.3.2 // indirect
|
|
github.com/prometheus/client_model v0.6.1 // indirect
|
|
github.com/prometheus/common v0.62.0 // indirect
|
|
github.com/prometheus/procfs v0.15.1 // indirect
|
|
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 // indirect
|
|
github.com/satori/go.uuid v1.2.0 // indirect
|
|
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
|
|
github.com/sirupsen/logrus v1.9.3 // indirect
|
|
github.com/skeema/knownhosts v1.3.0 // indirect
|
|
github.com/soheilhy/cmux v0.1.5 // indirect
|
|
github.com/spf13/cobra v1.8.1 // indirect
|
|
github.com/spf13/pflag v1.0.6-0.20250109003754-5ca813443bd2 // indirect
|
|
github.com/stmcginnis/gofish v0.20.0 // indirect
|
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 // indirect
|
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
|
github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
|
|
github.com/ugorji/go/codec v1.2.12 // indirect
|
|
github.com/vishvananda/netns v0.0.5 // indirect
|
|
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
|
github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510 // indirect
|
|
go.etcd.io/bbolt v1.3.11 // indirect
|
|
go.etcd.io/etcd/client/v2 v2.305.18 // indirect
|
|
go.etcd.io/etcd/pkg/v3 v3.5.18 // indirect
|
|
go.etcd.io/etcd/raft/v3 v3.5.18 // indirect
|
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
|
|
go.opentelemetry.io/otel v1.34.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 // indirect
|
|
go.opentelemetry.io/otel/metric v1.34.0 // indirect
|
|
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
|
|
go.opentelemetry.io/otel/trace v1.34.0 // indirect
|
|
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
go.uber.org/zap v1.27.0 // indirect
|
|
golang.org/x/arch v0.16.0 // indirect
|
|
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect
|
|
golang.org/x/net v0.39.0 // indirect
|
|
golang.org/x/sync v0.13.0 // indirect
|
|
golang.org/x/term v0.31.0 // indirect
|
|
golang.org/x/text v0.24.0 // indirect
|
|
google.golang.org/genproto v0.0.0-20250124145028-65684f501c47 // indirect
|
|
google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47 // indirect
|
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect
|
|
google.golang.org/grpc v1.70.0 // indirect
|
|
google.golang.org/protobuf v1.36.6 // indirect
|
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
gotest.tools/v3 v3.0.3 // indirect
|
|
sigs.k8s.io/yaml v1.4.0 // indirect
|
|
)
|
|
|
|
replace github.com/u-root/u-root v7.0.0+incompatible => github.com/u-root/u-root v1.0.1
|
|
|
|
replace github.com/insomniacslk/dhcp => github.com/insomniacslk/dhcp v0.0.0-20221001123530-5308ebe5334c
|