@@ -525,6 +525,24 @@ func disableHost(host, port, configFile string) error {
525525 return cli .SetHost (key , utils .Disabled , time .Now ())
526526}
527527
528+ func forgetPersist (user , service , host , port , configFile string ) error {
529+ cli := mustInitEtcdClient (configFile )
530+ defer cli .Close ()
531+
532+ history , err := cli .GetHistory (user , service , host , port )
533+ if err != nil {
534+ return err
535+ }
536+
537+ for _ , kv := range history {
538+ err := cli .DelHistory (kv .User )
539+ if err != nil {
540+ return err
541+ }
542+ }
543+ return nil
544+ }
545+
528546func setErrorBanner (errorBanner string , expire time.Time , configFile string ) error {
529547 cli := mustInitEtcdClient (configFile )
530548 defer cli .Close ()
@@ -598,7 +616,7 @@ The commands are:
598616 version show version number and exit
599617 show show states present in etcd
600618 enable enable a host in etcd
601- forget forget a host/error_banner in etcd
619+ forget forget a host/error_banner/persist in etcd
602620 disable disable a host in etcd
603621 error_banner set the error banner in etcd
604622
@@ -676,17 +694,22 @@ Enable a previously disabled host in etcd.
676694 return fs
677695}
678696
679- func newForgetParser (allFlag * bool , hostString * string , portString * string ) * flag.FlagSet {
697+ func newForgetParser (allFlag * bool , hostString , portString , userString , serviceString * string ) * flag.FlagSet {
680698 fs := flag .NewFlagSet ("forget" , flag .ExitOnError )
681699 fs .BoolVar (allFlag , "all" , false , "forget all hosts present in config" )
682700 fs .StringVar (hostString , "host" , "" , "hostname to forget (can be a nodeset)" )
683701 fs .StringVar (portString , "port" , "" , "port to forget (can be a nodeset)" )
702+ fs .StringVar (userString , "user" , "" , "forget all persistent connections of this user" )
703+ fs .StringVar (serviceString , "service" , "" , "forget all persistent connections of this service" )
684704 fs .Usage = func () {
685705 fmt .Fprintf (flag .CommandLine .Output (), `Usage: %s forget COMMAND [OPTIONS]
686706
687707The commands are:
688- host -all|-host HOST [-port PORT] forget a host in etcd
689- error_banner forget the error_banner in etcd
708+ host -all|-host HOST [-port PORT] forget a host in etcd
709+ error_banner forget the error_banner in etcd
710+ persist [-user USER] [-service SERVICE] [-host HOST] [-port PORT] forget a persistent connection in etcd
711+ (needs at least one option)
712+ (only connections matching all the options are forgotten)
690713
691714The options are:
692715` , os .Args [0 ])
@@ -866,13 +889,14 @@ func main() {
866889 var sourceString string
867890 var hostString string
868891 var portString string
892+ var serviceString string
869893
870894 parsers := map [string ]* flag.FlagSet {
871895 "help" : newHelpParser (),
872896 "version" : newVersionParser (),
873897 "show" : newShowParser (& csvFlag , & jsonFlag , & allFlag , & userString , & groupsString , & sourceString ),
874898 "enable" : newEnableParser (& allFlag , & hostString , & portString ),
875- "forget" : newForgetParser (& allFlag , & hostString , & portString ),
899+ "forget" : newForgetParser (& allFlag , & hostString , & portString , & userString , & serviceString ),
876900 "disable" : newDisableParser (& allFlag , & hostString , & portString ),
877901 "error_banner" : newErrorBannerParser (& expire ),
878902 }
@@ -977,6 +1001,12 @@ func main() {
9771001 }
9781002 case "error_banner" :
9791003 delErrorBanner (* configFile )
1004+ case "persist" :
1005+ if userString == "" && serviceString == "" && hostString == "" && portString == "" {
1006+ fmt .Fprintf (os .Stderr , "ERROR: missing '-user', '-service', '-host' or '-port'\n \n " )
1007+ p .Usage ()
1008+ }
1009+ forgetPersist (userString , serviceString , hostString , portString , * configFile )
9801010 }
9811011 case "disable" :
9821012 p := parsers [cmd ]
0 commit comments