mirror of
				https://github.com/nabbar/golib.git
				synced 2025-11-01 03:22:34 +08:00 
			
		
		
		
	 31cff079a7
			
		
	
	31cff079a7
	
	
	
		
			
			- Add Getxxxx function from viper into interface to prevent using lib viper and spf viper instance Package Config: - change pointer to retrieve config: using golib viper instead of spf viper (allow hook instead of no hook)
		
			
				
	
	
		
			249 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
|  * MIT License
 | |
|  *
 | |
|  * Copyright (c) 2022 Nicolas JUHEL
 | |
|  *
 | |
|  * Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
|  * of this software and associated documentation files (the "Software"), to deal
 | |
|  * in the Software without restriction, including without limitation the rights
 | |
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
|  * copies of the Software, and to permit persons to whom the Software is
 | |
|  * furnished to do so, subject to the following conditions:
 | |
|  *
 | |
|  * The above copyright notice and this permission notice shall be included in all
 | |
|  * copies or substantial portions of the Software.
 | |
|  *
 | |
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | |
|  * SOFTWARE.
 | |
|  *
 | |
|  *
 | |
|  */
 | |
| 
 | |
| package aws
 | |
| 
 | |
| import (
 | |
| 	libaws "github.com/nabbar/golib/aws"
 | |
| 	cfgstd "github.com/nabbar/golib/aws/configAws"
 | |
| 	cfgcus "github.com/nabbar/golib/aws/configCustom"
 | |
| 	libhtc "github.com/nabbar/golib/httpcli"
 | |
| 	libreq "github.com/nabbar/golib/request"
 | |
| 	libvpr "github.com/nabbar/golib/viper"
 | |
| 	spfcbr "github.com/spf13/cobra"
 | |
| 	spfvpr "github.com/spf13/viper"
 | |
| )
 | |
| 
 | |
| type _configFlag struct {
 | |
| 	accessKey *string
 | |
| 	secretKey *string
 | |
| 	bucket    *string
 | |
| 	region    *string
 | |
| 	endpoint  *string
 | |
| }
 | |
| 
 | |
