feat: optimize code

This commit is contained in:
wencaiwulue
2023-03-24 20:25:59 +08:00
parent 4d01468e1d
commit aafee9ca5d
9 changed files with 108 additions and 49 deletions

View File

@@ -70,6 +70,35 @@ jobs:
token: ${{ secrets.REPOSITORYDISPATCH }} token: ${{ secrets.REPOSITORYDISPATCH }}
inputs: '{"url": "${{ steps.create_release.outputs.upload_url }}", "tag": "${{ github.ref_name }}"}' inputs: '{"url": "${{ steps.create_release.outputs.upload_url }}", "tag": "${{ github.ref_name }}"}'
- name: Make changes to pull request
run: make version
- name: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@v4
with:
add-paths: |
*.yaml
token: ${{ secrets.REPOSITORYDISPATCH }}
commit-message: "feat: update krew index version to ${{ github.ref }}"
committer: GitHub <noreply@github.com>
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
signoff: false
branch: feat/update-krew-index-version
base: master
delete-branch: true
title: 'feat: update krew index version to ${{ github.ref }}'
body: |
update report
- update with *today's* date
- update krew index version to ${{ github.ref }}
labels: |
report
automated pr
# team-reviewers: |
# owners
# maintainers
draft: false
# - name: Update new version in krew-index # - name: Update new version in krew-index
# uses: rajatjindal/krew-release-bot@v0.0.43 # uses: rajatjindal/krew-release-bot@v0.0.43
# with: # with:

View File

