code.dwrz.net

Go monorepo.
Log | Files | Refs

config.go (950B)


      1 package config
      2 
      3 import (
      4 	"context"
      5 	_ "embed"
      6 	"encoding/json"
      7 	"flag"
      8 	"fmt"
      9 	"strconv"
     10 
     11 	"github.com/aws/aws-sdk-go-v2/aws"
     12 	"github.com/aws/aws-sdk-go-v2/config"
     13 )
     14 
     15 var (
     16 	//go:embed config.json
     17 	configuration []byte
     18 	ttl           = flag.String("ttl", "300", "TTL")
     19 )
     20 
     21 type Config struct {
     22 	AWS          *aws.Config `json:"-"`
     23 	HostedZoneId string      `json:"hostedZoneId"`
     24 	TTL          int64       `json:"-"`
     25 }
     26 
     27 func New(ctx context.Context) (*Config, error) {
     28 	flag.Parse()
     29 
     30 	var cfg = &Config{}
     31 	if err := json.Unmarshal(configuration, cfg); err != nil {
     32 		return nil, fmt.Errorf("failed to parse config file: %v", err)
     33 	}
     34 
     35 	awscfg, err := config.LoadDefaultConfig(ctx)
     36 	if err != nil {
     37 		return nil, fmt.Errorf("failed to retrieve AWS config: %v", err)
     38 	}
     39 	cfg.AWS = &awscfg
     40 
     41 	if n, err := strconv.ParseInt(*ttl, 10, 64); err != nil {
     42 		return nil, fmt.Errorf("failed to parse ttl: %v", err)
     43 	} else {
     44 		cfg.TTL = n
     45 	}
     46 
     47 	return cfg, nil
     48 }