rework hm netinfo map model

This commit is contained in:
rmanach 2025-10-28 22:11:31 +01:00
parent c7dc3d4402
commit 9918c0c363
4 changed files with 25 additions and 73 deletions

View File

@ -3,10 +3,10 @@ BIN_INSTALL = $(shell whereis $(BIN_NAME) | cut -d ' ' -f2)
VERSION = 0.1.1 VERSION = 0.1.1
run: lint run: check
@go run main.go @go run main.go
build: lint build: check
@echo "building binary..." @echo "building binary..."
@CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.Version=$(VERSION)" -o $(BIN_NAME) main.go && echo "$(BIN_NAME) v$(VERSION) built" @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.Version=$(VERSION)" -o $(BIN_NAME) main.go && echo "$(BIN_NAME) v$(VERSION) built"
@ -16,7 +16,7 @@ install: build
@echo "program installed: $(GOPATH)/bin/hmdeploy" @echo "program installed: $(GOPATH)/bin/hmdeploy"
@$(GOPATH)/bin/hmdeploy --version @$(GOPATH)/bin/hmdeploy --version
lint: check:
@echo "format and lint..." @echo "format and lint..."
@golangci-lint fmt ./... @golangci-lint fmt ./...
@golangci-lint run ./... @golangci-lint run ./...

View File

@ -38,51 +38,27 @@ It has a nice logging and clean all the ressources (succeed or failed).
* Create a file inside named: `map.json`. This file will contain all network informations of your instances. * Create a file inside named: `map.json`. This file will contain all network informations of your instances.
```json ```json
{ {
"ip": "<proxmox-ip>", "swarm": {
"web_url": "https://<proxmox-ip>:8006", "ip": "<swarm-ip>",
"ssh": { "ssh": {
"user": "<ssh-user>", "user": "<ssh-user>",
"privkey": "<path-to-ssh-private-key>", "privkey": "<path-to-ssh-private-key>",
"port": <proxmox-ssh-port> "port": <swarm-ssh-port>
},
"vm": {
"swarm": {
"ip": "<swarm-ip>",
"ssh": {
"user": "<ssh-user>",
"privkey": "<path-to-ssh-private-key>",
"port": <swarm-ssh-port>
}
} }
}, },
"lxc": { "nginx": {
"nginx": { "ip": "<nginx-ip>",
"ip": "<nginx-ip>", "web_url": "https://<nginx-ip>",
"web_url": "https://<nginx-ip>", "ssh": {
"ssh": { "user": "<ssh-user>",
"user": "<ssh-user>", "privkey": "<path-to-ssh-private-key>",
"privkey": "<path-to-ssh-private-key>", "port": <nginx-ssh-port>
"port": <nginx-ssh-port> }
} }
}
}
} }
``` ```
Below an example of a configuration. Of course you must ensure that the user public key has been deployed on the `<ssh-user>` server. Below an example of a configuration. Of course you must ensure that the user public key has been deployed on the `<ssh-user>` server.
You may notice the configuration has two distincts keys: **vm** and **lxc**. And, obviously, it refers to a virtual machine and a linux container.
For convience, **Docker Swarm** is installed on a **vm** to ensure a strong isolated environment. If you decided for an LXC, you have to update this section of the code and rebuild the binary:
```go
func (hm *HMMap) GetSwarmNetInfo() *HMNetInfo {
data, ok := hm.VM["swarm"] // update to hm.LXC["swarm]
if !ok {
return nil
}
return data
}
```
* In your project root directory, create a `.homeserver` directory with a configuration file: `hmdeploy.json`: * In your project root directory, create a `.homeserver` directory with a configuration file: `hmdeploy.json`:
```json ```json
{ {
@ -111,7 +87,7 @@ If you have a Docker registry with the target image available, you can thus leav
* Clone the repository * Clone the repository
```bash ```bash
git clone https://gitea.thegux.fr/rmanach/hmdeploy git clone https://gitea.sonak.fr/rmanach/hmdeploy
``` ```
* Install the binary * Install the binary
```bash ```bash
@ -124,7 +100,7 @@ The binary is then installed in your **$GOPATH/bin**.
hmdeploy --help hmdeploy --help
Usage of hmdeploy: Usage of hmdeploy:
-config string -config string
define the configuration directory (default "/home/romain/.homeserver") define the configuration directory (default "/home/<user>/.homeserver")
-confirm -confirm
do not ask for confirmation, you're the best, you don't need confirmation do not ask for confirmation, you're the best, you don't need confirmation
-debug -debug

View File

@ -293,7 +293,7 @@ func initDeployers(
} }
if !opt.noSwarm && project.GetComposePath() != "" { if !opt.noSwarm && project.GetComposePath() != "" {
swarmNet := hmmap.GetSwarmNetInfo() swarmNet := hmmap.Swarm
if swarmNet == nil { if swarmNet == nil {
return deps, fmt.Errorf("%w, swarm net info does not exist", ErrNetInfoNotFound) return deps, fmt.Errorf("%w, swarm net info does not exist", ErrNetInfoNotFound)
} }
@ -307,7 +307,7 @@ func initDeployers(
} }
if !opt.noNginx && project.GetNginxConfPath() != "" { if !opt.noNginx && project.GetNginxConfPath() != "" {
nginxNet := hmmap.GetNginxNetInfo() nginxNet := hmmap.Nginx
if nginxNet == nil { if nginxNet == nil {
return deps, fmt.Errorf("%w, nginx net info does not exist", ErrNetInfoNotFound) return deps, fmt.Errorf("%w, nginx net info does not exist", ErrNetInfoNotFound)
} }
@ -332,7 +332,7 @@ func initDeployers(
//nolint:funlen,mnd // TODO(rmanach): could be splitted //nolint:funlen,mnd // TODO(rmanach): could be splitted
func getSwarmServicesDetails(hm *models.HMMap) error { func getSwarmServicesDetails(hm *models.HMMap) error {
swarmNet := hm.GetSwarmNetInfo() swarmNet := hm.Swarm
if swarmNet == nil { if swarmNet == nil {
return fmt.Errorf("%w, swarm net info does not exist", ErrNetInfoNotFound) return fmt.Errorf("%w, swarm net info does not exist", ErrNetInfoNotFound)
} }

View File

@ -14,32 +14,8 @@ type HMNetInfo struct {
} `json:"ssh,omitempty"` } `json:"ssh,omitempty"`
} }
type (
HMVM map[string]*HMNetInfo
HMLXC map[string]*HMNetInfo
)
// HMMap handles all the informations of your home server instances. // HMMap handles all the informations of your home server instances.
type HMMap struct { type HMMap struct {
*HMNetInfo Nginx *HMNetInfo `json:"nginx,omitempty"`
VM HMVM `json:"vm,omitempty"` Swarm *HMNetInfo `json:"swarm,omitempty"`
LXC HMLXC `json:"lxc,omitempty"`
}
func (hm *HMMap) GetSwarmNetInfo() *HMNetInfo {
data, ok := hm.VM["swarm"]
if !ok {
return nil
}
return data
}
func (hm *HMMap) GetNginxNetInfo() *HMNetInfo {
data, ok := hm.LXC["nginx"]
if !ok {
return nil
}
return data
} }