@@ -16,8 +16,8 @@ func CmdReset(factory cmdutil.Factory) *cobra.Command {
var sshConf = &util.SshConfig{} var sshConf = &util.SshConfig{}
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "reset", Use: "reset",
Short: "Reset KubeVPN", Short: "Reset all changes made by KubeVPN",
Long: `Reset KubeVPN if any error occurs`, Long: `Reset all changes made by KubeVPN`,
Example: templates.Examples(i18n.T(` Example: templates.Examples(i18n.T(`
# Reset default namespace # Reset default namespace
kubevpn reset kubevpn reset

View File

@@ -35,10 +35,10 @@ func NewKubeVPNCommand() *cobra.Command {
CmdProxy(factory), CmdProxy(factory),
CmdDev(factory), CmdDev(factory),
CmdDuplicate(factory), CmdDuplicate(factory),
CmdReset(factory),
CmdUpgrade(factory),
CmdVersion(factory),
CmdCp(factory), CmdCp(factory),
CmdUpgrade(factory),
CmdReset(factory),
CmdVersion(factory),
}, },
}, },
{ {

View File

@@ -85,8 +85,15 @@ func GetDNSIPFromDnsPod(clientset *kubernetes.Clientset) (ips []string, err erro
func AddServiceNameToHosts(ctx context.Context, serviceInterface v13.ServiceInterface) { func AddServiceNameToHosts(ctx context.Context, serviceInterface v13.ServiceInterface) {
rateLimiter := flowcontrol.NewTokenBucketRateLimiter(0.2, 1) rateLimiter := flowcontrol.NewTokenBucketRateLimiter(0.2, 1)
defer rateLimiter.Stop() defer rateLimiter.Stop()
var last string var last string
serviceList, err := serviceInterface.List(ctx, v1.ListOptions{})
if err == nil && len(serviceList.Items) != 0 {
entry := generateHostsEntry(serviceList.Items)
if err = updateHosts(entry); err == nil {
last = entry
}
}
for { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
@@ -94,7 +101,7 @@ func AddServiceNameToHosts(ctx context.Context, serviceInterface v13.ServiceInte
default: default:
func() { func() {
w, err := serviceInterface.Watch(ctx, v1.ListOptions{ w, err := serviceInterface.Watch(ctx, v1.ListOptions{
Watch: true, TimeoutSeconds: pointer.Int64(30), Watch: true, TimeoutSeconds: pointer.Int64(30), ResourceVersion: serviceList.ResourceVersion,
}) })
if err != nil { if err != nil {
if utilnet.IsConnectionRefused(err) || apierrors.IsTooManyRequests(err) { if utilnet.IsConnectionRefused(err) || apierrors.IsTooManyRequests(err) {
@@ -109,7 +116,7 @@ func AddServiceNameToHosts(ctx context.Context, serviceInterface v13.ServiceInte
if !ok { if !ok {
return return
} }
if watch.Deleted == c.Type || watch.Error == c.Type { if watch.Error == c.Type || watch.Bookmark == c.Type {
continue continue
} }
if !rateLimiter.TryAccept() { if !rateLimiter.TryAccept() {
@@ -123,8 +130,7 @@ func AddServiceNameToHosts(ctx context.Context, serviceInterface v13.ServiceInte
if entry == last { if entry == last {
continue continue
} }
err = updateHosts(entry) if err = updateHosts(entry); err != nil {
if err != nil {
return return
} }
last = entry last = entry

View File

@@ -3,7 +3,6 @@ package handler
import ( import (
"context" "context"
"fmt" "fmt"
"net"
"os" "os"
"os/signal" "os/signal"
"strconv" "strconv"
@@ -28,26 +27,33 @@ var stopChan = make(chan os.Signal)
var RollbackFuncList = make([]func(), 2) var RollbackFuncList = make([]func(), 2)
var ctx, cancel = context.WithCancel(context.Background()) var ctx, cancel = context.WithCancel(context.Background())
func AddCleanUpResourceHandler(clientset *kubernetes.Clientset, ns string, dhcp *DHCPManager, usedIPs ...*net.IPNet) { func (c *ConnectOptions) addCleanUpResourceHandler() {
signal.Notify(stopChan, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGKILL) signal.Notify(stopChan, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGKILL)
go func() { go func() {
<-stopChan <-stopChan
log.Info("prepare to exit, cleaning up") log.Info("prepare to exit, cleaning up")
if dhcp != nil { err := c.dhcp.ReleaseIpToDHCP(append(c.usedIPs, c.localTunIP)...)
err := dhcp.ReleaseIpToDHCP(usedIPs...) if err != nil {
if err != nil { log.Errorf("failed to release ip to dhcp, err: %v", err)
log.Errorf("failed to release ip to dhcp, err: %v", err)
}
} }
for _, function := range RollbackFuncList { for _, function := range RollbackFuncList {
if function != nil { if function != nil {
function() function()
} }
} }
_ = clientset.CoreV1().Pods(ns).Delete(context.Background(), config.CniNetName, v1.DeleteOptions{GracePeriodSeconds: pointer.Int64(0)}) _ = c.clientset.CoreV1().Pods(c.Namespace).Delete(context.Background(), config.CniNetName, v1.DeleteOptions{GracePeriodSeconds: pointer.Int64(0)})
_, err := updateRefCount(clientset.CoreV1().ConfigMaps(ns), config.ConfigMapPodTrafficManager, -1) count, err := updateRefCount(c.clientset.CoreV1().ConfigMaps(c.Namespace), config.ConfigMapPodTrafficManager, -1)
if err == nil {
// only if ref is zero and deployment is not ready, needs to clean up
if count <= 0 {
deployment, errs := c.clientset.AppsV1().Deployments(c.Namespace).Get(context.Background(), config.ConfigMapPodTrafficManager, v1.GetOptions{})
if errs == nil && deployment.Status.UnavailableReplicas != 0 {
cleanup(c.clientset, c.Namespace, config.ConfigMapPodTrafficManager, true)
}
}
}
if err != nil { if err != nil {
log.Error(err) log.Errorf("can not update ref-count: %v", err)
} }
dns.CancelDNS() dns.CancelDNS()
cancel() cancel()

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"math/rand"
"net" "net"
"net/netip" "net/netip"
"net/url" "net/url"
@@ -15,6 +16,7 @@ import (
"github.com/containernetworking/cni/pkg/types" "github.com/containernetworking/cni/pkg/types"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
"github.com/google/gopacket/routing" "github.com/google/gopacket/routing"
goversion "github.com/hashicorp/go-version"
netroute "github.com/libp2p/go-netroute" netroute "github.com/libp2p/go-netroute"
miekgdns "github.com/miekg/dns" miekgdns "github.com/miekg/dns"
"github.com/pkg/errors" "github.com/pkg/errors"
@@ -131,7 +133,7 @@ func (c *ConnectOptions) DoConnect() (err error) {
if err = c.dhcp.InitDHCP(ctx); err != nil { if err = c.dhcp.InitDHCP(ctx); err != nil {
return return
} }
AddCleanUpResourceHandler(c.clientset, c.Namespace, c.dhcp, c.usedIPs...) c.addCleanUpResourceHandler()
err = c.GetCIDR(ctx) err = c.GetCIDR(ctx)
if err != nil { if err != nil {
return return
@@ -786,6 +788,7 @@ func (c *ConnectOptions) heartbeats() {
err := c.dhcp.ForEach(func(ip net.IP) { err := c.dhcp.ForEach(func(ip net.IP) {
go func() { go func() {
time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000)))
_, _ = util.Ping(ip.String()) _, _ = util.Ping(ip.String())
}() }()
}) })
@@ -938,7 +941,16 @@ func (c *ConnectOptions) UpdateImage(ctx context.Context) error {
if reference.Domain(newImg) != reference.Domain(oldImg) { if reference.Domain(newImg) != reference.Domain(oldImg) {
return nil return nil
} }
if oldTag.Tag() >= newTag.Tag() { var oldVersion, newVersion *goversion.Version
oldVersion, err = goversion.NewVersion(oldTag.Tag())
if err != nil {
return nil
}
newVersion, err = goversion.NewVersion(newTag.Tag())
if err != nil {
return nil
}
if oldVersion.GreaterThanOrEqual(newVersion) {
return nil return nil
} }
@@ -985,10 +997,18 @@ func (c *ConnectOptions) SetImage(ctx context.Context) error {
if reference.Domain(newImg) != reference.Domain(oldImg) { if reference.Domain(newImg) != reference.Domain(oldImg) {
return nil return nil
} }
if oldTag.Tag() >= newTag.Tag() { var oldVersion, newVersion *goversion.Version
oldVersion, err = goversion.NewVersion(oldTag.Tag())
if err != nil {
return nil
}
newVersion, err = goversion.NewVersion(newTag.Tag())
if err != nil {
return nil
}
if oldVersion.GreaterThanOrEqual(newVersion) {
return nil return nil
} }
log.Infof("found newer image %s, set image from %s to it...", config.Image, deployment.Spec.Template.Spec.Containers[0].Image) log.Infof("found newer image %s, set image from %s to it...", config.Image, deployment.Spec.Template.Spec.Containers[0].Image)
r := c.factory.NewBuilder(). r := c.factory.NewBuilder().

View File

@@ -106,8 +106,7 @@ func (d *DHCPManager) ReleaseIpToDHCP(ips ...*net.IPNet) error {
func (d *DHCPManager) updateDHCPConfigMap(f func(*ipallocator.Range) error) error { func (d *DHCPManager) updateDHCPConfigMap(f func(*ipallocator.Range) error) error {
cm, err := d.client.Get(context.Background(), config.ConfigMapPodTrafficManager, metav1.GetOptions{}) cm, err := d.client.Get(context.Background(), config.ConfigMapPodTrafficManager, metav1.GetOptions{})
if err != nil { if err != nil {
log.Errorf("failed to get cm DHCP server, err: %v", err) return fmt.Errorf("failed to get cm DHCP server, err: %v", err)
return err
} }
if cm.Data == nil { if cm.Data == nil {
cm.Data = make(map[string]string) cm.Data = make(map[string]string)
@@ -175,8 +174,7 @@ func (d *DHCPManager) Get(ctx2 context.Context, key string) (string, error) {
func (d *DHCPManager) ForEach(fn func(net.IP)) error { func (d *DHCPManager) ForEach(fn func(net.IP)) error {
cm, err := d.client.Get(context.Background(), config.ConfigMapPodTrafficManager, metav1.GetOptions{}) cm, err := d.client.Get(context.Background(), config.ConfigMapPodTrafficManager, metav1.GetOptions{})
if err != nil { if err != nil {
log.Errorf("failed to get cm DHCP server, err: %v", err) return fmt.Errorf("failed to get cm DHCP server, err: %v", err)
return err
} }
if cm.Data == nil { if cm.Data == nil {
cm.Data = make(map[string]string) cm.Data = make(map[string]string)

View File

@@ -167,7 +167,7 @@ func fullDomain(t *testing.T) {
func dialUDP(t *testing.T) { func dialUDP(t *testing.T) {
port := util.GetAvailableUDPPortOrDie() port := util.GetAvailableUDPPortOrDie()
go server(port) go UDPServer(port)
list, err := clientset.CoreV1().Pods(namespace).List(context.Background(), metav1.ListOptions{ list, err := clientset.CoreV1().Pods(namespace).List(context.Background(), metav1.ListOptions{
LabelSelector: fields.OneTermEqualSelector("app", "reviews").String(), LabelSelector: fields.OneTermEqualSelector("app", "reviews").String(),
@@ -191,13 +191,13 @@ func dialUDP(t *testing.T) {
func(err error) bool { func(err error) bool {
return err != nil return err != nil
}, func() error { }, func() error {
return client(ip, port) return UDPClient(ip, port)
}); err != nil { }); err != nil {
t.Errorf("can not access pod ip: %s, port: %v", ip, port) t.Errorf("can not access pod ip: %s, port: %v", ip, port)
} }
} }
func client(ip string, port int) error { func UDPClient(ip string, port int) error {
udpConn, err := net.DialUDP("udp4", nil, &net.UDPAddr{ udpConn, err := net.DialUDP("udp4", nil, &net.UDPAddr{
IP: net.ParseIP(ip), IP: net.ParseIP(ip),
Port: port, Port: port,
@@ -233,7 +233,7 @@ func client(ip string, port int) error {
return nil return nil
} }
func server(port int) { func UDPServer(port int) {
// 创建监听 // 创建监听
udpConn, err := net.ListenUDP("udp4", &net.UDPAddr{ udpConn, err := net.ListenUDP("udp4", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0), IP: net.IPv4(0, 0, 0, 0),

View File

@@ -3,7 +3,7 @@ kind: Plugin
metadata: metadata:
name: kubevpn name: kubevpn
spec: spec:
version: v1.1.28 version: v1.1.29
homepage: https://github.com/wencaiwulue/kubevpn homepage: https://github.com/wencaiwulue/kubevpn
shortDescription: "A vpn tunnel tools which can connect to kubernetes cluster network" shortDescription: "A vpn tunnel tools which can connect to kubernetes cluster network"
description: | description: |
@@ -17,8 +17,8 @@ spec:
matchLabels: matchLabels:
os: windows os: windows
arch: amd64 arch: amd64
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_windows_amd64.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_windows_amd64.zip
sha256: c1292f94523bc51ef3c68b7c01c1c21beb8d3ca6be48a4b05938c139092cd0ed sha256: 2ddc6e8bb3affa4e4b1d359c1953d680cc92172c9396851bc271254db2f36b45
files: files:
- from: ./bin/kubevpn.exe - from: ./bin/kubevpn.exe
to: . to: .
@@ -29,8 +29,8 @@ spec:
matchLabels: matchLabels:
os: windows os: windows
arch: arm64 arch: arm64
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_windows_arm64.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_windows_arm64.zip
sha256: b10b16769a791f229ac24a0aa642f59150fcb73d449e2bb83921239f7e77fb48 sha256: 7452da85e3b8660cdb0496fa3627f8b5e47839cc8c09c1744a8b5b28ce824ebc
files: files:
- from: ./bin/kubevpn.exe - from: ./bin/kubevpn.exe
to: . to: .
@@ -41,8 +41,8 @@ spec:
matchLabels: matchLabels:
os: windows os: windows
arch: 386 arch: 386
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_windows_386.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_windows_386.zip
sha256: 03819683d26210669a9240e6943fc20af6a8a62b91df7aa92b9ee38be01ffd07 sha256: 56ce06200b89e11929cba5ae45e27eb7d136601267caa484e32855d1a9d6eff0
files: files:
- from: ./bin/kubevpn.exe - from: ./bin/kubevpn.exe
to: . to: .
@@ -53,8 +53,8 @@ spec:
matchLabels: matchLabels:
os: linux os: linux
arch: amd64 arch: amd64
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_linux_amd64.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_linux_amd64.zip
sha256: 544b2c53de9fdb1ade5a7b4487d08526596f0fc8e540e76510409b62aedeeeb4 sha256: b375d503e4db93513df559677418073a56af13195b0bcd259f959df5e8a29528
files: files:
- from: ./bin/kubevpn - from: ./bin/kubevpn
to: . to: .
@@ -65,8 +65,8 @@ spec:
matchLabels: matchLabels:
os: linux os: linux
arch: arm64 arch: arm64
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_linux_arm64.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_linux_arm64.zip
sha256: c99df8f999e151b448b2f48f3d07eaf4f9bc722542ba7f4a20904412a25bcbfd sha256: 4dafdfa181b1ae2809ddbc79afbf411efef62ceaed12457b89df5428922183a7
files: files:
- from: ./bin/kubevpn - from: ./bin/kubevpn
to: . to: .
@@ -77,8 +77,8 @@ spec:
matchLabels: matchLabels:
os: linux os: linux
arch: 386 arch: 386
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_linux_386.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_linux_386.zip
sha256: f623dcf8c84ce9d662f5516dbe2272d288d550277139adc105dcea23da643778 sha256: da57db38558c0787edd435ebc8323a0441d91071484c01c64906a6802a7a4803
files: files:
- from: ./bin/kubevpn - from: ./bin/kubevpn
to: . to: .
@@ -89,8 +89,8 @@ spec:
matchLabels: matchLabels:
os: darwin os: darwin
arch: amd64 arch: amd64
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_darwin_amd64.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_darwin_amd64.zip
sha256: 917fe6b1bc757ceca3ecb1bebbe5b08e7b1a96aebcff5da54fe29f270b89805c sha256: 10bd12df6fab7fb6c426a069515ce57b64d9e8b8aec31f106a2cf78a21faafb4
files: files:
- from: ./bin/kubevpn - from: ./bin/kubevpn
to: . to: .
@@ -101,8 +101,8 @@ spec:
matchLabels: matchLabels:
os: darwin os: darwin
arch: arm64 arch: arm64
uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.28/kubevpn_v1.1.28_darwin_arm64.zip uri: https://github.com/wencaiwulue/kubevpn/releases/download/v1.1.29/kubevpn_v1.1.29_darwin_arm64.zip
sha256: c86532abfdd0b582c001a994921157abbbb3fcc5f12f28ec76a8e6afbc357916 sha256: 15a1f9abecd08583aedca2f18a40a89e8703a68389acb2cffae4637013ba381d
files: files:
- from: ./bin/kubevpn - from: ./bin/kubevpn
to: . to: .