Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ LFX: Extend use-case of detecting deprecated Kubernetes API usage #441

Merged
merged 12 commits into from
Jan 12, 2024
32 changes: 19 additions & 13 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
FROM golang:1.19 as builder
WORKDIR /analyzer-lsp

COPY cmd /analyzer-lsp/cmd
COPY engine /analyzer-lsp/engine
COPY output /analyzer-lsp/output
COPY jsonrpc2 /analyzer-lsp/jsonrpc2
COPY lsp /analyzer-lsp/lsp
COPY parser /analyzer-lsp/parser
COPY provider /analyzer-lsp/provider
COPY tracing /analyzer-lsp/tracing
COPY external-providers /analyzer-lsp/external-providers
COPY go.mod /analyzer-lsp/go.mod
COPY go.sum /analyzer-lsp/go.sum
COPY Makefile /analyzer-lsp/Makefile
COPY cmd /analyzer-lsp/cmd
COPY engine /analyzer-lsp/engine
COPY output /analyzer-lsp/output
COPY jsonrpc2 /analyzer-lsp/jsonrpc2
COPY lsp /analyzer-lsp/lsp
COPY parser /analyzer-lsp/parser
COPY provider /analyzer-lsp/provider
COPY tracing /analyzer-lsp/tracing
COPY external-providers /analyzer-lsp/external-providers
COPY go.mod /analyzer-lsp/go.mod
COPY go.sum /analyzer-lsp/go.sum
COPY Makefile /analyzer-lsp/Makefile

RUN make build

# Add yq to the build stage
FROM docker.io/mikefarah/yq as yq-builder
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note to us, we probably need to fork this and build it out of konveyor in the future


# Continue with the rest of the Dockerfile
FROM jaegertracing/all-in-one:latest AS jaeger-builder

# The unofficial base image w/ jdtls and gopls installed
FROM quay.io/konveyor/jdtls-server-base

RUN microdnf install gcc-c++ python-devel python3-devel -y
Expand All @@ -27,9 +30,12 @@ RUN python3 -m pip install python-lsp-server

COPY --from=jaeger-builder /go/bin/all-in-one-linux /usr/bin/

COPY --from=yq-builder /usr/bin/yq /usr/bin/yq
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thinking out loud here, but I think there was talk of doing some dependency management for external providers a while back. It's fine for now, but this method could bloat the Dockerfile when adding more providers.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will for sure, I think we should ask @dymurray to prioritize this work for the next version.


COPY --from=builder /analyzer-lsp/konveyor-analyzer /usr/bin/konveyor-analyzer
COPY --from=builder /analyzer-lsp/konveyor-analyzer-dep /usr/bin/konveyor-analyzer-dep
COPY --from=builder /analyzer-lsp/external-providers/generic-external-provider/generic-external-provider /usr/bin/generic-external-provider
COPY --from=builder /analyzer-lsp/external-providers/yq-external-provider/yq-external-provider /usr/bin/yq-external-provider
COPY --from=builder /analyzer-lsp/external-providers/golang-dependency-provider/golang-dependency-provider /usr/bin/golang-dependency-provider

COPY provider_container_settings.json /analyzer-lsp/provider_settings.json
Expand Down
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
DOCKER_IMAGE = test

build: analyzer deps external-generic golang-dependency-provider
build: analyzer deps external-generic golang-dependency-provider yq-external-provider

analyzer:
go build -o konveyor-analyzer ./cmd/analyzer/main.go
Expand All @@ -11,6 +11,9 @@ external-generic:
golang-dependency-provider:
( cd external-providers/golang-dependency-provider && go mod edit -replace=github.com/konveyor/analyzer-lsp=../../ && go mod tidy && go build -o golang-dependency-provider main.go)

yq-external-provider:
( cd external-providers/yq-external-provider && go mod edit -replace=github.com/konveyor/analyzer-lsp=../../ && go mod tidy && go build -o yq-external-provider main.go)

deps:
go build -o konveyor-analyzer-dep ./cmd/dep/main.go

