mirror of
https://github.com/DeBrosOfficial/network.git
synced 2025-12-12 23:18:49 +00:00
feat: add --ignore-resource-checks option to production commands
- Introduced a new command-line option `--ignore-resource-checks` to skip prerequisite validation for disk, RAM, and CPU during installation and upgrades. - Updated the `ProductionSetup` struct to include a flag for skipping resource checks, enhancing flexibility for users with specific deployment needs. - Enhanced logging to inform users when resource checks are skipped, improving transparency during the setup process.
This commit is contained in:
parent
c2298e476e
commit
c405be3e69
13
CHANGELOG.md
13
CHANGELOG.md
@ -13,6 +13,19 @@ The format is based on [Keep a Changelog][keepachangelog] and adheres to [Semant
|
|||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
## [0.69.3] - 2025-11-11
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Added `--ignore-resource-checks` flag to the install command to skip disk, RAM, and CPU prerequisite validation.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
\n
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
\n
|
||||||
## [0.69.2] - 2025-11-11
|
## [0.69.2] - 2025-11-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
2
Makefile
2
Makefile
@ -19,7 +19,7 @@ test-e2e:
|
|||||||
|
|
||||||
.PHONY: build clean test run-node run-node2 run-node3 run-example deps tidy fmt vet lint clear-ports install-hooks kill
|
.PHONY: build clean test run-node run-node2 run-node3 run-example deps tidy fmt vet lint clear-ports install-hooks kill
|
||||||
|
|
||||||
VERSION := 0.69.2
|
VERSION := 0.69.3
|
||||||
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
||||||
DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||||
LDFLAGS := -X 'main.version=$(VERSION)' -X 'main.commit=$(COMMIT)' -X 'main.date=$(DATE)'
|
LDFLAGS := -X 'main.version=$(VERSION)' -X 'main.commit=$(COMMIT)' -X 'main.date=$(DATE)'
|
||||||
|
|||||||
@ -61,6 +61,7 @@ func showProdHelp() {
|
|||||||
fmt.Printf(" --bootstrap-join ADDR - Bootstrap raft join address (for secondary bootstrap)\n")
|
fmt.Printf(" --bootstrap-join ADDR - Bootstrap raft join address (for secondary bootstrap)\n")
|
||||||
fmt.Printf(" --domain DOMAIN - Domain for HTTPS (optional)\n")
|
fmt.Printf(" --domain DOMAIN - Domain for HTTPS (optional)\n")
|
||||||
fmt.Printf(" --branch BRANCH - Git branch to use (main or nightly, default: main)\n")
|
fmt.Printf(" --branch BRANCH - Git branch to use (main or nightly, default: main)\n")
|
||||||
|
fmt.Printf(" --ignore-resource-checks - Skip disk/RAM/CPU prerequisite validation\n")
|
||||||
fmt.Printf(" upgrade - Upgrade existing installation (requires root/sudo)\n")
|
fmt.Printf(" upgrade - Upgrade existing installation (requires root/sudo)\n")
|
||||||
fmt.Printf(" Options:\n")
|
fmt.Printf(" Options:\n")
|
||||||
fmt.Printf(" --restart - Automatically restart services after upgrade\n")
|
fmt.Printf(" --restart - Automatically restart services after upgrade\n")
|
||||||
@ -101,6 +102,7 @@ func handleProdInstall(args []string) {
|
|||||||
// Parse arguments
|
// Parse arguments
|
||||||
force := false
|
force := false
|
||||||
isBootstrap := false
|
isBootstrap := false
|
||||||
|
skipResourceChecks := false
|
||||||
var vpsIP, domain, peersStr, bootstrapJoin, branch string
|
var vpsIP, domain, peersStr, bootstrapJoin, branch string
|
||||||
|
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
@ -129,6 +131,8 @@ func handleProdInstall(args []string) {
|
|||||||
if i+1 < len(args) {
|
if i+1 < len(args) {
|
||||||
branch = args[i+1]
|
branch = args[i+1]
|
||||||
}
|
}
|
||||||
|
case "--ignore-resource-checks":
|
||||||
|
skipResourceChecks = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +168,7 @@ func handleProdInstall(args []string) {
|
|||||||
|
|
||||||
debrosHome := "/home/debros"
|
debrosHome := "/home/debros"
|
||||||
debrosDir := debrosHome + "/.debros"
|
debrosDir := debrosHome + "/.debros"
|
||||||
setup := production.NewProductionSetup(debrosHome, os.Stdout, force, branch, false)
|
setup := production.NewProductionSetup(debrosHome, os.Stdout, force, branch, false, skipResourceChecks)
|
||||||
|
|
||||||
// Save branch preference for future upgrades
|
// Save branch preference for future upgrades
|
||||||
if err := production.SaveBranchPreference(debrosDir, branch); err != nil {
|
if err := production.SaveBranchPreference(debrosDir, branch); err != nil {
|
||||||
@ -279,7 +283,7 @@ func handleProdUpgrade(args []string) {
|
|||||||
fmt.Printf(" This will preserve existing configurations and data\n")
|
fmt.Printf(" This will preserve existing configurations and data\n")
|
||||||
fmt.Printf(" Configurations will be updated to latest format\n\n")
|
fmt.Printf(" Configurations will be updated to latest format\n\n")
|
||||||
|
|
||||||
setup := production.NewProductionSetup(debrosHome, os.Stdout, force, branch, noPull)
|
setup := production.NewProductionSetup(debrosHome, os.Stdout, force, branch, noPull, false)
|
||||||
|
|
||||||
// Log if --no-pull is enabled
|
// Log if --no-pull is enabled
|
||||||
if noPull {
|
if noPull {
|
||||||
|
|||||||
@ -11,28 +11,29 @@ import (
|
|||||||
|
|
||||||
// ProductionSetup orchestrates the entire production deployment
|
// ProductionSetup orchestrates the entire production deployment
|
||||||
type ProductionSetup struct {
|
type ProductionSetup struct {
|
||||||
osInfo *OSInfo
|
osInfo *OSInfo
|
||||||
arch string
|
arch string
|
||||||
debrosHome string
|
debrosHome string
|
||||||
debrosDir string
|
debrosDir string
|
||||||
logWriter io.Writer
|
logWriter io.Writer
|
||||||
forceReconfigure bool
|
forceReconfigure bool
|
||||||
skipOptionalDeps bool
|
skipOptionalDeps bool
|
||||||
privChecker *PrivilegeChecker
|
skipResourceChecks bool
|
||||||
osDetector *OSDetector
|
privChecker *PrivilegeChecker
|
||||||
archDetector *ArchitectureDetector
|
osDetector *OSDetector
|
||||||
resourceChecker *ResourceChecker
|
archDetector *ArchitectureDetector
|
||||||
fsProvisioner *FilesystemProvisioner
|
resourceChecker *ResourceChecker
|
||||||
userProvisioner *UserProvisioner
|
fsProvisioner *FilesystemProvisioner
|
||||||
stateDetector *StateDetector
|
userProvisioner *UserProvisioner
|
||||||
configGenerator *ConfigGenerator
|
stateDetector *StateDetector
|
||||||
secretGenerator *SecretGenerator
|
configGenerator *ConfigGenerator
|
||||||
serviceGenerator *SystemdServiceGenerator
|
secretGenerator *SecretGenerator
|
||||||
serviceController *SystemdController
|
serviceGenerator *SystemdServiceGenerator
|
||||||
binaryInstaller *BinaryInstaller
|
serviceController *SystemdController
|
||||||
branch string
|
binaryInstaller *BinaryInstaller
|
||||||
skipRepoUpdate bool
|
branch string
|
||||||
NodePeerID string // Captured during Phase3 for later display
|
skipRepoUpdate bool
|
||||||
|
NodePeerID string // Captured during Phase3 for later display
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadBranchPreference reads the stored branch preference from disk
|
// ReadBranchPreference reads the stored branch preference from disk
|
||||||
@ -63,7 +64,7 @@ func SaveBranchPreference(debrosDir, branch string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewProductionSetup creates a new production setup orchestrator
|
// NewProductionSetup creates a new production setup orchestrator
|
||||||
func NewProductionSetup(debrosHome string, logWriter io.Writer, forceReconfigure bool, branch string, skipRepoUpdate bool) *ProductionSetup {
|
func NewProductionSetup(debrosHome string, logWriter io.Writer, forceReconfigure bool, branch string, skipRepoUpdate bool, skipResourceChecks bool) *ProductionSetup {
|
||||||
debrosDir := debrosHome + "/.debros"
|
debrosDir := debrosHome + "/.debros"
|
||||||
arch, _ := (&ArchitectureDetector{}).Detect()
|
arch, _ := (&ArchitectureDetector{}).Detect()
|
||||||
|
|
||||||
@ -73,25 +74,26 @@ func NewProductionSetup(debrosHome string, logWriter io.Writer, forceReconfigure
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &ProductionSetup{
|
return &ProductionSetup{
|
||||||
debrosHome: debrosHome,
|
debrosHome: debrosHome,
|
||||||
debrosDir: debrosDir,
|
debrosDir: debrosDir,
|
||||||
logWriter: logWriter,
|
logWriter: logWriter,
|
||||||
forceReconfigure: forceReconfigure,
|
forceReconfigure: forceReconfigure,
|
||||||
arch: arch,
|
arch: arch,
|
||||||
branch: branch,
|
branch: branch,
|
||||||
skipRepoUpdate: skipRepoUpdate,
|
skipRepoUpdate: skipRepoUpdate,
|
||||||
privChecker: &PrivilegeChecker{},
|
skipResourceChecks: skipResourceChecks,
|
||||||
osDetector: &OSDetector{},
|
privChecker: &PrivilegeChecker{},
|
||||||
archDetector: &ArchitectureDetector{},
|
osDetector: &OSDetector{},
|
||||||
resourceChecker: NewResourceChecker(),
|
archDetector: &ArchitectureDetector{},
|
||||||
fsProvisioner: NewFilesystemProvisioner(debrosHome),
|
resourceChecker: NewResourceChecker(),
|
||||||
userProvisioner: NewUserProvisioner("debros", debrosHome, "/bin/bash"),
|
fsProvisioner: NewFilesystemProvisioner(debrosHome),
|
||||||
stateDetector: NewStateDetector(debrosDir),
|
userProvisioner: NewUserProvisioner("debros", debrosHome, "/bin/bash"),
|
||||||
configGenerator: NewConfigGenerator(debrosDir),
|
stateDetector: NewStateDetector(debrosDir),
|
||||||
secretGenerator: NewSecretGenerator(debrosDir),
|
configGenerator: NewConfigGenerator(debrosDir),
|
||||||
serviceGenerator: NewSystemdServiceGenerator(debrosHome, debrosDir),
|
secretGenerator: NewSecretGenerator(debrosDir),
|
||||||
serviceController: NewSystemdController(),
|
serviceGenerator: NewSystemdServiceGenerator(debrosHome, debrosDir),
|
||||||
binaryInstaller: NewBinaryInstaller(arch, logWriter),
|
serviceController: NewSystemdController(),
|
||||||
|
binaryInstaller: NewBinaryInstaller(arch, logWriter),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,23 +159,27 @@ func (ps *ProductionSetup) Phase1CheckPrerequisites() error {
|
|||||||
ps.logf(" ✓ Basic dependencies available")
|
ps.logf(" ✓ Basic dependencies available")
|
||||||
|
|
||||||
// Check system resources
|
// Check system resources
|
||||||
if err := ps.resourceChecker.CheckDiskSpace(ps.debrosHome); err != nil {
|
if ps.skipResourceChecks {
|
||||||
ps.logf(" ❌ %v", err)
|
ps.logf(" ⚠️ Skipping system resource checks (disk, RAM, CPU) due to --ignore-resource-checks flag")
|
||||||
return err
|
} else {
|
||||||
}
|
if err := ps.resourceChecker.CheckDiskSpace(ps.debrosHome); err != nil {
|
||||||
ps.logf(" ✓ Sufficient disk space available")
|
ps.logf(" ❌ %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ps.logf(" ✓ Sufficient disk space available")
|
||||||
|
|
||||||
if err := ps.resourceChecker.CheckRAM(); err != nil {
|
if err := ps.resourceChecker.CheckRAM(); err != nil {
|
||||||
ps.logf(" ❌ %v", err)
|
ps.logf(" ❌ %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ps.logf(" ✓ Sufficient RAM available")
|
ps.logf(" ✓ Sufficient RAM available")
|
||||||
|
|
||||||
if err := ps.resourceChecker.CheckCPU(); err != nil {
|
if err := ps.resourceChecker.CheckCPU(); err != nil {
|
||||||
ps.logf(" ❌ %v", err)
|
ps.logf(" ❌ %v", err)
|
||||||
return err
|
return err
|
||||||
|
}
|
||||||
|
ps.logf(" ✓ Sufficient CPU cores available")
|
||||||
}
|
}
|
||||||
ps.logf(" ✓ Sufficient CPU cores available")
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user