| func (c *_configFlag) updCustom(cfg *cfgcus.Model) {
 | |
| 	if c.accessKey != nil {
 | |
| 		cfg.AccessKey = *c.accessKey
 | |
| 	}
 | |
| 	if c.secretKey != nil {
 | |
| 		cfg.SecretKey = *c.secretKey
 | |
| 	}
 | |
| 	if c.bucket != nil {
 | |
| 		cfg.Bucket = *c.bucket
 | |
| 	}
 | |
| 	if c.region != nil {
 | |
| 		cfg.Region = *c.region
 | |
| 	}
 | |
| 	if c.endpoint != nil {
 | |
| 		cfg.Endpoint = *c.endpoint
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (c *_configFlag) updStandard(cfg *cfgstd.Model) {
 | |
| 	if c.accessKey != nil {
 | |
| 		cfg.AccessKey = *c.accessKey
 | |
| 	}
 | |
| 	if c.secretKey != nil {
 | |
| 		cfg.SecretKey = *c.secretKey
 | |
| 	}
 | |
| 	if c.bucket != nil {
 | |
| 		cfg.Bucket = *c.bucket
 | |
| 	}
 | |
| 	if c.region != nil {
 | |
| 		cfg.Region = *c.region
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (o *componentAws) RegisterFlag(Command *spfcbr.Command) error {
 | |
| 	var (
 | |
| 		key = o._getKey()
 | |
| 		vpr *spfvpr.Viper
 | |
| 	)
 | |
| 
 | |
| 	if vpr = o._getSPFViper(); vpr == nil {
 | |
| 		return ErrorComponentNotInitialized.Error(nil)
 | |
| 	} else if key = o._getKey(); len(key) < 1 {
 | |
| 		return ErrorComponentNotInitialized.Error(nil)
 | |
| 	}
 | |
| 
 | |
| 	_ = Command.PersistentFlags().String(key+".access-key", "", "AWS Access Key")
 | |
| 	_ = Command.PersistentFlags().String(key+".secret-key", "", "AWS Secret Key")
 | |
| 	_ = Command.PersistentFlags().String(key+".bucket", "", "Bucket to use")
 | |
| 	_ = Command.PersistentFlags().String(key+".region", "", "Region for bucket")
 | |
| 	_ = Command.PersistentFlags().String(key+".endpoint", "", "Endpoint if necessary for the region")
 | |
| 
 | |
| 	if err := vpr.BindPFlag(key+".access-key", Command.PersistentFlags().Lookup(key+".access-key")); err != nil {
 | |
| 		return err
 | |
| 	} else if err = vpr.BindPFlag(key+".secret-key", Command.PersistentFlags().Lookup(key+".secret-key")); err != nil {
 | |
| 		return err
 | |
| 	} else if err = vpr.BindPFlag(key+".bucket", Command.PersistentFlags().Lookup(key+".bucket")); err != nil {
 | |
| 		return err
 | |
| 	} else if err = vpr.BindPFlag(key+".region", Command.PersistentFlags().Lookup(key+".region")); err != nil {
 | |
| 		return err
 | |
| 	} else if err = vpr.BindPFlag(key+".endpoint", Command.PersistentFlags().Lookup(key+".endpoint")); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (o *componentAws) _getConfig() (libaws.Config, *libreq.OptionsHealth, *libhtc.Options, error) {
 | |
| 	var (
 | |
| 		key string
 | |
| 		cfg libaws.Config
 | |
| 		flg = o._getFlagUpdate()
 | |
| 		mon *libreq.OptionsHealth
 | |
| 		htc *libhtc.Options
 | |
| 		vpr libvpr.Viper
 | |
| 		err error
 | |
| 	)
 | |
| 
 | |
| 	if vpr = o._getViper(); vpr == nil {
 | |
| 		return nil, nil, nil, ErrorComponentNotInitialized.Error(nil)
 | |
| 	} else if key = o._getKey(); len(key) < 1 {
 | |
| 		return nil, nil, nil, ErrorComponentNotInitialized.Error(nil)
 | |
| 	}
 | |
| 
 | |
| 	switch o.d {
 | |
| 	case ConfigCustomStatus:
 | |
| 		cnf := cfgcus.ModelStatus{}
 | |
| 		if err = vpr.UnmarshalKey(key, &cnf); err != nil {
 | |
| 			return nil, nil, nil, ErrorParamInvalid.Error(err)
 | |
| 		} else {
 | |
| 			flg.updCustom(&cnf.Config)
 | |
| 		}
 | |
| 
 | |
| 		if cfg, err = o.d.NewFromModel(cnf); err != nil {
 | |
| 			return nil, nil, nil, err
 | |
| 		} else {
 | |
| 			mon = &cnf.Monitor
 | |
| 			htc = &cnf.HTTPClient
 | |
| 		}
 | |
| 
 | |
| 	case ConfigCustom:
 | |
| 		cnf := cfgcus.Model{}
 | |
| 		if err = vpr.UnmarshalKey(key, &cnf); err != nil {
 | |
| 			return nil, nil, nil, ErrorParamInvalid.Error(err)
 | |
| 		} else {
 | |
| 			flg.updCustom(&cnf)
 | |
| 		}
 | |
| 
 | |
| 		if cfg, err = o.d.NewFromModel(cnf); err != nil {
 | |
| 			return nil, nil, nil, err
 | |
| 		} else {
 | |
| 			mon = nil
 | |
| 			htc = nil
 | |
| 		}
 | |
| 
 | |
| 	case ConfigStandardStatus:
 | |
| 		cnf := cfgstd.ModelStatus{}
 | |
| 		if err = vpr.UnmarshalKey(key, &cnf); err != nil {
 | |
| 			return nil, nil, nil, ErrorParamInvalid.Error(err)
 | |
| 		} else {
 | |
| 			flg.updStandard(&cnf.Config)
 | |
| 		}
 | |
| 
 | |
| 		if cfg, err = o.d.NewFromModel(cnf); err != nil {
 | |
| 			return nil, nil, nil, err
 | |
| 		} else {
 | |
| 			mon = &cnf.Monitor
 | |
| 			htc = &cnf.HTTPClient
 | |
| 		}
 | |
| 
 | |
| 	case ConfigStandard:
 | |
| 		cnf := cfgstd.Model{}
 | |
| 		if err = vpr.UnmarshalKey(key, &cnf); err != nil {
 | |
| 			return nil, nil, nil, ErrorParamInvalid.Error(err)
 | |
| 		} else {
 | |
| 			flg.updStandard(&cnf)
 | |
| 		}
 | |
| 
 | |
| 		if cfg, err = o.d.NewFromModel(cnf); err != nil {
 | |
| 			return nil, nil, nil, err
 | |
| 		} else {
 | |
| 			mon = nil
 | |
| 			htc = nil
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if err = cfg.Validate(); err != nil {
 | |
| 		return nil, nil, nil, ErrorConfigInvalid.Error(err)
 | |
| 	}
 | |
| 
 | |
| 	if mon != nil {
 | |
| 		if err = mon.Validate(); err != nil {
 | |
| 			return nil, nil, nil, ErrorConfigInvalid.Error(err)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if htc != nil {
 | |
| 		if err = htc.Validate(); err != nil {
 | |
| 			return nil, nil, nil, ErrorConfigInvalid.Error(err)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return cfg, mon, htc, nil
 | |
| }
 | |
| 
 | |
| func (o *componentAws) _getFlagUpdate() *_configFlag {
 | |
| 	var (
 | |
| 		cfg = &_configFlag{
 | |
| 			accessKey: nil,
 | |
| 			secretKey: nil,
 | |
| 			bucket:    nil,
 | |
| 			region:    nil,
 | |
| 			endpoint:  nil,
 | |
| 		}
 | |
| 		vpr *spfvpr.Viper
 | |
| 		key string
 | |
| 	)
 | |
| 
 | |
| 	if vpr = o._getSPFViper(); vpr == nil {
 | |
| 		return nil
 | |
| 	} else if key = o._getKey(); len(key) < 1 {
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	if s := vpr.GetString(key + ".access-key"); s != "" {
 | |
| 		cfg.accessKey = &s
 | |
| 	}
 | |
| 	if s := vpr.GetString(key + ".secret-key"); s != "" {
 | |
| 		cfg.secretKey = &s
 | |
| 	}
 | |
| 	if s := vpr.GetString(key + ".bucket"); s != "" {
 | |
| 		cfg.bucket = &s
 | |
| 	}
 | |
| 	if s := vpr.GetString(key + ".region"); s != "" {
 | |
| 		cfg.region = &s
 | |
| 	}
 | |
| 	if s := vpr.GetString(key + ".endpoint"); s != "" {
 | |
| 		cfg.endpoint = &s
 | |
| 	}
 | |
| 
 | |
| 	return cfg
 | |
| }
 |