Expand Down
37 changes: 37 additions & 0 deletions demo-output.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,34 @@
data: module
innerText: "\n jboss-example-service\n "
matchingXML: <service>jboss-example-service</service>
k8s-deprecated-api-001:
description: Check for usage of deprecated Kubernetes API versions
category: potential
incidents:
- uri: file:///analyzer-lsp/examples/yaml/k8s.yaml
message: Deprecated/removed Kubernetes API version 'extensions/v1beta1' is used for 'Deployment'. Consider using 'apps/v1'.
lineNumber: 16
variables:
apiVersion: extensions/v1beta1
deprecated-in: v1.9.0
kind: Deployment
removed-in: v1.16.0
replacement-API: apps/v1
effort: 2
k8s-deprecated-api-002:
description: Check for usage of deprecated Kubernetes API versions
category: potential
incidents:
- uri: file:///analyzer-lsp/examples/yaml/k8s.yaml
message: Deprecated Kubernetes API version 'apps/v1beta1' is used for 'StatefulSet'. Consider using 'apps/v1'.
lineNumber: 38
variables:
apiVersion: extensions/v1beta1
deprecated-in: v1.9.0
kind: ReplicaSet
removed-in: v1.16.0
replacement-API: apps/v1
effort: 2
lang-ref-001:
description: ""
category: potential
Expand All @@ -346,6 +374,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
kind: Module
name: io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition
package: com.example.apps
- uri: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
message: apiextensions/v1beta1/customresourcedefinitions is deprecated, apiextensions/v1/customresourcedefinitions should be used instead
codeSnip: " 4 \n 5 public class App \n 6 {\n 7 \n 8 /**\n 9 * {@link CustomResourceDefinition}\n10 * @param args\n11 */\n12 public static void main( String[] args )\n13 {\n14 CustomResourceDefinition crd = new CustomResourceDefinition();\n15 System.out.println( crd );\n16 \n17 GenericClass<String> element = new GenericClass<String>(\"Hello world!\");\n18 element.get();\n19 }\n20 }\n"
Expand All @@ -354,6 +383,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
kind: Method
name: main
package: com.example.apps
lang-ref-003:
description: ""
category: potential
Expand All @@ -366,6 +396,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
kind: Method
name: main
package: com.example.apps
- uri: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
message: java found apiextensions/v1/customresourcedefinitions found file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java:3
codeSnip: " 1 package com.example.apps;\n 2 \n 3 import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition;\n 4 \n 5 public class App \n 6 {\n 7 \n 8 /**\n 9 * {@link CustomResourceDefinition}\n10 * @param args\n11 */\n12 public static void main( String[] args )\n13 {"
Expand All @@ -374,6 +405,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
kind: Module
name: io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition
package: com.example.apps
lang-ref-004:
description: ""
category: potential
Expand All @@ -387,6 +419,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/App.java
kind: Method
name: main
package: com.example.apps
multiple-actions-001:
description: ""
category: potential
Expand Down Expand Up @@ -445,6 +478,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/Bean.java
kind: Class
name: Singleton
package: com.example.apps
- uri: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/Bean.java
message: condition entries should evaluate out of order
codeSnip: " 1 package com.example.apps;\n 2 \n 3 import javax.ejb.SessionBean;\n 4 import javax.ejb.Singleton;\n 5 \n 6 @Singleton\n 7 public abstract class Bean implements SessionBean {\n 8 }\n"
Expand All @@ -453,6 +487,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/Bean.java
kind: Class
name: Bean
package: com.example.apps
singleton-sessionbean-00002:
description: ""
category: potential
Expand All @@ -465,6 +500,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/Bean.java
kind: Class
name: Singleton
package: com.example.apps
- uri: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/Bean.java
message: condition entries should evaluate in order
codeSnip: " 1 package com.example.apps;\n 2 \n 3 import javax.ejb.SessionBean;\n 4 import javax.ejb.Singleton;\n 5 \n 6 @Singleton\n 7 public abstract class Bean implements SessionBean {\n 8 }\n"
Expand All @@ -473,6 +509,7 @@
file: file:///analyzer-lsp/examples/java/example/src/main/java/com/example/apps/Bean.java
kind: Class
name: Bean
package: com.example.apps
tech-tag-001:
description: ""
category: potential
Expand Down
56 changes: 56 additions & 0 deletions examples/yaml/k8s.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: nginx:latest
ports:
- containerPort: 80

---

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: example-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: nginx:latest
ports:
- containerPort: 80
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ type referenceCondition struct {
}

func (p *genericProvider) Init(ctx context.Context, log logr.Logger, c provider.InitConfig) (provider.ServiceClient, error) {

if c.AnalysisMode != provider.FullAnalysisMode {
return nil, fmt.Errorf("only full analysis is supported")
}
Expand Down
41 changes: 41 additions & 0 deletions external-providers/yq-external-provider/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
module github.com/konveyor/yq-external-provider

go 1.19

require (
github.com/bombsimon/logrusr/v3 v3.1.0
github.com/getkin/kin-openapi v0.118.0
github.com/go-logr/logr v1.2.4
github.com/konveyor/analyzer-lsp v0.3.0-alpha.3.0.20230915135621-94f04595688b
github.com/sirupsen/logrus v1.9.3
go.lsp.dev/uri v0.3.0
gopkg.in/yaml.v2 v2.4.0
)

require (
github.com/PaesslerAG/gval v1.2.2 // indirect
github.com/cbroglie/mustache v1.4.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/swag v0.19.5 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/invopop/yaml v0.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/perimeterx/marshmallow v1.1.4 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
go.opentelemetry.io/otel v1.11.2 // indirect
go.opentelemetry.io/otel/exporters/jaeger v1.11.2 // indirect
go.opentelemetry.io/otel/sdk v1.11.2 // indirect
go.opentelemetry.io/otel/trace v1.11.2 // indirect
golang.org/x/mod v0.8.0
golang.org/x/net v0.8.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
google.golang.org/grpc v1.54.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Loading
Loading