Compare commits
1 Commits
v0.0.1
..
eebb557fce
| Author | SHA1 | Date | |
|---|---|---|---|
| eebb557fce |
+1
-1
@@ -1 +1 @@
|
|||||||
.tmp
|
/jpictl
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
.PHONY: all clean install generate fmt tidy
|
|
||||||
.PHONY: FORCE
|
|
||||||
|
|
||||||
GO ?= go
|
|
||||||
GOFMT ?= gofmt
|
|
||||||
GOFMT_FLAGS = -w -l -s
|
|
||||||
GOGENERATE_FLAGS = -v
|
|
||||||
|
|
||||||
GOPATH ?= $(shell $(GO) env GOPATH)
|
|
||||||
GOBIN ?= $(GOPATH)/bin
|
|
||||||
|
|
||||||
TOOLSDIR := $(CURDIR)/pkg/tools
|
|
||||||
TMPDIR ?= .tmp
|
|
||||||
|
|
||||||
REVIVE ?= $(GOBIN)/revive
|
|
||||||
REVIVE_CONF ?= $(TOOLSDIR)/revive.toml
|
|
||||||
REVIVE_RUN_ARGS ?= -config $(REVIVE_CONF) -formatter friendly
|
|
||||||
REVIVE_INSTALL_URL ?= github.com/mgechev/revive
|
|
||||||
|
|
||||||
GO_INSTALL_URLS = \
|
|
||||||
$(REVIVE_INSTALL_URL) \
|
|
||||||
|
|
||||||
V = 0
|
|
||||||
Q = $(if $(filter 1,$V),,@)
|
|
||||||
M = $(shell if [ "$$(tput colors 2> /dev/null || echo 0)" -ge 8 ]; then printf "\033[34;1m▶\033[0m"; else printf "▶"; fi)
|
|
||||||
|
|
||||||
GO_BUILD = $(GO) build -v
|
|
||||||
GO_BUILD_CMD = $(GO_BUILD) -o "$(OUTDIR)"
|
|
||||||
|
|
||||||
all: get generate tidy build
|
|
||||||
|
|
||||||
install:
|
|
||||||
$Q $(GO) install -v ./cmd/...
|
|
||||||
|
|
||||||
clean: ; $(info $(M) cleaning…)
|
|
||||||
rm -rf $(TMPDIR)
|
|
||||||
|
|
||||||
$(TMPDIR)/index: $(TOOLSDIR)/gen_index.sh Makefile FORCE ; $(info $(M) generating index…)
|
|
||||||
$Q mkdir -p $(@D)
|
|
||||||
$Q $< > $@~
|
|
||||||
$Q if cmp $@ $@~ 2> /dev/null >&2; then rm $@~; else mv $@~ $@; fi
|
|
||||||
|
|
||||||
$(TMPDIR)/gen.mk: $(TOOLSDIR)/gen_mk.sh $(TMPDIR)/index Makefile ; $(info $(M) generating subproject rules…)
|
|
||||||
$Q mkdir -p $(@D)
|
|
||||||
$Q $< $(TMPDIR)/index > $@~
|
|
||||||
$Q if cmp $@ $@~ 2> /dev/null >&2; then rm $@~; else mv $@~ $@; fi
|
|
||||||
|
|
||||||
include $(TMPDIR)/gen.mk
|
|
||||||
|
|
||||||
fmt: ; $(info $(M) reformatting sources…)
|
|
||||||
$Q find . -name '*.go' | xargs -r $(GOFMT) $(GOFMT_FLAGS)
|
|
||||||
|
|
||||||
tidy: fmt
|
|
||||||
|
|
||||||
generate: ; $(info $(M) running go:generate…)
|
|
||||||
$Q git grep -l '^//go:generate' | sort -uV | xargs -r -n1 $(GO) generate $(GOGENERATE_FLAGS)
|
|
||||||
|
|
||||||
$(REVIVE):
|
|
||||||
$Q $(GO) install -v $(REVIVE_INSTALL_URL)
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
// Config describes the repository
|
|
||||||
type Config struct {
|
|
||||||
Base string
|
|
||||||
Domain string
|
|
||||||
}
|
|
||||||
|
|
||||||
var cfg = &Config{
|
|
||||||
Base: "./m",
|
|
||||||
Domain: "m.jpi.cloud",
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/burntSushi/toml"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
|
|
||||||
"git.jpi.io/amery/jpictl/pkg/zones"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Command
|
|
||||||
var dumpCmd = &cobra.Command{
|
|
||||||
Use: "dump",
|
|
||||||
Short: "generates a toml representation of the config",
|
|
||||||
RunE: func(_ *cobra.Command, _ []string) error {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
|
|
||||||
m, err := zones.New(cfg.Base, cfg.Domain)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
enc := toml.NewEncoder(&buf)
|
|
||||||
if err = enc.Encode(m); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = buf.WriteTo(os.Stdout); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
rootCmd.AddCommand(dumpCmd)
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
// Package main implements the jpictl command
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -6,7 +5,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// CmdName is the name of the executable
|
|
||||||
CmdName = "jpictl"
|
CmdName = "jpictl"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ module git.jpi.io/amery/jpictl
|
|||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
darvaza.org/resolver v0.5.2
|
|
||||||
darvaza.org/sidecar v0.0.0-20230721122716-b9c54b8adbaf
|
darvaza.org/sidecar v0.0.0-20230721122716-b9c54b8adbaf
|
||||||
darvaza.org/slog v0.5.2
|
darvaza.org/slog v0.5.2
|
||||||
github.com/burntSushi/toml v0.3.1
|
|
||||||
github.com/mgechev/revive v1.3.2
|
|
||||||
github.com/spf13/cobra v1.7.0
|
github.com/spf13/cobra v1.7.0
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -15,25 +12,12 @@ require (
|
|||||||
darvaza.org/core v0.9.5 // indirect
|
darvaza.org/core v0.9.5 // indirect
|
||||||
darvaza.org/slog/handlers/filter v0.4.4 // indirect
|
darvaza.org/slog/handlers/filter v0.4.4 // indirect
|
||||||
darvaza.org/slog/handlers/zerolog v0.4.4 // indirect
|
darvaza.org/slog/handlers/zerolog v0.4.4 // indirect
|
||||||
github.com/BurntSushi/toml v1.3.2 // indirect
|
|
||||||
github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 // indirect
|
|
||||||
github.com/fatih/color v1.15.0 // indirect
|
|
||||||
github.com/fatih/structtag v1.2.0 // indirect
|
|
||||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
|
||||||
github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 // indirect
|
|
||||||
github.com/miekg/dns v1.1.55 // indirect
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
|
||||||
github.com/rivo/uniseg v0.4.4 // indirect
|
|
||||||
github.com/rs/zerolog v1.30.0 // indirect
|
github.com/rs/zerolog v1.30.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
golang.org/x/mod v0.12.0 // indirect
|
|
||||||
golang.org/x/net v0.14.0 // indirect
|
golang.org/x/net v0.14.0 // indirect
|
||||||
golang.org/x/sys v0.11.0 // indirect
|
golang.org/x/sys v0.11.0 // indirect
|
||||||
golang.org/x/text v0.12.0 // indirect
|
golang.org/x/text v0.12.0 // indirect
|
||||||
golang.org/x/tools v0.12.0 // indirect
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
darvaza.org/core v0.9.4 h1:HYKmYiWehDtqATF0vBv2i/DvdpNP7YJPu3pOW7h0CWI=
|
||||||
|
darvaza.org/core v0.9.4/go.mod h1:O3tHBMlw+xB47uGh5CUx7dXAujBAMmD8BCRFPZmIw54=
|
||||||
darvaza.org/core v0.9.5 h1:sS5pZFwicaxJIQixEiqkMr9GknVHYL+EbKDMkR/4jDM=
|
darvaza.org/core v0.9.5 h1:sS5pZFwicaxJIQixEiqkMr9GknVHYL+EbKDMkR/4jDM=
|
||||||
darvaza.org/core v0.9.5/go.mod h1:O3tHBMlw+xB47uGh5CUx7dXAujBAMmD8BCRFPZmIw54=
|
darvaza.org/core v0.9.5/go.mod h1:O3tHBMlw+xB47uGh5CUx7dXAujBAMmD8BCRFPZmIw54=
|
||||||
darvaza.org/resolver v0.5.2 h1:VjHhEr/MJBszeDb7tYlXQ9Bsyh4xrDR7Sd10WAmPD6k=
|
|
||||||
darvaza.org/resolver v0.5.2/go.mod h1:fFvsVPEFeMzUIWlLG47Go/6uJYtRLb9R8HIgYg3uaxE=
|
|
||||||
darvaza.org/sidecar v0.0.0-20230721122716-b9c54b8adbaf h1:ya5ZQicBb/GWll3rlqra8No7oJXks7y1m/cJGYBypv4=
|
darvaza.org/sidecar v0.0.0-20230721122716-b9c54b8adbaf h1:ya5ZQicBb/GWll3rlqra8No7oJXks7y1m/cJGYBypv4=
|
||||||
darvaza.org/sidecar v0.0.0-20230721122716-b9c54b8adbaf/go.mod h1:by+bPsMa7Rxc/ZYG1qBunrtKocv/DkrPBmyFlmq/j2Q=
|
darvaza.org/sidecar v0.0.0-20230721122716-b9c54b8adbaf/go.mod h1:by+bPsMa7Rxc/ZYG1qBunrtKocv/DkrPBmyFlmq/j2Q=
|
||||||
darvaza.org/slog v0.5.2 h1:8TG1WyHjOyh2vW6t3pjzZVaWzpko5MIIpeI7LWqHFvs=
|
darvaza.org/slog v0.5.2 h1:8TG1WyHjOyh2vW6t3pjzZVaWzpko5MIIpeI7LWqHFvs=
|
||||||
@@ -10,21 +10,8 @@ darvaza.org/slog/handlers/filter v0.4.4 h1:b2e2T9fQzMdJ0ia+f6b7kw9/T9GFwhFCKob/2
|
|||||||
darvaza.org/slog/handlers/filter v0.4.4/go.mod h1:cQlJWuolB6guLug09sX/8Zrzct++M6SPCGvXR37E7Cc=
|
darvaza.org/slog/handlers/filter v0.4.4/go.mod h1:cQlJWuolB6guLug09sX/8Zrzct++M6SPCGvXR37E7Cc=
|
||||||
darvaza.org/slog/handlers/zerolog v0.4.4 h1:OR1ASvH1fBCq3t85t4OU6oJPPuqMB1tsDoSpsh6HVJU=
|
darvaza.org/slog/handlers/zerolog v0.4.4 h1:OR1ASvH1fBCq3t85t4OU6oJPPuqMB1tsDoSpsh6HVJU=
|
||||||
darvaza.org/slog/handlers/zerolog v0.4.4/go.mod h1:t60TeEbFcMLo74CkXC2S0rKlnwF4ixZyBR4fqIJV1GE=
|
darvaza.org/slog/handlers/zerolog v0.4.4/go.mod h1:t60TeEbFcMLo74CkXC2S0rKlnwF4ixZyBR4fqIJV1GE=
|
||||||
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
|
|
||||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
|
||||||
github.com/burntSushi/toml v0.3.1 h1:Hu1cOEC2qtKULZJCzym5tyA35bZr3HREuolgiAzMlhY=
|
|
||||||
github.com/burntSushi/toml v0.3.1/go.mod h1:sGTquCpRYr9McuHdv0m6YKIhx8DJGJa4t04/Y9pfSio=
|
|
||||||
github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 h1:W9o46d2kbNL06lq7UNDPV0zYLzkrde/bjIqO02eoll0=
|
|
||||||
github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8/go.mod h1:gakxgyXaaPkxvLw1XQxNGK4I37ys9iBRzNUx/B7pUCo=
|
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
|
|
||||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
|
|
||||||
github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
|
|
||||||
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
|
|
||||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
@@ -35,27 +22,11 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
|
|||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
|
||||||
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
|
||||||
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
|
||||||
github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0=
|
|
||||||
github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg=
|
|
||||||
github.com/mgechev/revive v1.3.2 h1:Wb8NQKBaALBJ3xrrj4zpwJwqwNA6nDpyJSEQWcCka6U=
|
|
||||||
github.com/mgechev/revive v1.3.2/go.mod h1:UCLtc7o5vg5aXCwdUTU1kEBQ1v+YXPAkYDIDXbrs5I0=
|
|
||||||
github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo=
|
|
||||||
github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
|
||||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
|
||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
|
||||||
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
|
||||||
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
|
||||||
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||||
|
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
|
||||||
|
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
|
||||||
github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
|
github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
|
||||||
github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
|
github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
@@ -63,30 +34,22 @@ github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
|||||||
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
|
||||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
|
||||||
golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw=
|
golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw=
|
||||||
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
|
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
|
||||||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
|
||||||
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
|
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
|
||||||
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
|
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
|
||||||
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
|
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
|
||||||
|
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
|
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
|
||||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
|
||||||
|
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
|
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
|
||||||
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss=
|
|
||||||
golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
: ${GO:=go}
|
|
||||||
|
|
||||||
MODULES=$(find * -name go.mod -exec dirname '{}' \;)
|
|
||||||
GROUPS="pkg cmd"
|
|
||||||
BASE="$PWD"
|
|
||||||
|
|
||||||
mod() {
|
|
||||||
local d="${1:-.}"
|
|
||||||
grep ^module "$d/go.mod" | cut -d' ' -f2
|
|
||||||
}
|
|
||||||
|
|
||||||
namedir() {
|
|
||||||
local d="$1" g= n=
|
|
||||||
|
|
||||||
if [ "." = "$d" ]; then
|
|
||||||
echo "root"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
for g in $GROUPS; do
|
|
||||||
n="${d#$g/}"
|
|
||||||
if [ "x$n" != "x$d" ]; then
|
|
||||||
echo "$n" | tr '/' '-'
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "$d" | tr '/' '-'
|
|
||||||
}
|
|
||||||
|
|
||||||
mod_replace() {
|
|
||||||
local d="$1"
|
|
||||||
grep "=>" "$d/go.mod" | sed -n -e "s;^.*\($ROOT_MODULE.*\)[ \t]\+=>.*;\1;p"
|
|
||||||
}
|
|
||||||
|
|
||||||
gen_index() {
|
|
||||||
local d= n=
|
|
||||||
|
|
||||||
for d; do
|
|
||||||
n=$(namedir "$d")
|
|
||||||
m=$(mod "$d")
|
|
||||||
echo "$n:$d:$m"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
ROOT_MODULE=$(mod)
|
|
||||||
INDEX=$(gen_index $MODULES)
|
|
||||||
|
|
||||||
echo "$INDEX" | while IFS=: read name dir mod; do
|
|
||||||
deps=
|
|
||||||
for dep in $(mod_replace "$dir"); do
|
|
||||||
depname=$(echo "$INDEX" | grep ":$dep$" | cut -d: -f1 | tr '\n' ',' | sed -e 's|,\+$||g')
|
|
||||||
if [ -n "$depname" ]; then
|
|
||||||
deps="${deps:+$deps,}$depname"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "$name:$dir:$mod:$deps"
|
|
||||||
done | sort -V
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
INDEX="$1"
|
|
||||||
|
|
||||||
PROJECTS="$(cut -d':' -f1 "$INDEX")"
|
|
||||||
COMMANDS="tidy get build test up"
|
|
||||||
|
|
||||||
expand() {
|
|
||||||
local prefix="$1" suffix="$2"
|
|
||||||
local x= out=
|
|
||||||
shift 2
|
|
||||||
|
|
||||||
for x; do
|
|
||||||
out="${out:+$out }${prefix}$x${suffix}"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "$out"
|
|
||||||
}
|
|
||||||
|
|
||||||
prefixed() {
|
|
||||||
local prefix="${1:+$1-}"
|
|
||||||
shift
|
|
||||||
expand "$prefix" "" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
suffixed() {
|
|
||||||
local suffix="${1:+-$1}"
|
|
||||||
shift
|
|
||||||
expand "" "$suffix" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# packed remove excess whitespace from lines of commands
|
|
||||||
packed() {
|
|
||||||
sed -e 's/^[ \t]\+//' -e 's/[ \t]\+$//' -e '/^$/d;' -e '/^#/d';
|
|
||||||
}
|
|
||||||
|
|
||||||
# packet_oneline converts a multiline script into packed single-line equivalent
|
|
||||||
packed_oneline() {
|
|
||||||
packed | tr '\n' ';' | sed -e 's|;$||' -e 's|then;|then |g' -e 's|;[ \t]*|; |g'
|
|
||||||
}
|
|
||||||
|
|
||||||
gen_install_tools() {
|
|
||||||
cat <<EOT
|
|
||||||
for url in \$(GO_INSTALL_URLS); do \$(GO) install -v \$\$url; done
|
|
||||||
EOT
|
|
||||||
}
|
|
||||||
|
|
||||||
gen_revive_exclude() {
|
|
||||||
local self="$1"
|
|
||||||
local dirs= d=
|
|
||||||
|
|
||||||
dirs="$(cut -d: -f2 "$INDEX" | grep -v '^.$' || true)"
|
|
||||||
if [ "." != "$self" ]; then
|
|
||||||
dirs=$(echo "$dirs" | sed -n -e "s;^$self/\(.*\)$;\1;p")
|
|
||||||
fi
|
|
||||||
|
|
||||||
for d in $dirs; do
|
|
||||||
printf -- "-exclude ./$d/... "
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
for cmd in $COMMANDS; do
|
|
||||||
all="$(prefixed $cmd $PROJECTS)"
|
|
||||||
depsx=
|
|
||||||
|
|
||||||
cat <<EOT
|
|
||||||
.PHONY: $cmd $all
|
|
||||||
$cmd: $all
|
|
||||||
|
|
||||||
EOT
|
|
||||||
|
|
||||||
# default calls
|
|
||||||
case "$cmd" in
|
|
||||||
tidy)
|
|
||||||
call="$(cat <<-EOT | packed
|
|
||||||
\$(GO) mod tidy
|
|
||||||
|
|
||||||
# go vet and revive only if there are .go files
|
|
||||||
#
|
|
||||||
$(cat <<-EOL | packed_oneline
|
|
||||||
set -e
|
|
||||||
FILES="\$\$(\$(GO) list -f '{{len .GoFiles}}' ./...)"
|
|
||||||
if [ -n "\$\$FILES" ]; then
|
|
||||||
\$(GO) vet ./...
|
|
||||||
\$(REVIVE) \$(REVIVE_RUN_ARGS) ./...
|
|
||||||
fi
|
|
||||||
EOL
|
|
||||||
)
|
|
||||||
EOT
|
|
||||||
)"
|
|
||||||
depsx="fmt \$(REVIVE)"
|
|
||||||
;;
|
|
||||||
up)
|
|
||||||
call="\$(GO) get -u -v ./...
|
|
||||||
\$(GO) mod tidy"
|
|
||||||
;;
|
|
||||||
test)
|
|
||||||
call="\$(GO) $cmd ./..."
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
call="\$(GO) $cmd -v ./..."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$cmd" in
|
|
||||||
build|test)
|
|
||||||
sequential=true ;;
|
|
||||||
*)
|
|
||||||
sequential=false ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
while IFS=: read name dir mod deps; do
|
|
||||||
|
|
||||||
deps=$(echo "$deps" | tr ',' ' ')
|
|
||||||
|
|
||||||
# cd $dir
|
|
||||||
if [ "." = "$dir" ]; then
|
|
||||||
# root
|
|
||||||
cd=
|
|
||||||
else
|
|
||||||
cd="cd '$dir'; "
|
|
||||||
fi
|
|
||||||
|
|
||||||
callx="$call"
|
|
||||||
if [ "$name" = root ]; then
|
|
||||||
# special case
|
|
||||||
case "$cmd" in
|
|
||||||
get)
|
|
||||||
cmdx="get -tags tools"
|
|
||||||
;;
|
|
||||||
up)
|
|
||||||
cmdx="get -tags tools -u"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
cmdx=
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
[ -z "$cmdx" ] || cmdx="\$(GO) $cmdx -v ./..."
|
|
||||||
|
|
||||||
if [ "up" = "$cmd" ]; then
|
|
||||||
callx="$cmdx
|
|
||||||
\$(GO) mod tidy
|
|
||||||
$(gen_install_tools)"
|
|
||||||
elif [ "get" = "$cmd" ]; then
|
|
||||||
callx="$cmdx
|
|
||||||
$(gen_install_tools)"
|
|
||||||
elif [ -n "$cmdx" ]; then
|
|
||||||
classx="$cmdx"
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "build" = "$cmd" ]; then
|
|
||||||
# special build flags for cmd/*
|
|
||||||
#
|
|
||||||
callx="$(cat <<-EOL | packed_oneline
|
|
||||||
set -e
|
|
||||||
MOD="\$\$(\$(GO) list -f '{{.ImportPath}}' ./...)"
|
|
||||||
if echo "\$\$MOD" | grep -q -e '.*/cmd/[^/]\+\$\$'; then
|
|
||||||
\$(GO_BUILD_CMD) ./...
|
|
||||||
elif [ -n "\$\$MOD" ]; then
|
|
||||||
\$(GO_BUILD) ./...
|
|
||||||
fi
|
|
||||||
EOL
|
|
||||||
)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "tidy" = "$cmd" ]; then
|
|
||||||
# exclude submodules when running revive
|
|
||||||
#
|
|
||||||
exclude=$(gen_revive_exclude "$dir")
|
|
||||||
if [ -n "$exclude" ]; then
|
|
||||||
callx=$(echo "$callx" | sed -e "s;\(REVIVE)\);\1 $exclude;")
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! $sequential; then
|
|
||||||
deps=
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat <<EOT
|
|
||||||
$cmd-$name:${deps:+ $(prefixed $cmd $deps)}${depsx:+ | $depsx} ; \$(info \$(M) $cmd: $name)
|
|
||||||
$(echo "$callx" | sed -e "/^$/d;" -e "s|^|\t\$(Q) $cd|")
|
|
||||||
|
|
||||||
EOT
|
|
||||||
done < "$INDEX"
|
|
||||||
done
|
|
||||||
|
|
||||||
for x in $PROJECTS; do
|
|
||||||
cat <<EOT
|
|
||||||
$x: $(suffixed $x get build tidy)
|
|
||||||
EOT
|
|
||||||
done
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
ignoreGeneratedHeader = false
|
|
||||||
severity = "error"
|
|
||||||
confidence = 0.8
|
|
||||||
errorCode = 1
|
|
||||||
warningCode = 0
|
|
||||||
enableAllRules = true
|
|
||||||
|
|
||||||
[rule.function-length]
|
|
||||||
arguments = [40,0]
|
|
||||||
severity = "warning"
|
|
||||||
[rule.function-result-limit]
|
|
||||||
arguments = [3]
|
|
||||||
[rule.argument-limit]
|
|
||||||
arguments = [5]
|
|
||||||
[rule.cognitive-complexity]
|
|
||||||
arguments = [7]
|
|
||||||
[rule.cyclomatic]
|
|
||||||
arguments = [10]
|
|
||||||
[rule.line-length-limit]
|
|
||||||
arguments = [100]
|
|
||||||
severity = "warning"
|
|
||||||
[rule.comment-spacings]
|
|
||||||
severity = "warning"
|
|
||||||
[rule.empty-lines]
|
|
||||||
severity = "warning"
|
|
||||||
|
|
||||||
# Disabled rules
|
|
||||||
[rule.max-public-structs]
|
|
||||||
disabled = true
|
|
||||||
[rule.file-header]
|
|
||||||
disabled = true
|
|
||||||
[rule.add-constant]
|
|
||||||
disabled = true
|
|
||||||
[rule.banned-characters]
|
|
||||||
disabled = true
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
//go:build tools
|
|
||||||
|
|
||||||
package tools
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "github.com/mgechev/revive"
|
|
||||||
)
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package zones
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/netip"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Machine is a machine on a Zone
|
|
||||||
type Machine struct {
|
|
||||||
mu sync.Mutex
|
|
||||||
|
|
||||||
zone *Zone
|
|
||||||
id int
|
|
||||||
Name string
|
|
||||||
|
|
||||||
PublicAddresses []netip.Addr
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Machine) String() string {
|
|
||||||
return m.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
// ID return the index within the [Zone] associated to this [Machine]
|
|
||||||
func (m *Machine) ID() int {
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
|
|
||||||
if m.id == 0 {
|
|
||||||
zoneName := m.zone.Name
|
|
||||||
|
|
||||||
s := m.Name[len(zoneName)+1:]
|
|
||||||
|
|
||||||
id, err := strconv.ParseInt(s, 10, 8)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
m.id = int(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
return m.id
|
|
||||||
}
|
|
||||||
|
|
||||||
// FullName returns the Name of the machine including domain name
|
|
||||||
func (m *Machine) FullName() string {
|
|
||||||
if domain := m.zone.zones.domain; domain != "" {
|
|
||||||
var s = []string{
|
|
||||||
m.Name,
|
|
||||||
domain,
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.Join(s, ".")
|
|
||||||
}
|
|
||||||
|
|
||||||
return m.Name
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package zones
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"net/netip"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (m *Machine) lookupNetIP() ([]netip.Addr, error) {
|
|
||||||
timeout := 2 * time.Second
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
|
||||||
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
return m.zone.zones.resolver.LookupNetIP(ctx, "ip", m.FullName())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Machine) updatePublicAddresses() error {
|
|
||||||
addrs, err := m.lookupNetIP()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
m.PublicAddresses = addrs
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
package zones
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io/fs"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (m *Zones) scan() error {
|
|
||||||
// each directory is a zone
|
|
||||||
entries, err := fs.ReadDir(m.dir, ".")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, e := range entries {
|
|
||||||
if e.IsDir() {
|
|
||||||
z := &Zone{
|
|
||||||
zones: m,
|
|
||||||
Name: e.Name(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := z.scan(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
m.Zones = append(m.Zones, z)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *Zone) scan() error {
|
|
||||||
// each directory is a machine
|
|
||||||
entries, err := fs.ReadDir(z.zones.dir, z.Name)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, e := range entries {
|
|
||||||
if e.IsDir() {
|
|
||||||
m := &Machine{
|
|
||||||
zone: z,
|
|
||||||
Name: e.Name(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := m.updatePublicAddresses(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
z.Machines = append(z.Machines, m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
// Package zones contains information about the cluster
|
|
||||||
package zones
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io/fs"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"darvaza.org/resolver"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Zone represents one zone in a cluster
|
|
||||||
type Zone struct {
|
|
||||||
zones *Zones
|
|
||||||
|
|
||||||
ID int
|
|
||||||
Name string
|
|
||||||
|
|
||||||
Machines []*Machine `toml:"machines"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *Zone) String() string {
|
|
||||||
return z.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zones represents all zones in a cluster
|
|
||||||
type Zones struct {
|
|
||||||
dir fs.FS
|
|
||||||
resolver resolver.Resolver
|
|
||||||
domain string
|
|
||||||
|
|
||||||
Zones []*Zone `toml:"zones"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFS builds a [Zones] tree using the given directory
|
|
||||||
func NewFS(dir fs.FS, domain string) (*Zones, error) {
|
|
||||||
z := &Zones{
|
|
||||||
dir: dir,
|
|
||||||
resolver: resolver.SystemResolver(true),
|
|
||||||
domain: domain,
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := z.scan(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return z, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// New builds a [Zones] tree using the given directory
|
|
||||||
func New(dir, domain string) (*Zones, error) {
|
|
||||||
return NewFS(os.DirFS(dir), domain)
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user