From cf00a6c81060590012f488fd63fb68c2545e3225 Mon Sep 17 00:00:00 2001 From: Max McAdam Date: Wed, 24 Jul 2024 07:41:29 -0700 Subject: [PATCH] Issue #4111 - Bug: secret_exists column not added to secrets_policy if table already exists Signed-off-by: Max McAdam --- agreementbot/persistence/postgresql/init.go | 13 ++++--- .../persistence/postgresql/version.go | 9 +++-- cli/cliutils/cliutils.go | 38 +++++++++---------- cli/eventlog/eventlog.go | 14 +++---- persistence/eventlogs.go | 4 +- 5 files changed, 42 insertions(+), 36 deletions(-) diff --git a/agreementbot/persistence/postgresql/init.go b/agreementbot/persistence/postgresql/init.go index d28303d4f..a055e8010 100644 --- a/agreementbot/persistence/postgresql/init.go +++ b/agreementbot/persistence/postgresql/init.go @@ -140,15 +140,18 @@ func (db *AgbotPostgresqlDB) Initialize(cfg *config.HorizonConfig) error { for si := 0; si < len(migrationSQL[v].sql); si++ { if _, err := db.db.Exec(migrationSQL[v].sql[si]); err != nil { return errors.New(fmt.Sprintf("unable to run SQL migration statement version %v, index %v, statement %v, error: %v", v, si, migrationSQL[v].sql[si], err)) - } else if _, err := db.db.Exec(VERSION_UPDATE, HIGHEST_DATABASE_VERSION, migrationSQL[v].description); err != nil { - return errors.New(fmt.Sprintf("unable to create version table, error: %v", err)) } else { - glog.V(3).Infof("Postgresql database tables upgraded to version %v, %v", v, migrationSQL[v].description) + glog.V(3).Infof("Postgresql database tables upgraded for version %v, %v", v, migrationSQL[v].description) } } - } - glog.V(3).Infof("Postgresql database tables upgraded to version %v", HIGHEST_DATABASE_VERSION) + if _, err := db.db.Exec(VERSION_UPDATE, HIGHEST_DATABASE_VERSION, migrationSQL[v].description); err != nil { + return errors.New(fmt.Sprintf("unable to create version table, error: %v", err)) + } else { + glog.V(3).Infof("Postgresql database tables upgraded to version %v, %v", v, migrationSQL[v].description) + } + } + glog.V(3).Infof("Finished upgrading postgresql database tables. The version is now %v", HIGHEST_DATABASE_VERSION) } glog.V(3).Infof("Postgresql database tables initialized.") diff --git a/agreementbot/persistence/postgresql/version.go b/agreementbot/persistence/postgresql/version.go index dd2985875..33dfb027e 100644 --- a/agreementbot/persistence/postgresql/version.go +++ b/agreementbot/persistence/postgresql/version.go @@ -22,13 +22,14 @@ const VERSION_QUERY = `SELECT ver, description, updated FROM version WHERE id = const VERSION_INSERT = `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM version WHERE id = 1) THEN - INSERT INTO version (id, ver, description) VALUES (1, 0, 'initial tables'); + INSERT INTO version (id, ver, description) VALUES (1, 1, 'initial tables'); END IF; END $$` const VERSION_UPDATE = `UPDATE version SET ver = $1, description = $2, updated = current_timestamp WHERE id = 1;` -const HIGHEST_DATABASE_VERSION = v1 +const HIGHEST_DATABASE_VERSION = v2 +const v2 = 1 const v1 = 0 type SchemaUpdate struct { @@ -36,4 +37,6 @@ type SchemaUpdate struct { description string // A description of the schema change. } -var migrationSQL = map[int]SchemaUpdate{} +var v2SchemaUpdate = SchemaUpdate{sql: []string{"ALTER TABLE secrets_policy ADD COLUMN IF NOT EXISTS \"secret_exists\" BOOLEAN NOT NULL DEFAULT true;", "ALTER TABLE secrets_pattern ADD COLUMN IF NOT EXISTS \"secret_exists\" BOOLEAN NOT NULL DEFAULT true;"}, description: "Add a column to the secrets table to indicate if the secret exists or not. This is necessary to support node-specific secrets."} + +var migrationSQL = map[int]SchemaUpdate{v2: v2SchemaUpdate} diff --git a/cli/cliutils/cliutils.go b/cli/cliutils/cliutils.go index bf244f061..d79b24dba 100644 --- a/cli/cliutils/cliutils.go +++ b/cli/cliutils/cliutils.go @@ -1098,29 +1098,29 @@ func GetIcpCertPath() string { // TrustIcpCert adds the icp cert file to be trusted in calls made by the given http client func TrustIcpCert(httpClient *http.Client) error { - icpCertPath := GetIcpCertPath() + icpCertPath := GetIcpCertPath() - var caCertPool *x509.CertPool - var err error + var caCertPool *x509.CertPool + var err error - // Trust the system certs like the anax agent code can - caCertPool, err = x509.SystemCertPool() - if err != nil { + // Trust the system certs like the anax agent code can + caCertPool, err = x509.SystemCertPool() + if err != nil { // Decided not to fail and return here but just create a new pool caCertPool = x509.NewCertPool() - } - - if icpCertPath != "" { - icpCert, err := ioutil.ReadFile(icpCertPath) - if err != nil { - return fmt.Errorf(i18n.GetMessagePrinter().Sprintf("Encountered error reading ICP cert file %v: %v", icpCertPath, err)) - } - caCertPool.AppendCertsFromPEM(icpCert) - } - - transport := httpClient.Transport.(*http.Transport) - transport.TLSClientConfig.RootCAs = caCertPool - return nil + } + + if icpCertPath != "" { + icpCert, err := ioutil.ReadFile(icpCertPath) + if err != nil { + return fmt.Errorf(i18n.GetMessagePrinter().Sprintf("Encountered error reading ICP cert file %v: %v", icpCertPath, err)) + } + caCertPool.AppendCertsFromPEM(icpCert) + } + + transport := httpClient.Transport.(*http.Transport) + transport.TLSClientConfig.RootCAs = caCertPool + return nil } // Get exchange url from /etc/default/horizon file. if not set, check /etc/horizon/anax.json file diff --git a/cli/eventlog/eventlog.go b/cli/eventlog/eventlog.go index 2acd37716..7910a5de3 100644 --- a/cli/eventlog/eventlog.go +++ b/cli/eventlog/eventlog.go @@ -84,7 +84,7 @@ func Delete(selections []string, force bool) { retCode, count := cliutils.HorizonDelete(url_s, []int{204}, []int{200}, false) if retCode == http.StatusOK { - fmt.Println(i18n.GetMessagePrinter().Sprintf("Successfully deleted %v matching event log entries.", cliutils.RemoveQuotes(fmt.Sprintf("%v",count)))) + fmt.Println(i18n.GetMessagePrinter().Sprintf("Successfully deleted %v matching event log entries.", cliutils.RemoveQuotes(fmt.Sprintf("%v", count)))) } else { fmt.Println(i18n.GetMessagePrinter().Sprintf("No event log entries matching the given selectors were found.")) } @@ -97,13 +97,13 @@ func Prune(force bool) { cliutils.ConfirmRemove(i18n.GetMessagePrinter().Sprintf("Are you sure you want to remove all event logs from previous registrations?")) } - retCode, count := cliutils.HorizonDelete(url, []int{204}, []int{200}, false) + retCode, count := cliutils.HorizonDelete(url, []int{204}, []int{200}, false) - if retCode == http.StatusOK { - fmt.Println(i18n.GetMessagePrinter().Sprintf("Successfully pruned %v matching event log entries.", cliutils.RemoveQuotes(fmt.Sprintf("%v",count)))) - } else { - fmt.Println(i18n.GetMessagePrinter().Sprintf("No event log entries from previous registrations were found.")) - } + if retCode == http.StatusOK { + fmt.Println(i18n.GetMessagePrinter().Sprintf("Successfully pruned %v matching event log entries.", cliutils.RemoveQuotes(fmt.Sprintf("%v", count)))) + } else { + fmt.Println(i18n.GetMessagePrinter().Sprintf("No event log entries from previous registrations were found.")) + } } func List(all bool, detail bool, selections []string, tailing bool) { diff --git a/persistence/eventlogs.go b/persistence/eventlogs.go index be25157ff..c5872c167 100644 --- a/persistence/eventlogs.go +++ b/persistence/eventlogs.go @@ -66,7 +66,7 @@ func (w EventLogBase) Matches(selectors map[string][]Selector) bool { case "timestamp": attr = w.Timestamp case "time_since": - attr = (uint64(time.Now().Unix()) - w.Timestamp)/3600 + attr = (uint64(time.Now().Unix()) - w.Timestamp) / 3600 default: return false // not tolerate wrong attribute name in the selector } @@ -436,7 +436,7 @@ func DeleteEventLogsWithSelectors(db *bolt.DB, selectors map[string][]Selector, glog.Errorf("Unable to convert event source: %v. Error: %v", el.Source, err) } else if (*esrc).Matches(source_selectors) { b.Delete(k) - count ++ + count++ } } }