Skip to content

Commit 04258fb

Browse files
committed
*: improve logging messages
This slightly improves some of the logging messages and hides the Terraform output by default (it can still be enabled by setting the log level to debug). Installing a cluster with libvirt looks like the following: INFO Fetching OS image... INFO Using Terraform to create cluster...
1 parent 2dbee06 commit 04258fb

File tree

10 files changed

+64
-71
lines changed

10 files changed

+64
-71
lines changed

cmd/openshift-install/main.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"fmt"
55
"os"
66

7-
log "github.com/sirupsen/logrus"
7+
"github.com/sirupsen/logrus"
88
"gopkg.in/alecthomas/kingpin.v2"
99

1010
"github.com/openshift/installer/pkg/asset"
@@ -23,19 +23,24 @@ var (
2323
destroyCommand = kingpin.Command("destroy-cluster", "Destroy an OpenShift cluster")
2424

2525
dirFlag = kingpin.Flag("dir", "assets directory").Default(".").String()
26-
logLevel = kingpin.Flag("log-level", "log level (e.g. \"debug\")").Default("warn").Enum("debug", "info", "warn", "error", "fatal", "panic")
26+
logLevel = kingpin.Flag("log-level", "log level (e.g. \"debug\")").Default("info").Enum("debug", "info", "warn", "error")
2727

2828
version = "was not built correctly" // set in hack/build.sh
2929
)
3030

