Skip to content

Commit 4bf0c69

Browse files
authored
Merge pull request #707 from estroz/logging
SDK log injection and uniform logging in operator-sdk binary
2 parents e71b0f1 + 6df2857 commit 4bf0c69

File tree

42 files changed

+496
-289
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+496
-289
lines changed

Gopkg.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

commands/operator-sdk/cmd/add/api.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@
1515
package add
1616

1717
import (
18-
"log"
19-
2018
"github.com/operator-framework/operator-sdk/commands/operator-sdk/cmd/generate"
2119
"github.com/operator-framework/operator-sdk/internal/util/projutil"
2220
"github.com/operator-framework/operator-sdk/pkg/scaffold"
2321
"github.com/operator-framework/operator-sdk/pkg/scaffold/input"
2422

23+
log "github.com/sirupsen/logrus"
2524
"github.com/spf13/cobra"
2625
)
2726

@@ -68,6 +67,9 @@ func apiRun(cmd *cobra.Command, args []string) {
6867

6968
// Create and validate new resource
7069
projutil.MustInProjectRoot()
70+
71+
log.Infof("Generating api version %s for kind %s.", apiVersion, kind)
72+
7173
r, err := scaffold.NewResource(apiVersion, kind)
7274
if err != nil {
7375
log.Fatal(err)
@@ -95,9 +97,11 @@ func apiRun(cmd *cobra.Command, args []string) {
9597

9698
// update deploy/role.yaml for the given resource r.
9799
if err := scaffold.UpdateRoleForResource(r, absProjectPath); err != nil {
98-
log.Fatalf("failed to update the RBAC manifest for the resource (%v, %v): %v", r.APIVersion, r.Kind, err)
100+
log.Fatalf("failed to update the RBAC manifest for the resource (%v, %v): (%v)", r.APIVersion, r.Kind, err)
99101
}
100102

101103
// Run k8s codegen for deepcopy
102104
generate.K8sCodegen()
105+
106+
log.Info("Api generation complete.")
103107
}

commands/operator-sdk/cmd/add/controller.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@
1515
package add
1616

1717
import (
18-
"log"
19-
2018
"github.com/operator-framework/operator-sdk/internal/util/projutil"
2119
"github.com/operator-framework/operator-sdk/pkg/scaffold"
2220
"github.com/operator-framework/operator-sdk/pkg/scaffold/input"
2321

22+
log "github.com/sirupsen/logrus"
2423
"github.com/spf13/cobra"
2524
)
2625

@@ -61,6 +60,9 @@ func controllerRun(cmd *cobra.Command, args []string) {
6160
projutil.MustGoProjectCmd(cmd)
6261

6362
projutil.MustInProjectRoot()
63+
64+
log.Infof("Generating controller version %s for kind %s.", apiVersion, kind)
65+
6466
// Create and validate new resource
6567
r, err := scaffold.NewResource(apiVersion, kind)
6668
if err != nil {
@@ -80,4 +82,6 @@ func controllerRun(cmd *cobra.Command, args []string) {
8082
if err != nil {
8183
log.Fatalf("add scaffold failed: (%v)", err)
8284
}
85+
86+
log.Info("Controller generation complete.")
8387
}

commands/operator-sdk/cmd/add/crd.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
package add
1616

1717
import (
18-
"fmt"
19-
"log"
2018
"os"
2119
"path/filepath"
2220
"strings"
@@ -25,6 +23,7 @@ import (
2523
"github.com/operator-framework/operator-sdk/pkg/scaffold"
2624
"github.com/operator-framework/operator-sdk/pkg/scaffold/input"
2725

26+
log "github.com/sirupsen/logrus"
2827
"github.com/spf13/cobra"
2928
)
3029

@@ -60,27 +59,29 @@ func crdFunc(cmd *cobra.Command, args []string) {
6059
verifyCrdFlags()
6160
verifyCrdDeployPath()
6261

63-
fmt.Fprintln(os.Stdout, "Generating custom resource definition (CRD) file")
62+
log.Infof("Generating Custom Resource Definition (CRD) version %s for kind %s.", apiVersion, kind)
6463

6564
// generate CR/CRD file
6665
resource, err := scaffold.NewResource(apiVersion, kind)
6766
if err != nil {
68-
log.Fatalf("%v", err)
67+
log.Fatal(err)
6968
}
69+
7070
s := scaffold.Scaffold{}
7171
err = s.Execute(cfg,
7272
&scaffold.Crd{Resource: resource},
7373
&scaffold.Cr{Resource: resource},
7474
)
75-
7675
if err != nil {
7776
log.Fatalf("add scaffold failed: (%v)", err)
7877
}
7978

8079
// update deploy/role.yaml for the given resource r.
8180
if err := scaffold.UpdateRoleForResource(resource, cfg.AbsProjectPath); err != nil {
82-
log.Fatalf("failed to update the RBAC manifest for the resource (%v, %v): %v", resource.APIVersion, resource.Kind, err)
81+
log.Fatalf("failed to update the RBAC manifest for the resource (%v, %v): (%v)", resource.APIVersion, resource.Kind, err)
8382
}
83+
84+
log.Info("CRD generation complete.")
8485
}
8586

8687
func verifyCrdFlags() {
@@ -103,7 +104,7 @@ func verifyCrdFlags() {
103104
func verifyCrdDeployPath() {
104105
wd, err := os.Getwd()
105106
if err != nil {
106-
log.Fatalf("failed to determine the full path of the current directory: %v", err)
107+
log.Fatalf("failed to determine the full path of the current directory: (%v)", err)
107108
}
108109
// check if the deploy sub-directory exist
109110
_, err = os.Stat(filepath.Join(wd, scaffold.DeployDir))

commands/operator-sdk/cmd/build.go

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"errors"
2020
"fmt"
2121
"io/ioutil"
22-
"log"
2322
"os"
2423
"os/exec"
2524
"path/filepath"
@@ -30,6 +29,7 @@ import (
3029
"github.com/operator-framework/operator-sdk/pkg/test"
3130

3231
"github.com/ghodss/yaml"
32+
log "github.com/sirupsen/logrus"
3333
"github.com/spf13/cobra"
3434
)
3535

@@ -78,11 +78,11 @@ func verifyDeploymentImage(yamlFile []byte, imageName string) error {
7878
yamlMap := make(map[string]interface{})
7979
err := yaml.Unmarshal(yamlSpec, &yamlMap)
8080
if err != nil {
81-
log.Fatal("Could not unmarshal yaml namespaced spec")
81+
log.Fatalf("could not unmarshal yaml namespaced spec: (%v)", err)
8282
}
8383
kind, ok := yamlMap["kind"].(string)
8484
if !ok {
85-
log.Fatal("Yaml manifest file contains a 'kind' field that is not a string")
85+
log.Fatal("yaml manifest file contains a 'kind' field that is not a string")
8686
}
8787
if kind == "Deployment" {
8888
// this is ugly and hacky; we should probably make this cleaner
@@ -122,13 +122,13 @@ func verifyDeploymentImage(yamlFile []byte, imageName string) error {
122122
func verifyTestManifest(image string) {
123123
namespacedBytes, err := ioutil.ReadFile(namespacedManBuild)
124124
if err != nil {
125-
log.Fatalf("could not read namespaced manifest: %v", err)
125+
log.Fatalf("could not read namespaced manifest: (%v)", err)
126126
}
127127

128128
err = verifyDeploymentImage(namespacedBytes, image)
129129
// the error from verifyDeploymentImage is just a warning, not fatal error
130130
if err != nil {
131-
fmt.Printf("%v\n", err)
131+
log.Warn(err)
132132
}
133133
}
134134

@@ -141,7 +141,7 @@ func buildFunc(cmd *cobra.Command, args []string) {
141141
goBuildEnv := append(os.Environ(), "GOOS=linux", "GOARCH=amd64", "CGO_ENABLED=0")
142142
wd, err := os.Getwd()
143143
if err != nil {
144-
log.Fatalf("could not identify current working directory: %v", err)
144+
log.Fatalf("could not identify current working directory: (%v)", err)
145145
}
146146

147147
// Don't need to build go code if Ansible Operator
@@ -154,7 +154,7 @@ func buildFunc(cmd *cobra.Command, args []string) {
154154
buildCmd.Stderr = os.Stderr
155155
err = buildCmd.Run()
156156
if err != nil {
157-
log.Fatalf("failed to build operator binary: %v", err)
157+
log.Fatalf("failed to build operator binary: (%v)", err)
158158
}
159159
}
160160

@@ -163,15 +163,18 @@ func buildFunc(cmd *cobra.Command, args []string) {
163163
if enableTests {
164164
baseImageName += "-intermediate"
165165
}
166+
167+
log.Infof("Building Docker image %s", baseImageName)
168+
166169
dbcmd := exec.Command("docker", "build", ".", "-f", "build/Dockerfile", "-t", baseImageName)
167170
dbcmd.Stdout = os.Stdout
168171
dbcmd.Stderr = os.Stderr
169172
err = dbcmd.Run()
170173
if err != nil {
171174
if enableTests {
172-
log.Fatalf("failed to build intermediate image for %s image: %v", image, err)
175+
log.Fatalf("failed to output intermediate image %s: (%v)", image, err)
173176
} else {
174-
log.Fatalf("failed to output build image %s: %v", image, err)
177+
log.Fatalf("failed to output build image %s: (%v)", image, err)
175178
}
176179
}
177180

@@ -183,13 +186,15 @@ func buildFunc(cmd *cobra.Command, args []string) {
183186
buildTestCmd.Stderr = os.Stderr
184187
err = buildTestCmd.Run()
185188
if err != nil {
186-
log.Fatalf("failed to build test binary: %v", err)
189+
log.Fatalf("failed to build test binary: (%v)", err)
187190
}
188191
// if a user is using an older sdk repo as their library, make sure they have required build files
189192
testDockerfile := filepath.Join(scaffold.BuildTestDir, scaffold.DockerfileFile)
190193
_, err = os.Stat(testDockerfile)
191194
if err != nil && os.IsNotExist(err) {
192195

196+
log.Info("Generating build manifests for test-framework.")
197+
193198
absProjectPath := projutil.MustGetwd()
194199
cfg := &input.Config{
195200
Repo: projutil.CheckAndGetProjectGoPkg(),
@@ -204,20 +209,24 @@ func buildFunc(cmd *cobra.Command, args []string) {
204209
&scaffold.TestPod{Image: image, TestNamespaceEnv: test.TestNamespaceEnv},
205210
)
206211
if err != nil {
207-
log.Fatalf("build scaffold failed: (%v)", err)
212+
log.Fatalf("test-framework manifest scaffold failed: (%v)", err)
208213
}
209214
}
210215

216+
log.Infof("Building test Docker image %s", image)
217+
211218
testDbcmd := exec.Command("docker", "build", ".", "-f", testDockerfile, "-t", image, "--build-arg", "NAMESPACEDMAN="+namespacedManBuild, "--build-arg", "BASEIMAGE="+baseImageName)
212219
testDbcmd.Stdout = os.Stdout
213220
testDbcmd.Stderr = os.Stderr
214221
err = testDbcmd.Run()
215222
if err != nil {
216-
log.Fatalf("failed to output build image %s: %v", image, err)
223+
log.Fatalf("failed to output test image %s: (%v)", image, err)
217224
}
218225
// Check image name of deployments in namespaced manifest
219226
verifyTestManifest(image)
220227
}
228+
229+
log.Info("Operator build complete.")
221230
}
222231

223232
func mainExists() bool {

commands/operator-sdk/cmd/generate/k8s.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ package generate
1717
import (
1818
"fmt"
1919
"io/ioutil"
20-
"log"
2120
"os"
2221
"os/exec"
2322
"path/filepath"
2423

2524
"github.com/operator-framework/operator-sdk/internal/util/projutil"
2625
"github.com/operator-framework/operator-sdk/pkg/scaffold"
2726

27+
log "github.com/sirupsen/logrus"
2828
"github.com/spf13/cobra"
2929
)
3030

@@ -41,7 +41,7 @@ to comply with kube-API requirements.
4141

4242
func k8sFunc(cmd *cobra.Command, args []string) {
4343
if len(args) != 0 {
44-
log.Fatalf("k8s command doesn't accept any arguments.")
44+
log.Fatal("k8s command doesn't accept any arguments")
4545
}
4646

4747
// Only Go projects can generate k8s deepcopy code.
@@ -62,22 +62,26 @@ func K8sCodegen() {
6262
log.Fatalf("failed to parse group versions: (%v)", err)
6363
}
6464

65-
fmt.Fprintf(os.Stdout, "Running code-generation for custom resource group versions: [%s]\n", groupVersions)
65+
log.Infof("Running code-generation for Custom Resource group versions: [%s]\n", groupVersions)
66+
6667
// TODO: Replace generate-groups.sh by building the vendored generators(deepcopy, lister etc)
6768
// and running them directly
68-
// TODO: remove dependency on boilerplate.go.txt
6969
genGroupsCmd := "vendor/k8s.io/code-generator/generate-groups.sh"
7070
args := []string{
7171
"deepcopy",
7272
outputPkg,
7373
apisPkg,
7474
groupVersions,
7575
}
76-
out, err := exec.Command(genGroupsCmd, args...).CombinedOutput()
76+
cgCmd := exec.Command(genGroupsCmd, args...)
77+
cgCmd.Stdout = os.Stdout
78+
cgCmd.Stderr = os.Stderr
79+
err = cgCmd.Run()
7780
if err != nil {
7881
log.Fatalf("failed to perform code-generation: (%v)", err)
7982
}
80-
fmt.Fprintln(os.Stdout, string(out))
83+
84+
log.Info("Code-generation complete.")
8185
}
8286

8387
// getGroupVersions parses the layout of pkg/apis to return the API groups and versions
@@ -108,5 +112,9 @@ func parseGroupVersions() (string, error) {
108112
}
109113
}
110114

115+
if groupVersions == "" {
116+
return "", fmt.Errorf("no groups or versions found in %s", scaffold.ApisDir)
117+
}
118+
111119
return groupVersions, nil
112120
}

0 commit comments

Comments
 (0)