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

feat: add golangci-lint and validate script #21

Merged
merged 2 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
linters:
disable-all: true
enable:
- goimports
- gofmt
- misspell
- revive
- gosec
- prealloc
run:
skip-files:
- /zz_generated_
- _generated
skip-dirs:
- generated
deadline: 5m
tests: true
build-tags:
- test
linters-settings:
goimports:
local-prefixes: github.com/harvester/vm-import-controller
gosec:
# https: //github.com/securego/gosec#available-rules
excludes:
- G101 # Look for hard coded credentials
- G402 # TLS InsecureSkipVerify set true
2 changes: 2 additions & 0 deletions Dockerfile.dapper
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ RUN export K8S_VERSION=1.24.2 && \
mkdir /usr/local/kubebuilder && \
tar -C /usr/local/kubebuilder --strip-components=1 -zvxf envtest-bins.tar.gz

RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.55.2

ENV DAPPER_ENV REPO TAG DRONE_TAG CROSS
ENV DAPPER_SOURCE /go/src/github.com/harvester/vm-import-controller
ENV DAPPER_OUTPUT ./bin
Expand Down
20 changes: 14 additions & 6 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,29 @@ import (
"log"

harvesterv1beta1 "github.com/harvester/harvester/pkg/apis/harvesterhci.io/v1beta1"
source "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
"github.com/harvester/vm-import-controller/pkg/controllers"
"github.com/harvester/vm-import-controller/pkg/server"
"github.com/rancher/wrangler/pkg/signals"
"golang.org/x/sync/errgroup"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/clientcmd"
kubevirtv1 "kubevirt.io/api/core/v1"

source "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
"github.com/harvester/vm-import-controller/pkg/controllers"
"github.com/harvester/vm-import-controller/pkg/server"
)