3131
func main() {
3232
command := kingpin.Parse()
33-
l, err := log.ParseLevel(*logLevel)
34-
if err != nil {
33+
34+
logrus.SetFormatter(&logrus.TextFormatter{
35+
DisableTimestamp: true,
36+
DisableLevelTruncation: true,
37+
})
38+
if level, err := logrus.ParseLevel(*logLevel); err == nil {
39+
logrus.SetLevel(level)
40+
} else {
3541
// By definition we should never enter this condition since kingpin should be guarding against incorrect values.
36-
log.Fatalf("invalid log-level: %v", err)
42+
logrus.Panicf("Invalid log-level: %v", err)
3743
}
38-
log.SetLevel(l)
3944

4045
if command == versionCommand.FullCommand() {
4146
fmt.Printf("%s %s\n", os.Args[0], version)
@@ -77,26 +82,20 @@ func main() {
7782
for _, asset := range targetAssets {
7883
st, err := assetStore.Fetch(asset)
7984
if err != nil {
80-
log.Fatalf("failed to generate asset: %v", err)
81-
os.Exit(1)
85+
logrus.Fatalf("Failed to generate asset: %v", err)
8286
}
8387

8488
if err := st.PersistToFile(*dirFlag); err != nil {
85-
log.Fatalf("failed to write target to disk: %v", err)
86-
os.Exit(1)
89+
logrus.Fatalf("Failed to write asset (%s) to disk: %v", asset.Name(), err)
8790
}
8891
}
8992
case destroyCommand.FullCommand():
90-
destroyer, err := destroy.New(l, *dirFlag)
93+
destroyer, err := destroy.New(logrus.StandardLogger(), *dirFlag)
9194
if err != nil {
92-
log.Fatalf("failed to create destroyer: %v", err)
93-
os.Exit(1)
95+
logrus.Fatalf("Failed while preparing to destroy cluster: %v", err)
9496
}
9597
if err := destroyer.Run(); err != nil {
96-
log.Fatalf("destroy failed: %v", err)
97-
os.Exit(1)
98+
logrus.Fatalf("Failed to destroy cluster: %v", err)
9899
}
99-
100100
}
101-
102101
}

pkg/asset/cluster/cluster.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"os"
88
"path/filepath"
99

10-
log "github.com/sirupsen/logrus"
10+
"github.com/sirupsen/logrus"
1111

1212
"github.com/openshift/installer/data"
1313
"github.com/openshift/installer/pkg/asset"
@@ -73,6 +73,8 @@ func (c *Cluster) Generate(parents map[asset.Asset]*asset.State) (*asset.State,
7373
return nil, err
7474
}
7575

76+
logrus.Infof("Using Terraform to create cluster...")
77+
7678
// This runs the terraform in a temp directory, the tfstate file will be returned
7779
// to the asset store to persist it on the disk.
7880
if err := terraform.Init(tmpDir); err != nil {
@@ -81,22 +83,24 @@ func (c *Cluster) Generate(parents map[asset.Asset]*asset.State) (*asset.State,
8183

8284
stateFile, err := terraform.Apply(tmpDir)
8385
if err != nil {
84-
// we should try to fetch the terraform state file.
85-
log.Errorf("terraform failed: %v", err)
86+
err = fmt.Errorf("terraform failed: %v", err)
8687
}
8788

88-
data, err := ioutil.ReadFile(stateFile)
89-
if err != nil {
90-
return nil, fmt.Errorf("failed to read tfstate file %q: %v", stateFile, err)
89+
data, err2 := ioutil.ReadFile(stateFile)
90+
if err2 != nil {
91+
if err == nil {
92+
err = err2
93+
} else {
94+
logrus.Errorf("Failed to read tfstate (%q): %v", stateFile, err2)
95+
}
9196
}
9297

93-
// TODO(yifan): Use the kubeconfig to verify the cluster is up.
9498
return &asset.State{
9599
Contents: []asset.Content{
96100
{
97101
Name: stateFileName,
98102
Data: data,
99103
},
100104
},
101-
}, nil
105+
}, err
102106
}

pkg/asset/store.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (s *StoreImpl) Fetch(asset Asset) (*State, error) {
2525
}
2626

2727
func (s *StoreImpl) fetch(asset Asset, indent string) (*State, error) {
28-
logrus.Infof("%sFetching %s...", indent, asset.Name())
28+
logrus.Debugf("%sFetching %s...", indent, asset.Name())
2929
state, ok := s.assets[asset]
3030
if ok {
3131
logrus.Debugf("%sFound %s...", indent, asset.Name())

pkg/destroy/aws.go

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,18 @@
11
package destroy
22

33
import (
4-
"os"
5-
64
atd "github.com/openshift/hive/contrib/pkg/awstagdeprovision"
75
"github.com/openshift/installer/pkg/types"
8-
log "github.com/sirupsen/logrus"
6+
"github.com/sirupsen/logrus"
97
)
108

119
// NewAWS returns an AWS destroyer from ClusterMetadata.
12-
func NewAWS(level log.Level, metadata *types.ClusterMetadata) (Destroyer, error) {
10+
func NewAWS(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (Destroyer, error) {
1311
return &atd.ClusterUninstaller{
1412
Filters: metadata.ClusterPlatformMetadata.AWS.Identifier,
1513
Region: metadata.ClusterPlatformMetadata.AWS.Region,
1614
ClusterName: metadata.ClusterName,
17-
Logger: log.NewEntry(&log.Logger{
18-
Out: os.Stdout,
19-
Formatter: &log.TextFormatter{
20-
FullTimestamp: true,
21-
},
22-
Hooks: make(log.LevelHooks),
23-
Level: level,
24-
}),
15+
Logger: logger,
2516
}, nil
2617
}
2718

pkg/destroy/destroyer.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"io/ioutil"
77
"path/filepath"
88

9-
log "github.com/sirupsen/logrus"
9+
"github.com/sirupsen/logrus"
1010

1111
"github.com/openshift/installer/pkg/asset/metadata"
1212
"github.com/openshift/installer/pkg/types"
@@ -19,13 +19,13 @@ type Destroyer interface {
1919
}
2020

2121
// NewFunc is an interface for creating platform-specific destroyers.
22-
type NewFunc func(level log.Level, metadata *types.ClusterMetadata) (Destroyer, error)
22+
type NewFunc func(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (Destroyer, error)
2323

2424
// Registry maps ClusterMetadata.Platform() to per-platform Destroyer creators.
2525
var Registry = make(map[string]NewFunc)
2626

2727
// New returns a Destroyer based on `metadata.json` in `rootDir`.
28-
func New(level log.Level, rootDir string) (Destroyer, error) {
28+
func New(logger logrus.FieldLogger, rootDir string) (Destroyer, error) {
2929
path := filepath.Join(rootDir, metadata.MetadataFilename)
3030
raw, err := ioutil.ReadFile(filepath.Join(rootDir, metadata.MetadataFilename))
3131
if err != nil {
@@ -46,5 +46,5 @@ func New(level log.Level, rootDir string) (Destroyer, error) {
4646
if !ok {
4747
return nil, fmt.Errorf("no destroyers registered for %q", platform)
4848
}
49-
return creator(level, cmetadata)
49+
return creator(logger, cmetadata)
5050
}

pkg/destroy/libvirt/libvirt_prefix_deprovision.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
libvirt "github.com/libvirt/libvirt-go"
1111
"github.com/openshift/installer/pkg/destroy"
1212
"github.com/openshift/installer/pkg/types"
13-
log "github.com/sirupsen/logrus"
13+
"github.com/sirupsen/logrus"
1414
"k8s.io/apimachinery/pkg/util/wait"
1515
)
1616

@@ -44,13 +44,13 @@ var AlwaysTrueFilter = func() filterFunc {
4444
// deleteFunc type is the interface a function needs to implement to be called as a goroutine.
4545
// The (bool, error) return type mimics wait.ExponentialBackoff where the bool indicates successful
4646
// completion, and the error is for unrecoverable errors.
47-
type deleteFunc func(conn *libvirt.Connect, filter filterFunc, logger log.FieldLogger) (bool, error)
47+
type deleteFunc func(conn *libvirt.Connect, filter filterFunc, logger logrus.FieldLogger) (bool, error)
4848

4949
// ClusterUninstaller holds the various options for the cluster we want to delete.
5050
type ClusterUninstaller struct {
5151
LibvirtURI string
5252
Filter filterFunc
53-
Logger log.FieldLogger
53+
Logger logrus.FieldLogger
5454
}
5555

5656
// Run is the entrypoint to start the uninstall process
@@ -80,7 +80,7 @@ func (o *ClusterUninstaller) Run() error {
8080
return nil
8181
}
8282

83-
func deleteRunner(deleteFuncName string, dFunction deleteFunc, conn *libvirt.Connect, filter filterFunc, logger log.FieldLogger, channel chan string) {
83+
func deleteRunner(deleteFuncName string, dFunction deleteFunc, conn *libvirt.Connect, filter filterFunc, logger logrus.FieldLogger, channel chan string) {
8484
backoffSettings := wait.Backoff{
8585
Duration: time.Second * 10,
8686
Factor: 1.3,
@@ -108,7 +108,7 @@ func populateDeleteFuncs(funcs map[string]deleteFunc) {
108108
funcs["deleteNetwork"] = deleteNetwork
109109
}
110110

111-
func deleteDomains(conn *libvirt.Connect, filter filterFunc, logger log.FieldLogger) (bool, error) {
111+
func deleteDomains(conn *libvirt.Connect, filter filterFunc, logger logrus.FieldLogger) (bool, error) {
112112
logger.Debug("Deleting libvirt domains")
113113
defer logger.Debugf("Exiting deleting libvirt domains")
114114

@@ -143,7 +143,7 @@ func deleteDomains(conn *libvirt.Connect, filter filterFunc, logger log.FieldLog
143143
return true, nil
144144
}
145145

146-
func deleteVolumes(conn *libvirt.Connect, filter filterFunc, logger log.FieldLogger) (bool, error) {
146+
func deleteVolumes(conn *libvirt.Connect, filter filterFunc, logger logrus.FieldLogger) (bool, error) {
147147
logger.Debug("Deleting libvirt volumes")
148148
defer logger.Debugf("Exiting deleting libvirt volumes")
149149

@@ -209,7 +209,7 @@ func deleteVolumes(conn *libvirt.Connect, filter filterFunc, logger log.FieldLog
209209
return true, nil
210210
}
211211

212-
func deleteNetwork(conn *libvirt.Connect, filter filterFunc, logger log.FieldLogger) (bool, error) {
212+
func deleteNetwork(conn *libvirt.Connect, filter filterFunc, logger logrus.FieldLogger) (bool, error) {
213213
logger.Debug("Deleting libvirt network")
214214
defer logger.Debugf("Exiting deleting libvirt network")
215215

@@ -245,17 +245,10 @@ func deleteNetwork(conn *libvirt.Connect, filter filterFunc, logger log.FieldLog
245245
}
246246

247247
// New returns libvirt Uninstaller from ClusterMetadata.
248-
func New(level log.Level, metadata *types.ClusterMetadata) (destroy.Destroyer, error) {
248+
func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (destroy.Destroyer, error) {
249249
return &ClusterUninstaller{
250250
LibvirtURI: metadata.ClusterPlatformMetadata.Libvirt.URI,
251251
Filter: AlwaysTrueFilter(), //TODO: change to ClusterNamePrefixFilter when all resources are prefixed.
252-
Logger: log.NewEntry(&log.Logger{
253-
Out: os.Stdout,
254-
Formatter: &log.TextFormatter{
255-
FullTimestamp: true,
256-
},
257-
Hooks: make(log.LevelHooks),
258-
Level: level,
259-
}),
252+
Logger: logger,
260253
}, nil
261254
}

pkg/terraform/executor.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"os/exec"
88
"path/filepath"
99
"runtime"
10+
11+
"github.com/sirupsen/logrus"
1012
)
1113

1214
// executor enables calling Terraform from Go, across platforms, with any
@@ -58,10 +60,14 @@ func (ex *executor) execute(clusterDir string, args ...string) error {
5860
}
5961

6062
cmd := exec.Command(ex.binaryPath, args...)
61-
cmd.Stdin = os.Stdin
62-
cmd.Stdout = os.Stdout
63-
cmd.Stderr = os.Stderr
6463
cmd.Dir = clusterDir
64+
if logrus.GetLevel() == logrus.DebugLevel {
65+
cmd.Stdin = os.Stdin
66+
cmd.Stdout = os.Stdout
67+
cmd.Stderr = os.Stderr
68+
}
69+
70+
logrus.Debugf("Running %#v...", cmd)
6571

6672
// Start Terraform.
6773
return cmd.Run()

pkg/terraform/terraform.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ func terraformExec(clusterDir string, args ...string) error {
1919
return nil
2020
}
2121

22-
// Apply runs "terraform apply" in the given directory.
23-
// It returns the absolute path of the tfstate file.
22+
// Apply runs "terraform apply" in the given directory. It returns the absolute
23+
// path of the tfstate file, rooted in the specified directory, along with any
24+
// errors from Terraform.
2425
func Apply(dir string, extraArgs ...string) (string, error) {
2526
stateFileName := "terraform.tfstate"
2627
defaultArgs := []string{

pkg/types/config/libvirt/cache.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/gregjones/httpcache"
1313
"github.com/gregjones/httpcache/diskcache"
14+
"github.com/sirupsen/logrus"
1415
)
1516

1617
// UseCachedImage leaves non-file:// image URIs unalterered.
@@ -28,6 +29,8 @@ func (libvirt *Libvirt) UseCachedImage() (err error) {
2829
return nil
2930
}
3031

32+
logrus.Infof("Fetching OS image...")
33+
3134
// FIXME: Use os.UserCacheDir() once we bump to Go 1.11
3235
// baseCacheDir, err := os.UserCacheDir()
3336
// if err != nil {

pkg/types/config/validate.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/openshift/installer/pkg/types/config/aws"
1414

1515
"github.com/coreos/tectonic-config/config/tectonic-network"
16-
log "github.com/sirupsen/logrus"
16+
"github.com/sirupsen/logrus"
1717
)
1818

1919
const (
@@ -216,15 +216,11 @@ func (c *Cluster) validateNetworkType() error {
216216
// a single error for convenience.
217217
func (c *Cluster) ValidateAndLog() error {
218218
if errs := c.Validate(); len(errs) != 0 {
219-
s := ""
220-
if len(errs) != 1 {
221-
s = "s"
222-
}
223-
log.Errorf("Found %d error%s in the cluster definition:", len(errs), s)
219+
logrus.Errorf("Found %d error(s) in the cluster definition:", len(errs))
224220
for i, err := range errs {
225-
log.Errorf("error %d: %v", i+1, err)
221+
logrus.Errorf(" Error %d: %v", i+1, err)
226222
}
227-
return fmt.Errorf("found %d cluster definition error%s", len(errs), s)
223+
return fmt.Errorf("found %d cluster definition error(s)", len(errs))
228224
}
229225
return nil
230226
}

0 commit comments

Comments
 (0)