Add --host file to restrict fetches
This commit is contained in:
@ -8,6 +8,7 @@ ipng-router-backup \- SSH Router Backup Tool
|
||||
.RI [ --password " PASSWORD" ]
|
||||
.RI [ --key-file " KEYFILE" ]
|
||||
.RI [ --port " PORT" ]
|
||||
.RI [ --host " HOSTNAME" ]...
|
||||
.SH DESCRIPTION
|
||||
.B router_backup
|
||||
is a tool for backing up router configurations via SSH. It connects to multiple routers defined in a YAML configuration file and executes commands, saving the output to files.
|
||||
@ -30,6 +31,9 @@ SSH private key file path
|
||||
.BR --port " \fIPORT\fR"
|
||||
SSH port number (default: 22)
|
||||
.TP
|
||||
.BR --host " \fIHOSTNAME\fR"
|
||||
Specific host(s) to process (can be repeated, processes all if not specified)
|
||||
.TP
|
||||
.BR --help
|
||||
Show help message
|
||||
.SH CONFIGURATION
|
||||
@ -81,6 +85,11 @@ Using password authentication:
|
||||
.EX
|
||||
ipng-router-backup --config config.yaml --password mysecretpass
|
||||
.EE
|
||||
.TP
|
||||
Process specific hosts only:
|
||||
.EX
|
||||
ipng-router-backup --config config.yaml --host asw100 --host asw120
|
||||
.EE
|
||||
.SH FILES
|
||||
.TP
|
||||
.I /etc/ipng-router-backup/config.yaml.example
|
||||
|
@ -221,6 +221,7 @@ func main() {
|
||||
var keyFile string
|
||||
var port int
|
||||
var outputDir string
|
||||
var hostFilter []string
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "ipng-router-backup",
|
||||
@ -250,10 +251,23 @@ func main() {
|
||||
log.Fatal("No devices found in config file")
|
||||
}
|
||||
|
||||
successCount := 0
|
||||
totalCount := len(config.Devices)
|
||||
// Filter devices if --host flags are provided
|
||||
devicesToProcess := config.Devices
|
||||
if len(hostFilter) > 0 {
|
||||
devicesToProcess = make(map[string]Device)
|
||||
for _, hostname := range hostFilter {
|
||||
if deviceConfig, exists := config.Devices[hostname]; exists {
|
||||
devicesToProcess[hostname] = deviceConfig
|
||||
} else {
|
||||
fmt.Printf("Warning: Host '%s' not found in config file\n", hostname)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for hostname, deviceConfig := range config.Devices {
|
||||
successCount := 0
|
||||
totalCount := len(devicesToProcess)
|
||||
|
||||
for hostname, deviceConfig := range devicesToProcess {
|
||||
fmt.Printf("\nProcessing device: %s (type: %s)\n", hostname, deviceConfig.Type)
|
||||
|
||||
user := deviceConfig.User
|
||||
@ -306,6 +320,7 @@ func main() {
|
||||
rootCmd.Flags().StringVar(&keyFile, "key-file", "", "SSH private key file path")
|
||||
rootCmd.Flags().IntVar(&port, "port", 22, "SSH port")
|
||||
rootCmd.Flags().StringVar(&outputDir, "output-dir", "/tmp", "Output directory for command output files")
|
||||
rootCmd.Flags().StringSliceVar(&hostFilter, "host", []string{}, "Specific host(s) to process (can be repeated, processes all if not specified)")
|
||||
|
||||
rootCmd.MarkFlagRequired("config")
|
||||
|
||||
|
Reference in New Issue
Block a user