func init() {
var err error
scheme := runtime.NewScheme()
source.AddToScheme(scheme)
harvesterv1beta1.AddToScheme(scheme)
kubevirtv1.AddToScheme(scheme)
if err = source.AddToScheme(scheme); err != nil {
log.Fatalf("failed to add source scheme, %v", err)
}
if err = harvesterv1beta1.AddToScheme(scheme); err != nil {
log.Fatalf("failed to add harvesterv1beta1 scheme, %v", err)
}
if err = kubevirtv1.AddToScheme(scheme); err != nil {
log.Fatalf("failed to add kubevirtv1 scheme, %v", err)
}

}
func main() {
Expand Down
4 changes: 2 additions & 2 deletions pkg/apis/migration.harvesterhci.io/v1beta1/openstack.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package v1beta1

import (
"github.com/harvester/vm-import-controller/pkg/apis/common"
corev1 "k8s.io/api/core/v1"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/harvester/vm-import-controller/pkg/apis/common"
)

// +genclient
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package v1beta1

import (
"github.com/harvester/vm-import-controller/pkg/apis/common"
"github.com/rancher/wrangler/pkg/condition"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/harvester/vm-import-controller/pkg/apis/common"
)

// +genclient
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/migration.harvesterhci.io/v1beta1/vmware.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package v1beta1

import (
"github.com/harvester/vm-import-controller/pkg/apis/common"
"github.com/rancher/wrangler/pkg/condition"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/harvester/vm-import-controller/pkg/apis/common"
)

type ClusterStatus string
Expand Down
9 changes: 5 additions & 4 deletions pkg/controllers/controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@ import (

harvester "github.com/harvester/harvester/pkg/generated/controllers/harvesterhci.io"
"github.com/harvester/harvester/pkg/generated/controllers/kubevirt.io"
sc "github.com/harvester/vm-import-controller/pkg/controllers/migration"
"github.com/harvester/vm-import-controller/pkg/crd"
"github.com/harvester/vm-import-controller/pkg/generated/controllers/migration.harvesterhci.io"
"github.com/rancher/lasso/pkg/cache"
"github.com/rancher/lasso/pkg/client"
"github.com/rancher/lasso/pkg/controller"
"github.com/rancher/wrangler/pkg/generated/controllers/core"
"github.com/rancher/wrangler/pkg/start"
"k8s.io/client-go/rest"
"k8s.io/client-go/util/workqueue"

sc "github.com/harvester/vm-import-controller/pkg/controllers/migration"
"github.com/harvester/vm-import-controller/pkg/crd"
"github.com/harvester/vm-import-controller/pkg/generated/controllers/migration.harvesterhci.io"
)

func Start(ctx context.Context, restConfig *rest.Config) error {
Expand Down Expand Up @@ -77,7 +78,7 @@ func Register(ctx context.Context, restConfig *rest.Config) error {
if err != nil {
return err
}

sc.RegisterVmareController(ctx, migrationFactory.Migration().V1beta1().VmwareSource(), coreFactory.Core().V1().Secret())
sc.RegisterOpenstackController(ctx, migrationFactory.Migration().V1beta1().OpenstackSource(), coreFactory.Core().V1().Secret())

Expand Down
9 changes: 5 additions & 4 deletions pkg/controllers/migration/openstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ import (
"fmt"
"time"

corecontrollers "github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
"github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/harvester/vm-import-controller/pkg/apis/common"
migration "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
migrationController "github.com/harvester/vm-import-controller/pkg/generated/controllers/migration.harvesterhci.io/v1beta1"
"github.com/harvester/vm-import-controller/pkg/source/openstack"
"github.com/harvester/vm-import-controller/pkg/util"
corecontrollers "github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
"github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type openstackHandler struct {
Expand Down
17 changes: 8 additions & 9 deletions pkg/controllers/migration/virtualmachine.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import (
"strings"
"time"

harvesterv1beta1 "github.com/harvester/harvester/pkg/apis/harvesterhci.io/v1beta1"
harvester "github.com/harvester/harvester/pkg/generated/controllers/harvesterhci.io/v1beta1"
kubevirtv1 "github.com/harvester/harvester/pkg/generated/controllers/kubevirt.io/v1"
"github.com/harvester/harvester/pkg/ref"
coreControllers "github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
"github.com/rancher/wrangler/pkg/relatedresource"
"github.com/sirupsen/logrus"
Expand All @@ -21,10 +25,6 @@ import (
"k8s.io/apimachinery/pkg/util/validation"
kubevirt "kubevirt.io/api/core/v1"

harvesterv1beta1 "github.com/harvester/harvester/pkg/apis/harvesterhci.io/v1beta1"
harvester "github.com/harvester/harvester/pkg/generated/controllers/harvesterhci.io/v1beta1"
kubevirtv1 "github.com/harvester/harvester/pkg/generated/controllers/kubevirt.io/v1"
"github.com/harvester/harvester/pkg/ref"
"github.com/harvester/vm-import-controller/pkg/apis/common"
migration "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
migrationController "github.com/harvester/vm-import-controller/pkg/generated/controllers/migration.harvesterhci.io/v1beta1"
Expand Down Expand Up @@ -82,7 +82,7 @@ func RegisterVMImportController(ctx context.Context, vmware migrationController.
importVM.OnChange(ctx, "virtualmachine-import-job-change", vmHandler.OnVirtualMachineChange)
}

func (h *virtualMachineHandler) OnVirtualMachineChange(key string, vmObj *migration.VirtualMachineImport) (*migration.VirtualMachineImport, error) {
func (h *virtualMachineHandler) OnVirtualMachineChange(_ string, vmObj *migration.VirtualMachineImport) (*migration.VirtualMachineImport, error) {

if vmObj == nil || vmObj.DeletionTimestamp != nil {
return nil, nil
Expand Down Expand Up @@ -367,8 +367,8 @@ func (h *virtualMachineHandler) createVirtualMachine(vm *migration.VirtualMachin
}

// patch VM object with PVC info
var vmVols []kubevirt.Volume
var disks []kubevirt.Disk
vmVols := make([]kubevirt.Volume, 0, len(vm.Status.DiskImportStatus))
disks := make([]kubevirt.Disk, 0, len(vm.Status.DiskImportStatus))
for i, v := range vm.Status.DiskImportStatus {
pvcName := strings.ToLower(strings.Split(v.Name, ".img")[0])
vmVols = append(vmVols, kubevirt.Volume{
Expand Down Expand Up @@ -558,8 +558,7 @@ func generateAnnotations(vm *migration.VirtualMachineImport, vmi *harvesterv1bet
_ = annotationSchemaOwners.Add(kubevirt.VirtualMachineGroupVersionKind.GroupKind(), vm)
var schemaID = ref.GroupKindToSchemaID(kubevirt.VirtualMachineGroupVersionKind.GroupKind())
var ownerRef = ref.Construct(vm.GetNamespace(), vm.Spec.VirtualMachineName)
var schemaRef = annotationSchemaOwners[schemaID]
schemaRef = ref.AnnotationSchemaReference{SchemaID: schemaID, References: ref.NewAnnotationSchemaOwnerReferences()}
schemaRef := ref.AnnotationSchemaReference{SchemaID: schemaID, References: ref.NewAnnotationSchemaOwnerReferences()}
schemaRef.References.Insert(ownerRef)
annotationSchemaOwners[schemaID] = schemaRef
var ownersBytes, err = json.Marshal(annotationSchemaOwners)
Expand Down
8 changes: 4 additions & 4 deletions pkg/controllers/migration/vmware.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ import (
"fmt"
"time"

"github.com/harvester/vm-import-controller/pkg/apis/common"
corecontrollers "github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
"github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/harvester/vm-import-controller/pkg/apis/common"
migration "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
migrationController "github.com/harvester/vm-import-controller/pkg/generated/controllers/migration.harvesterhci.io/v1beta1"
"github.com/harvester/vm-import-controller/pkg/source/vmware"
"github.com/harvester/vm-import-controller/pkg/util"
corecontrollers "github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type vmwareHandler struct {
Expand Down
3 changes: 2 additions & 1 deletion pkg/crd/crd.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package crd
import (
"context"

migration "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
"github.com/rancher/wrangler/pkg/crd"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/rest"

migration "github.com/harvester/vm-import-controller/pkg/apis/migration.harvesterhci.io/v1beta1"
)

func List() []crd.CRD {
Expand Down
3 changes: 1 addition & 2 deletions pkg/qemu/gemu_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package qemu

import (
"io/ioutil"
"os"
"path/filepath"
"testing"
Expand All @@ -11,7 +10,7 @@ import (

func Test_ConvertVMDKToRaw(t *testing.T) {
assert := require.New(t)
tmpDir, err := ioutil.TempDir("/tmp", "disk-test")
tmpDir, err := os.MkdirTemp("/tmp", "disk-test")
assert.NoError(err, "expected no error during creation of tmpDir")
defer os.RemoveAll(tmpDir)
tmpVMDK := filepath.Join(tmpDir, "vmdktest.vmdk")
Expand Down
19 changes: 12 additions & 7 deletions pkg/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"net/http"
"os"
"time"

"golang.org/x/sync/errgroup"
)
Expand All @@ -14,8 +15,7 @@ const defaultPort = 8080
const tmpDir = "/tmp/vm-import-controller"

func NewServer(ctx context.Context) error {
var err error
err = createTmpDir()
err := createTmpDir()
if err != nil {
return err
}
Expand All @@ -25,8 +25,11 @@ func NewServer(ctx context.Context) error {
func newServer(ctx context.Context, path string) error {
defer os.RemoveAll(tmpDir)
srv := http.Server{
Addr: fmt.Sprintf(":%d", defaultPort),
Handler: http.FileServer(http.Dir(path)),
Addr: fmt.Sprintf(":%d", defaultPort),
// fix G114: Use of net/http serve function that has no support for setting timeouts (gosec)
// refer to https://app.deepsource.com/directory/analyzers/go/issues/GO-S2114
ReadHeaderTimeout: 10 * time.Second,
Handler: http.FileServer(http.Dir(path)),
}

eg, _ := errgroup.WithContext(ctx)
Expand All @@ -43,9 +46,11 @@ func newServer(ctx context.Context, path string) error {
}

func createTmpDir() error {
if _, err := os.Stat(tmpDir); os.IsNotExist(err) {
return os.Mkdir("/tmp/vm-import-controller", 0755)
} else {
_, err := os.Stat(tmpDir)
if err != nil {
if os.IsNotExist(err) {
return os.Mkdir("/tmp/vm-import-controller", 0755)
}
return err
}
return nil
Expand Down
9 changes: 4 additions & 5 deletions pkg/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package server
import (
"context"
"fmt"
"io/ioutil"
"net/http"
"os"
"path/filepath"
Expand All @@ -21,17 +20,17 @@ func Test_NewServer(t *testing.T) {
assert.NoError(err, "expected no error during creation of tmp dir")
go func() {
err = newServer(ctx, tmpDir)
assert.Contains(err.Error(), "http: Server closed", "error occured during shutdown") //only expected error is context canceled
assert.Contains(err.Error(), "http: Server closed", "error occurred during shutdown") //only expected error is context canceled
}()
time.Sleep(1 * time.Second)
f, err := ioutil.TempFile(TempDir(), "sample")
f, err := os.MkdirTemp(TempDir(), "sample")
assert.NoError(err, "expect no error during creation of tmp file")
_, relative := filepath.Split(f.Name())
_, relative := filepath.Split(f)
resp, err := http.Get(fmt.Sprintf("http://localhost:%d/%s", defaultPort, relative))
assert.NoError(err, "expect no error during http call")
assert.Equal(resp.StatusCode, 200, "expected http response code to be 200")
cancel()
time.Sleep(5 * time.Second)
_, err = os.Stat(f.Name())
_, err = os.Stat(f)
assert.True(os.IsNotExist(err), "expected no file to be found")
}
Loading