...

Source file src/edge-infra.dev/hack/tools/cleaner/config/config.go

Documentation: edge-infra.dev/hack/tools/cleaner/config

     1  package config
     2  
     3  import (
     4  	"context"
     5  	"database/sql"
     6  	"flag"
     7  	"fmt"
     8  
     9  	"github.com/peterbourgon/ff/v3"
    10  
    11  	"edge-infra.dev/pkg/lib/gcp/cloudsql"
    12  )
    13  
    14  type Environment struct {
    15  	DatabaseHost            string
    16  	DatabaseConnectionName  string
    17  	DatabaseName            string
    18  	DatabaseUsername        string
    19  	DatabasePassword        string
    20  	DatabasePort            string
    21  	DryRun                  bool
    22  	DeleteKubeconfigEntries bool
    23  }
    24  
    25  func NewConfig(args []string) (*Environment, error) {
    26  	config := Environment{}
    27  
    28  	fs := flag.NewFlagSet("re", flag.ExitOnError)
    29  
    30  	fs.StringVar(&config.DatabaseHost,
    31  		"database_host",
    32  		"",
    33  		"Database Host",
    34  	)
    35  
    36  	fs.StringVar(&config.DatabaseConnectionName,
    37  		"database_connection_name",
    38  		"",
    39  		"Database Connection Name",
    40  	)
    41  
    42  	fs.StringVar(&config.DatabaseName,
    43  		"database_name",
    44  		"",
    45  		"Database Name",
    46  	)
    47  
    48  	fs.StringVar(&config.DatabaseUsername,
    49  		"database_username",
    50  		"",
    51  		"Database User Name",
    52  	)
    53  
    54  	fs.StringVar(&config.DatabasePassword,
    55  		"database_password",
    56  		"",
    57  		"Database Password",
    58  	)
    59  
    60  	fs.StringVar(&config.DatabasePort,
    61  		"database_port",
    62  		"",
    63  		"Database Port",
    64  	)
    65  
    66  	fs.BoolVar(&config.DryRun,
    67  		"dry_run",
    68  		true,
    69  		"Run Commands in Dry Run",
    70  	)
    71  
    72  	fs.BoolVar(&config.DeleteKubeconfigEntries,
    73  		"delete_kubeconfig_entries",
    74  		false,
    75  		"Should added kubeconfig entries be cleaned up",
    76  	)
    77  
    78  	if err := ff.Parse(fs, args, ff.WithEnvVarNoPrefix()); err != nil {
    79  		return &Environment{}, err
    80  	}
    81  
    82  	return &config, nil
    83  }
    84  
    85  func (c *Environment) ConnectDatabase(ctx context.Context) (*sql.DB, error) {
    86  	edgeDB := &cloudsql.EdgePostgres{}
    87  	switch {
    88  	case c.DatabaseConnectionName != "":
    89  		edgeDB = cloudsql.GCPPostgresConnection(c.DatabaseConnectionName)
    90  	case c.DatabaseConnectionName == "" && c.DatabaseHost != "":
    91  		if c.DatabasePort == "" {
    92  			return nil, fmt.Errorf("database port is required")
    93  		}
    94  		edgeDB = cloudsql.PostgresConnection(c.DatabaseHost, c.DatabasePort).Password(c.DatabasePassword)
    95  	default:
    96  		return nil, fmt.Errorf("database_connection_name or database_host must be provided")
    97  	}
    98  	dbConnection, err := edgeDB.
    99  		DBName(c.DatabaseName).
   100  		Username(c.DatabaseUsername).
   101  		NewConnection()
   102  	if err != nil {
   103  		return nil, err
   104  	}
   105  	if err := dbConnection.PingContext(ctx); err != nil {
   106  		return nil, err
   107  	}
   108  	return dbConnection, nil
   109  }
   110  

View as plain text