Merge branch 'master' of github.com:kubernetes/minikube into anders-docker-20.10.15
commit
e881870110
|
|
@ -12,7 +12,7 @@ on:
|
|||
- "!deploy/iso/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -48,7 +48,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -67,7 +67,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- master
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ on:
|
|||
- "**.yml"
|
||||
- "**.yaml"
|
||||
- "Makefile"
|
||||
- "**Dockerfile**"
|
||||
- "!deploy/kicbase/**"
|
||||
- "!deploy/iso/**"
|
||||
types:
|
||||
|
|
@ -21,7 +22,7 @@ on:
|
|||
- deleted
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
|
@ -34,7 +35,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -114,8 +115,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
hostname || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ on:
|
|||
release:
|
||||
types: [published]
|
||||
env:
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ on:
|
|||
- "!deploy/iso/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -52,7 +52,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -71,7 +71,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -119,8 +119,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
docker ps || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -220,8 +219,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
docker ps || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -325,8 +323,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
podman ps || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -412,8 +409,7 @@ jobs:
|
|||
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl
|
||||
sudo install kubectl /usr/local/bin/kubectl
|
||||
kubectl version --client=true
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -523,8 +519,7 @@ jobs:
|
|||
VERSION="v1.17.0"
|
||||
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
|
||||
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ on:
|
|||
- "!deploy/iso/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -50,7 +50,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -69,7 +69,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -117,8 +117,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
docker ps || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -218,8 +217,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
docker ps || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -324,8 +322,7 @@ jobs:
|
|||
echo "--------------------------"
|
||||
podman ps || true
|
||||
echo "--------------------------"
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -412,8 +409,7 @@ jobs:
|
|||
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl
|
||||
sudo install kubectl /usr/local/bin/kubectl
|
||||
kubectl version --client=true
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -524,8 +520,7 @@ jobs:
|
|||
VERSION="v1.17.0"
|
||||
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
|
||||
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
|
||||
# go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ jobs:
|
|||
path: ./image-syncer
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: 1.17
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 2,14 * * *"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
AWS_DEFAULT_REGION: 'us-west-1'
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
@ -45,7 +45,7 @@ jobs:
|
|||
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl
|
||||
sudo install kubectl /usr/local/bin/kubectl
|
||||
kubectl version --client=true
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ on:
|
|||
types: [released]
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- name: Checkout submodules
|
||||
run: git submodule update --init
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- "translations/**"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ jobs:
|
|||
steps:
|
||||
- uses: ethomson/send-tweet-action@288f9339e0412e3038dce350e0da5ecdf12133a6
|
||||
with:
|
||||
status: "minikube ${GITHUB_REF_NAME} was just released! Check it out: https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md"
|
||||
status: "minikube ${{github.ref_name}} was just released! Check it out: https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md"
|
||||
consumer-key: ${{ secrets.TWITTER_API_KEY }}
|
||||
consumer-secret: ${{ secrets.TWITTER_API_SECRET }}
|
||||
access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 9 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 10 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 8 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
- name: Bump Kubernetes Versions
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ on:
|
|||
- cron: "0 6 * * 1"
|
||||
env:
|
||||
GOPROXY: https://proxy.golang.org
|
||||
GO_VERSION: '1.18.1'
|
||||
GO_VERSION: '1.18.2'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5
|
||||
- uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab
|
||||
- uses: actions/setup-go@fcdc43634adb5f7ae75a9d7a9b9361790f7293e2
|
||||
with:
|
||||
go-version: ${{env.GO_VERSION}}
|
||||
stable: true
|
||||
|
|
|
|||
133
CHANGELOG.md
133
CHANGELOG.md
|
|
@ -1,5 +1,136 @@
|
|||
# Release Notes
|
||||
|
||||
## Version 1.26.0-beta.1 - 2022-05-17
|
||||
|
||||
QEMU driver enhancements:
|
||||
* fix qemu firmware path locations [#14182](https://github.com/kubernetes/minikube/pull/14182)
|
||||
* re-establish apiserver tunnel on restart [#14183](https://github.com/kubernetes/minikube/pull/14183)
|
||||
|
||||
Features:
|
||||
* Add configure option to registry-aliases addon [#13912](https://github.com/kubernetes/minikube/pull/13912)
|
||||
|
||||
For a more detailed changelog, including changes occuring in pre-release versions, see [CHANGELOG.md](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md).
|
||||
|
||||
Thank you to our contributors for this release!
|
||||
|
||||
- Jack Zhang
|
||||
- Pablo Caderno
|
||||
- Sharif Elgamal
|
||||
- Steven Powell
|
||||
- Yuki Okushi
|
||||
- loftkun
|
||||
|
||||
Thank you to our PR reviewers for this release!
|
||||
|
||||
- spowelljr (20 comments)
|
||||
- afbjorklund (1 comments)
|
||||
- sharifelgamal (1 comments)
|
||||
|
||||
Thank you to our triage members for this release!
|
||||
|
||||
- afbjorklund (4 comments)
|
||||
- spowelljr (4 comments)
|
||||
- Al4DIN (1 comments)
|
||||
- Gimb0 (1 comments)
|
||||
- Neandril (1 comments)
|
||||
|
||||
## Version 1.26.0-beta.0 - 2022-05-13
|
||||
|
||||
Featues:
|
||||
* Add support for the QEMU driver [#13639](https://github.com/kubernetes/minikube/pull/13639)
|
||||
* Add support for building aarch64 ISO [#13762](https://github.com/kubernetes/minikube/pull/13762)
|
||||
* Support rootless Podman driver (Usage: `minikube config set rootless true`) [#13829](https://github.com/kubernetes/minikube/pull/13829)
|
||||
|
||||
Minor Improvements:
|
||||
* Add JSON output to `minikube delete` [#13979](https://github.com/kubernetes/minikube/pull/13979)
|
||||
* Add `--audit` flag to `minikube logs` command [#13991](https://github.com/kubernetes/minikube/pull/13991)
|
||||
* Add `--disable-metrics` flag [#13802](https://github.com/kubernetes/minikube/pull/13802)
|
||||
* Get latest valid tag for each image during caching [#14006](https://github.com/kubernetes/minikube/pull/14006)
|
||||
* Remove docker requirement for none driver [#13885](https://github.com/kubernetes/minikube/pull/13885)
|
||||
* Add 'subnet' flag for docker/podman driver [#13730](https://github.com/kubernetes/minikube/pull/13730)
|
||||
* Don't write logs that contain environment variables [#13877](https://github.com/kubernetes/minikube/pull/13877)
|
||||
* Implemented minimum and recommended Docker versions [#13842](https://github.com/kubernetes/minikube/pull/13842)
|
||||
|
||||
Bug Fixes:
|
||||
* Fix "Your cgroup does not allow setting memory" [#14115](https://github.com/kubernetes/minikube/pull/14115)
|
||||
* Fix nvidia-gpu with kvm-driver [#13972](https://github.com/kubernetes/minikube/pull/13972)
|
||||
* Fix `minikube delete` for Podman v4 [#13881](https://github.com/kubernetes/minikube/pull/13881)
|
||||
* Fix pre command flags [#13995](https://github.com/kubernetes/minikube/pull/13995)
|
||||
* Fix logging when JSON output selected [#13955](https://github.com/kubernetes/minikube/pull/13955)
|
||||
* Fix port validation error on specifying tcp/udp or range of ports. [#13812](https://github.com/kubernetes/minikube/pull/13812)
|
||||
* Fix not downloading kic for offline mode [#13910](https://github.com/kubernetes/minikube/pull/13910)
|
||||
* Fix trying to pause multiple containers with runc [#13783](https://github.com/kubernetes/minikube/pull/13783)
|
||||
* Fix `minikube servce` docker/port-forward issues [#13756](https://github.com/kubernetes/minikube/pull/13756)
|
||||
|
||||
Version Upgrades:
|
||||
* Upgrade Kubernetes default: v1.23.6 and latest: v1.23.6 [#14144](https://github.com/kubernetes/minikube/pull/14144)
|
||||
* ISO/KIC: Upgrade buildkit from 0.9.0 to 0.10.3 [#13791](https://github.com/kubernetes/minikube/pull/13791)
|
||||
* ISO: Upgrade Docker from 20.10.12 to 20.10.14 [#13860](https://github.com/kubernetes/minikube/pull/13860)
|
||||
* ISO: Upgrade crio from 1.22.1 to 1.22.3 [#13800](https://github.com/kubernetes/minikube/pull/13800)
|
||||
* ISO: Upgrade buildroot from 2021.02.4 to 2021.02.12 [#13814](https://github.com/kubernetes/minikube/pull/13814)
|
||||
* Upgrade nginx image from 1.1.1 to 1.2.0 [#14028](https://github.com/kubernetes/minikube/pull/14028)
|
||||
* ISO: Upgrade falco-module from 0.24.0 to 0.31.1 [#13659](https://github.com/kubernetes/minikube/pull/13659)
|
||||
* Upgrade kubernetes dashboard from 2.3.1 to 2.5.1 [#13741](https://github.com/kubernetes/minikube/pull/13741)
|
||||
* KIC: Upgrade kicbase base image from 20210401 to 20220316 [#13815](https://github.com/kubernetes/minikube/pull/13815)
|
||||
* ISO: Upgrade Podman from 2.2.1 to 3.4.2 [#13126](https://github.com/kubernetes/minikube/pull/13126)
|
||||
* ISO: Add packaging for crun [#11679](https://github.com/kubernetes/minikube/pull/11679)
|
||||
|
||||
For a more detailed changelog, including changes occuring in pre-release versions, see [CHANGELOG.md](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md).
|
||||
|
||||
Thank you to our contributors for this release!
|
||||
|
||||
- Akihiro Suda
|
||||
- Akira Yoshiyama
|
||||
- Anders F Björklund
|
||||
- Ashwin Somasundara
|
||||
- Carlos Eduardo Arango Gutierrez
|
||||
- Daniel Petri
|
||||
- F1ko
|
||||
- Filip Nikolic
|
||||
- Ileriayo Adebiyi
|
||||
- Jeff MAURY
|
||||
- Jin Zhang
|
||||
- Medya Ghazizadeh
|
||||
- Nikhil2001
|
||||
- Pablo Caderno
|
||||
- Piotr Resztak
|
||||
- Predrag Rogic
|
||||
- Sean Wei
|
||||
- Sharif Elgamal
|
||||
- Steven Powell
|
||||
- Tomohito YABU
|
||||
- Toshiaki Inukai
|
||||
- betaboon
|
||||
- ckannon
|
||||
- edwinwalela
|
||||
- klaases
|
||||
- naveensrinivasan
|
||||
- staticdev
|
||||
- ziyi-xie
|
||||
|
||||
Thank you to our PR reviewers for this release!
|
||||
|
||||
- spowelljr (55 comments)
|
||||
- medyagh (39 comments)
|
||||
- afbjorklund (14 comments)
|
||||
- klaases (14 comments)
|
||||
- jesperpedersen (9 comments)
|
||||
- sharifelgamal (6 comments)
|
||||
- atoato88 (3 comments)
|
||||
- jepio (3 comments)
|
||||
- mprimeaux (2 comments)
|
||||
- shu-mutou (2 comments)
|
||||
- t-inu (2 comments)
|
||||
- AkihiroSuda (1 comments)
|
||||
|
||||
Thank you to our triage members for this release!
|
||||
|
||||
- afbjorklund (52 comments)
|
||||
- klaases (39 comments)
|
||||
- RA489 (28 comments)
|
||||
- spowelljr (24 comments)
|
||||
- zhan9san (24 comments)
|
||||
|
||||
## Version 1.25.2 - 2022-02-23
|
||||
|
||||
Features:
|
||||
|
|
@ -81,7 +212,7 @@ Thank you to our triage members for this release!
|
|||
- klaases (13 comments)
|
||||
- sharifelgamal (12 comments)
|
||||
|
||||
Check out our [contributions leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/v1.25.1/) for this release!
|
||||
Check out our [contributions leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/v1.25.2/) for this release!
|
||||
|
||||
## Version 1.25.1 - 2022-01-20
|
||||
|
||||
|
|
|
|||
15
Makefile
15
Makefile
|
|
@ -14,8 +14,8 @@
|
|||
|
||||
# Bump these on release - and please check ISO_VERSION for correctness.
|
||||
VERSION_MAJOR ?= 1
|
||||
VERSION_MINOR ?= 25
|
||||
VERSION_BUILD ?= 2
|
||||
VERSION_MINOR ?= 26
|
||||
VERSION_BUILD ?= 0-beta.1
|
||||
RAW_VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD)
|
||||
VERSION ?= v$(RAW_VERSION)
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ KUBERNETES_VERSION ?= $(shell egrep "DefaultKubernetesVersion =" pkg/minikube/co
|
|||
KIC_VERSION ?= $(shell egrep "Version =" pkg/drivers/kic/types.go | cut -d \" -f2)
|
||||
|
||||
# Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions
|
||||
ISO_VERSION ?= v1.25.2-1652384524-14152
|
||||
ISO_VERSION ?= v1.26.0-beta.1
|
||||
# Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta
|
||||
DEB_VERSION ?= $(subst -,~,$(RAW_VERSION))
|
||||
DEB_REVISION ?= 0
|
||||
|
|
@ -33,9 +33,9 @@ RPM_REVISION ?= 0
|
|||
|
||||
# used by hack/jenkins/release_build_and_upload.sh and KVM_BUILD_IMAGE, see also BUILD_IMAGE below
|
||||
# update this only by running `make update-golang-version`
|
||||
GO_VERSION ?= 1.18.1
|
||||
GO_VERSION ?= 1.18.2
|
||||
# update this only by running `make update-golang-version`
|
||||
GO_K8S_VERSION_PREFIX ?= v1.24.0
|
||||
GO_K8S_VERSION_PREFIX ?= v1.25.0
|
||||
|
||||
# replace "x.y.0" => "x.y". kube-cross and golang.org/dl use different formats for x.y.0 go versions
|
||||
KVM_GO_VERSION ?= $(GO_VERSION:.0=)
|
||||
|
|
@ -76,7 +76,7 @@ MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download
|
|||
KERNEL_VERSION ?= 4.19.235
|
||||
# latest from https://github.com/golangci/golangci-lint/releases
|
||||
# update this only by running `make update-golint-version`
|
||||
GOLINT_VERSION ?= v1.45.2
|
||||
GOLINT_VERSION ?= v1.46.1
|
||||
# Limit number of default jobs, to avoid the CI builds running out of memory
|
||||
GOLINT_JOBS ?= 4
|
||||
# see https://github.com/golangci/golangci-lint#memory-usage-of-golangci-lint
|
||||
|
|
@ -527,7 +527,8 @@ mdlint:
|
|||
|
||||
.PHONY: verify-iso
|
||||
verify-iso: # Make sure the current ISO exists in the expected bucket
|
||||
gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION).iso
|
||||
gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-amd64.iso
|
||||
gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-arm64.iso
|
||||
|
||||
out/docs/minikube.md: $(shell find "cmd") $(shell find "pkg/minikube/constants")
|
||||
go run -ldflags="$(MINIKUBE_LDFLAGS)" -tags gendocs hack/help_text/gen_help_text.go
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import (
|
|||
|
||||
"github.com/spf13/cobra"
|
||||
"k8s.io/minikube/pkg/addons"
|
||||
"k8s.io/minikube/pkg/minikube/assets"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/exit"
|
||||
"k8s.io/minikube/pkg/minikube/mustload"
|
||||
|
|
@ -234,6 +235,26 @@ var addonsConfigureCmd = &cobra.Command{
|
|||
if err := config.SaveProfile(profile, cfg); err != nil {
|
||||
out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile})
|
||||
}
|
||||
case "registry-aliases":
|
||||
profile := ClusterFlagValue()
|
||||
_, cfg := mustload.Partial(profile)
|
||||
validator := func(s string) bool {
|
||||
format := regexp.MustCompile(`^([a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+)+(\ [a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+)*$`)
|
||||
return format.MatchString(s)
|
||||
}
|
||||
registryAliases := AskForStaticValidatedValue("-- Enter registry aliases separated by space: ", validator)
|
||||
cfg.KubernetesConfig.RegistryAliases = registryAliases
|
||||
|
||||
if err := config.SaveProfile(profile, cfg); err != nil {
|
||||
out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile})
|
||||
}
|
||||
addon := assets.Addons["registry-aliases"]
|
||||
if addon.IsEnabled(cfg) {
|
||||
// Re-enable registry-aliases addon in order to generate template manifest files with custom hosts
|
||||
if err := addons.EnableOrDisableAddon(cfg, "registry-aliases", "true"); err != nil {
|
||||
out.ErrT(style.Fatal, "Failed to configure registry-aliases {{.profile}}", out.V{"profile": profile})
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
out.FailureT("{{.name}} has no available configuration options", out.V{"name": addon})
|
||||
|
|
|
|||
|
|
@ -47,9 +47,9 @@ import (
|
|||
var (
|
||||
dashboardURLMode bool
|
||||
dashboardExposedPort int
|
||||
// Matches: 127.0.0.1:8001
|
||||
// Matches: "127.0.0.1:8001" or "127.0.0.1 40012" etc.
|
||||
// TODO(tstromberg): Get kubectl to implement a stable supported output format.
|
||||
hostPortRe = regexp.MustCompile(`127.0.0.1:\d{4,}`)
|
||||
hostPortRe = regexp.MustCompile(`127.0.0.1(:| )\d{4,}`)
|
||||
)
|
||||
|
||||
// dashboardCmd represents the dashboard command
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import (
|
|||
"k8s.io/klog/v2"
|
||||
|
||||
"k8s.io/minikube/pkg/drivers/kic/oci"
|
||||
"k8s.io/minikube/pkg/drivers/qemu"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper/bsutil/kverify"
|
||||
"k8s.io/minikube/pkg/minikube/command"
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
|
|
@ -290,11 +291,13 @@ var dockerEnvCmd = &cobra.Command{
|
|||
|
||||
d := co.CP.Host.Driver
|
||||
port := constants.DockerDaemonPort
|
||||
if driver.NeedsPortForward(driverName) {
|
||||
if driver.NeedsPortForward(driverName) && driver.IsKIC(driverName) {
|
||||
port, err = oci.ForwardedPort(driverName, cname, port)
|
||||
if err != nil {
|
||||
exit.Message(reason.DrvPortForward, "Error getting port binding for '{{.driver_name}} driver: {{.error}}", out.V{"driver_name": driverName, "error": err})
|
||||
}
|
||||
} else if driver.NeedsPortForward(driverName) && driverName == driver.QEMU2 {
|
||||
port = d.(*qemu.Driver).EnginePort
|
||||
}
|
||||
|
||||
hostname, err := d.GetSSHHostname()
|
||||
|
|
|
|||
|
|
@ -85,6 +85,12 @@ var serviceCmd = &cobra.Command{
|
|||
|
||||
cname := ClusterFlagValue()
|
||||
co := mustload.Healthy(cname)
|
||||
|
||||
// Bail cleanly for qemu2 until implemented
|
||||
if driver.IsQEMU(co.Config.Driver) {
|
||||
exit.Message(reason.Unimplemented, "minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.")
|
||||
}
|
||||
|
||||
var services service.URLs
|
||||
services, err := service.GetServiceURLs(co.API, co.Config.Name, namespace, serviceURLTemplate)
|
||||
if err != nil {
|
||||
|
|
@ -103,7 +109,7 @@ var serviceCmd = &cobra.Command{
|
|||
services = newServices
|
||||
}
|
||||
|
||||
if services == nil || len(services) == 0 {
|
||||
if len(services) == 0 {
|
||||
exit.Message(reason.SvcNotFound, `Service '{{.service}}' was not found in '{{.namespace}}' namespace.
|
||||
You may select another namespace by using 'minikube service {{.service}} -n <namespace>'. Or list out all the services using 'minikube service list'`, out.V{"service": args[0], "namespace": namespace})
|
||||
}
|
||||
|
|
@ -140,8 +146,10 @@ You may select another namespace by using 'minikube service {{.service}} -n <nam
|
|||
}
|
||||
}
|
||||
|
||||
if driver.NeedsPortForward(co.Config.Driver) && services != nil {
|
||||
if driver.NeedsPortForward(co.Config.Driver) && driver.IsKIC(co.Config.Driver) && services != nil {
|
||||
startKicServiceTunnel(services, cname, co.Config.Driver)
|
||||
} else if driver.NeedsPortForward(co.Config.Driver) && driver.IsQEMU(co.Config.Driver) && services != nil {
|
||||
startQemuServiceTunnel(services, cname, co.Config.Driver)
|
||||
} else if !serviceURLMode {
|
||||
openURLs(data)
|
||||
}
|
||||
|
|
@ -214,6 +222,9 @@ func startKicServiceTunnel(services service.URLs, configName, driverName string)
|
|||
<-ctrlC
|
||||
}
|
||||
|
||||
func startQemuServiceTunnel(services service.URLs, configName, driverName string) {
|
||||
}
|
||||
|
||||
func mutateURLs(serviceName string, urls []string) ([]string, error) {
|
||||
formattedUrls := make([]string, 0)
|
||||
for _, rawURL := range urls {
|
||||
|
|
|
|||
|
|
@ -312,6 +312,11 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing *
|
|||
return node.Starter{}, errors.Wrap(err, "Failed to generate config")
|
||||
}
|
||||
|
||||
// Bail cleanly for qemu2 until implemented
|
||||
if driver.IsVM(cc.Driver) && runtime.GOARCH == "arm64" && cc.KubernetesConfig.ContainerRuntime != "docker" {
|
||||
exit.Message(reason.Unimplemented, "arm64 VM drivers do not currently support containerd or crio container runtimes. See https://github.com/kubernetes/minikube/issues/14146 for details.")
|
||||
}
|
||||
|
||||
// This is about as far as we can go without overwriting config files
|
||||
if viper.GetBool(dryRun) {
|
||||
out.Step(style.DryRun, `dry-run validation complete!`)
|
||||
|
|
|
|||
|
|
@ -55,6 +55,11 @@ var tunnelCmd = &cobra.Command{
|
|||
cname := ClusterFlagValue()
|
||||
co := mustload.Healthy(cname)
|
||||
|
||||
// Bail cleanly for qemu2 until implemented
|
||||
if driver.IsQEMU(co.Config.Driver) {
|
||||
exit.Message(reason.Unimplemented, "minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.")
|
||||
}
|
||||
|
||||
if cleanup {
|
||||
klog.Info("Checking for tunnels to cleanup...")
|
||||
if err := manager.CleanupNotRunningTunnels(); err != nil {
|
||||
|
|
@ -79,8 +84,7 @@ var tunnelCmd = &cobra.Command{
|
|||
cancel()
|
||||
}()
|
||||
|
||||
if driver.NeedsPortForward(co.Config.Driver) {
|
||||
|
||||
if driver.NeedsPortForward(co.Config.Driver) && driver.IsKIC(co.Config.Driver) {
|
||||
port, err := oci.ForwardedPort(co.Config.Driver, cname, 22)
|
||||
if err != nil {
|
||||
exit.Error(reason.DrvPortForward, "error getting ssh port", err)
|
||||
|
|
|
|||
|
|
@ -9,11 +9,14 @@ metadata:
|
|||
data:
|
||||
# Add additional hosts separated by new-line
|
||||
registryAliases: >-
|
||||
{{- if .RegistryAliases}}
|
||||
{{ .RegistryAliases}}
|
||||
{{- else}}
|
||||
example.org
|
||||
example.com
|
||||
test.com
|
||||
test.org
|
||||
{{- end}}
|
||||
registry.minikube
|
||||
# default registry address in minikube when enabled via minikube addons enable registry
|
||||
registrySvc: registry.kube-system.svc.cluster.local
|
||||
|
||||
registrySvc: registry.kube-system.svc.cluster.local
|
||||
|
|
@ -1 +1,2 @@
|
|||
sha256 0a834a749e86525e0eb16e7e80ce726e7c6a8e8d26fc5cc36c712305024da4e7 buildkit-v0.9.0.linux-arm64.tar.gz
|
||||
sha256 27e974e2b07e087f66f0c9c2b43b6f3df6f7e1746a6252580f164427337d668c buildkit-v0.10.3.linux-arm64.tar.gz
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
#
|
||||
################################################################################
|
||||
|
||||
BUILDKIT_BIN_AARCH64_VERSION = v0.9.0
|
||||
BUILDKIT_BIN_AARCH64_COMMIT = c8bb937807d405d92be91f06ce2629e6202ac7a9
|
||||
BUILDKIT_BIN_AARCH64_VERSION = v0.10.3
|
||||
BUILDKIT_BIN_AARCH64_COMMIT = c8d25d9a103b70dc300a4fd55e7e576472284e31
|
||||
BUILDKIT_BIN_AARCH64_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_AARCH64_VERSION)
|
||||
BUILDKIT_BIN_AARCH64_SOURCE = buildkit-$(BUILDKIT_BIN_AARCH64_VERSION).linux-arm64.tar.gz
|
||||
|
||||
|
|
|
|||
|
|
@ -3,3 +3,4 @@ sha256 28005748fae926edf8c93b7cb1df53ec49df65dec67105b94e7fb9c513fa78a4 buildki
|
|||
sha256 e0438a701d4192f80b2211b0a333984ee4f097c547904e40fc941daad57fe153 buildkit-v0.8.1.linux-amd64.tar.gz
|
||||
sha256 d6d1ebc68806e626f31dd4ea17a406a93dcff14763971cd91b28cbaf3bfffcd4 buildkit-v0.8.2.linux-amd64.tar.gz
|
||||
sha256 1b307268735c8f8e68b55781a6f4c03af38acc1bc29ba39ebaec6d422bccfb25 buildkit-v0.9.0.linux-amd64.tar.gz
|
||||
sha256 fbc9c433cf77c5c00db6f797155edc60b44463524ae59a4961699dca15bcee00 buildkit-v0.10.3.linux-amd64.tar.gz
|
||||
|
|
|
|||
|
|
@ -4,13 +4,14 @@
|
|||
#
|
||||
################################################################################
|
||||
|
||||
BUILDKIT_BIN_VERSION = v0.9.0
|
||||
BUILDKIT_BIN_COMMIT = c8bb937807d405d92be91f06ce2629e6202ac7a9
|
||||
BUILDKIT_BIN_VERSION = v0.10.3
|
||||
BUILDKIT_BIN_COMMIT = c8d25d9a103b70dc300a4fd55e7e576472284e31
|
||||
BUILDKIT_BIN_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_VERSION)
|
||||
BUILDKIT_BIN_SOURCE = buildkit-$(BUILDKIT_BIN_VERSION).linux-amd64.tar.gz
|
||||
|
||||
# https://github.com/opencontainers/runc.git
|
||||
BUILDKIT_RUNC_VERSION = 12644e614e25b05da6fd08a38ffa0cfe1903fdec
|
||||
BUILDKIT_RUNC_VERSION = v1.0.2
|
||||
BUILDKIT_RUNC_COMMIT = 52b36a2dd837e8462de8e01458bf02cf9eea47dd
|
||||
|
||||
define BUILDKIT_BIN_USERS
|
||||
- -1 buildkit -1 - - - - -
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ RUN git clone -n https://github.com/Mirantis/cri-dockerd && \
|
|||
# for a kubernetes node image, it doesn't contain much we don't need
|
||||
FROM ubuntu:focal-20220316
|
||||
|
||||
ARG BUILDKIT_VERSION="v0.9.3"
|
||||
ARG BUILDKIT_VERSION="v0.10.3"
|
||||
ARG FUSE_OVERLAYFS_VERSION="v1.7.1"
|
||||
ARG CONTAINERD_FUSE_OVERLAYFS_VERSION="1.0.3"
|
||||
ARG CRIO_VERSION="1.22"
|
||||
|
|
@ -146,8 +146,8 @@ RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/
|
|||
&& tar -C /usr/local -xzvf /tmp/buildkit.tgz \
|
||||
&& rm -rf /tmp/buildkit.tgz \
|
||||
&& mkdir -p /usr/local/lib/systemd/system \
|
||||
&& curl -L --retry 5 --output /usr/local/lib/systemd/system/buildkit.service "https://raw.githubusercontent.com/moby/buildkit/${BUILDKIT_VERSION}/examples/systemd/buildkit.service" \
|
||||
&& curl -L --retry 5 --output /usr/local/lib/systemd/system/buildkit.socket "https://raw.githubusercontent.com/moby/buildkit/${BUILDKIT_VERSION}/examples/systemd/buildkit.socket" \
|
||||
&& curl -L --retry 5 --output /usr/local/lib/systemd/system/buildkit.service "https://raw.githubusercontent.com/moby/buildkit/${BUILDKIT_VERSION}/examples/systemd/system/buildkit.service" \
|
||||
&& curl -L --retry 5 --output /usr/local/lib/systemd/system/buildkit.socket "https://raw.githubusercontent.com/moby/buildkit/${BUILDKIT_VERSION}/examples/systemd/system/buildkit.socket" \
|
||||
&& mkdir -p /etc/buildkit \
|
||||
&& echo "[worker.oci]\n enabled = false\n[worker.containerd]\n enabled = true\n namespace = \"k8s.io\"" > /etc/buildkit/buildkitd.toml \
|
||||
&& chmod 755 /usr/local/bin/buildctl \
|
||||
|
|
@ -158,8 +158,8 @@ RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/
|
|||
|
||||
# Install cri-o/podman dependencies:
|
||||
RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && \
|
||||
sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \
|
||||
curl -LO https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key && \
|
||||
sh -c "echo 'deb https://downloadcontent.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \
|
||||
curl -LO https://downloadcontent.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key && \
|
||||
apt-key add - < Release.key && \
|
||||
if [ "$ARCH" != "ppc64le" ]; then \
|
||||
clean-install containers-common catatonit conmon containernetworking-plugins cri-tools podman-plugins crun; \
|
||||
|
|
@ -169,15 +169,15 @@ RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && \
|
|||
|
||||
# install cri-o based on https://github.com/cri-o/cri-o/blob/release-1.22/README.md#installing-cri-o
|
||||
RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm-v7/') && \
|
||||
if [ "$ARCH" != "ppc64le" ] && [ "$ARCH" != "arm-v7" ]; then sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/${CRIO_VERSION}/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:${CRIO_VERSION}.list" && \
|
||||
curl -LO https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/${CRIO_VERSION}/xUbuntu_20.04/Release.key && \
|
||||
if [ "$ARCH" != "ppc64le" ] && [ "$ARCH" != "arm-v7" ]; then sh -c "echo 'deb https://downloadcontent.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/${CRIO_VERSION}/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:${CRIO_VERSION}.list" && \
|
||||
curl -LO https://downloadcontent.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/${CRIO_VERSION}/xUbuntu_20.04/Release.key && \
|
||||
apt-key add - < Release.key && \
|
||||
clean-install cri-o cri-o-runc; fi
|
||||
|
||||
# install podman
|
||||
RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && \
|
||||
if [ "$ARCH" != "ppc64le" ]; then sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \
|
||||
curl -LO https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key && \
|
||||
if [ "$ARCH" != "ppc64le" ]; then sh -c "echo 'deb http://downloadcontent.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \
|
||||
curl -LO https://downloadcontent.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key && \
|
||||
apt-key add - < Release.key && \
|
||||
clean-install podman && \
|
||||
addgroup --system podman && \
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@ if grep -Eqv "0[[:space:]]+0[[:space:]]+4294967295" /proc/self/uid_map; then
|
|||
echo 'INFO: running in a user namespace (experimental)'
|
||||
fi
|
||||
|
||||
grep_allow_nomatch() {
|
||||
# grep exits 0 on match, 1 on no match, 2 on error
|
||||
grep "$@" || [[ $? == 1 ]]
|
||||
}
|
||||
|
||||
validate_userns() {
|
||||
if [[ -z "${userns}" ]]; then
|
||||
return
|
||||
|
|
@ -40,22 +45,81 @@ validate_userns() {
|
|||
echo "WARN: UserNS: expected RLIMIT_NOFILE to be at least ${nofile_hard_expected}, got ${nofile_hard}" >&2
|
||||
fi
|
||||
|
||||
if [[ ! -f "/sys/fs/cgroup/cgroup.controllers" ]]; then
|
||||
echo "ERROR: UserNS: cgroup v2 needs to be enabled, see https://rootlesscontaine.rs/getting-started/common/cgroup2/" >&2
|
||||
exit 1
|
||||
if [[ -f "/sys/fs/cgroup/cgroup.controllers" ]]; then
|
||||
for f in cpu memory pids; do
|
||||
if ! grep -qw $f /sys/fs/cgroup/cgroup.controllers; then
|
||||
echo "ERROR: UserNS: $f controller needs to be delegated" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
for f in cpu memory pids; do
|
||||
if ! grep -qw $f /sys/fs/cgroup/cgroup.controllers; then
|
||||
echo "ERROR: UserNS: $f controller needs to be delegated, see https://rootlesscontaine.rs/getting-started/common/cgroup2/" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
overlayfs_preferrable() {
|
||||
if [[ -z "$userns" ]]; then
|
||||
# If we are outside userns, we can always assume overlayfs is preferrable
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Debian 10 and 11 supports overlayfs in userns with a "permit_mount_in_userns" kernel patch,
|
||||
# but known to be unstable, so we avoid using it https://github.com/moby/moby/issues/42302
|
||||
if [[ -e "/sys/module/overlay/parameters/permit_mounts_in_userns" ]]; then
|
||||
echo "INFO: UserNS: kernel seems supporting overlayfs with permit_mounts_in_userns, but avoiding due to instability."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check overlayfs availability, by attempting to mount it.
|
||||
#
|
||||
# Overlayfs inside userns is known to be available for the following environments:
|
||||
# - Kernel >= 5.11 (but 5.11 and 5.12 have issues on SELinux hosts. Fixed in 5.13.)
|
||||
# - Ubuntu kernel
|
||||
# - Debian kernel (but avoided due to instability, see the /sys/module/overlay/... check above)
|
||||
# - Sysbox
|
||||
tmp=$(mktemp -d)
|
||||
mkdir -p "${tmp}/l" "${tmp}/u" "${tmp}/w" "${tmp}/m"
|
||||
if ! mount -t overlay -o lowerdir="${tmp}/l,upperdir=${tmp}/u,workdir=${tmp}/w" overlay "${tmp}/m"; then
|
||||
echo "INFO: UserNS: kernel does not seem to support overlayfs."
|
||||
rm -rf "${tmp}"
|
||||
return 1
|
||||
fi
|
||||
umount "${tmp}/m"
|
||||
rm -rf "${tmp}"
|
||||
|
||||
# Detect whether SELinux is Enforcing (or Permitted) by grepping /proc/self/attr/current .
|
||||
# Note that we cannot use `getenforce` command here because /sys/fs/selinux is typically not mounted for containers.
|
||||
if grep -q "_t:" "/proc/self/attr/current"; then
|
||||
# When the kernel is before v5.13 and SELinux is enforced, fuse-overlayfs might be safer, so we print a warning (but not an error).
|
||||
# https://github.com/torvalds/linux/commit/7fa2e79a6bb924fa4b2de5766dab31f0f47b5ab6
|
||||
echo "WARN: UserNS: SELinux might be Enforcing. If you see an error related to overlayfs, try setting \`KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER=fuse-overlayfs\` ." >&2
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
configure_containerd() {
|
||||
# we need to switch to the 'native' snapshotter on zfs
|
||||
if [[ "$(stat -f -c %T /kind)" == 'zfs' ]]; then
|
||||
sed -i 's/snapshotter = "overlayfs"/snapshotter = "native"/' /etc/containerd/config.toml
|
||||
local snapshotter=${KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER:-}
|
||||
if [[ -n "$userns" ]]; then
|
||||
# userns (rootless) configs
|
||||
|
||||
# Adjust oomScoreAdj
|
||||
sed -i 's/restrict_oom_score_adj = false/restrict_oom_score_adj = true/' /etc/containerd/config.toml
|
||||
|
||||
# Use fuse-overlayfs if overlayfs is not preferrable: https://github.com/kubernetes-sigs/kind/issues/2275
|
||||
if [[ -z "$snapshotter" ]] && ! overlayfs_preferrable; then
|
||||
snapshotter="fuse-overlayfs"
|
||||
fi
|
||||
else
|
||||
# we need to switch to the 'native' snapshotter on zfs
|
||||
if [[ -z "$snapshotter" ]] && [["$(stat -f -c %T /kind)" == 'zfs' ]]; then
|
||||
snapshotter="native"
|
||||
fi
|
||||
fi
|
||||
if [[ -n "$snapshotter" ]]; then
|
||||
echo "INFO: changing snapshotter from \"overlayfs\" to \"$snapshotter\""
|
||||
sed -i "s/snapshotter = \"overlayfs\"/snapshotter = \"$snapshotter\"/" /etc/containerd/config.toml
|
||||
if [[ "$snapshotter" = "fuse-overlayfs" ]]; then
|
||||
echo 'INFO: enabling containerd-fuse-overlayfs service'
|
||||
systemctl enable containerd-fuse-overlayfs
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -106,15 +170,19 @@ fix_mount() {
|
|||
sync
|
||||
fi
|
||||
|
||||
if [[ -z "${userns}" ]]; then
|
||||
echo 'INFO: remounting /sys read-only'
|
||||
# systemd-in-a-container should have read only /sys
|
||||
# https://systemd.io/CONTAINER_INTERFACE/
|
||||
# however, we need other things from `docker run --privileged` ...
|
||||
# and this flag also happens to make /sys rw, amongst other things
|
||||
#
|
||||
# This step is skipped when running inside UserNS, because it fails with EACCES.
|
||||
mount -o remount,ro /sys
|
||||
echo 'INFO: remounting /sys read-only'
|
||||
# systemd-in-a-container should have read only /sys
|
||||
# https://systemd.io/CONTAINER_INTERFACE/
|
||||
# however, we need other things from `docker run --privileged` ...
|
||||
# and this flag also happens to make /sys rw, amongst other things
|
||||
#
|
||||
# This step is ignored when running inside UserNS, because it fails with EACCES.
|
||||
if ! mount -o remount,ro /sys; then
|
||||
if [[ -n "$userns" ]]; then
|
||||
echo 'INFO: UserNS: ignoring mount fail' >&2
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo 'INFO: making mounts shared' >&2
|
||||
|
|
@ -163,20 +231,55 @@ fix_cgroup() {
|
|||
return
|
||||
fi
|
||||
echo 'INFO: detected cgroup v1'
|
||||
echo 'INFO: fix cgroup mounts for all subsystems'
|
||||
local current_cgroup
|
||||
current_cgroup=$(grep -E '^[^:]*:([^:]*,)?cpu(,[^,:]*)?:.*' /proc/self/cgroup | cut -d: -f3)
|
||||
if [ "$current_cgroup" = "/" ]; then
|
||||
echo "INFO: cgroupns detected, no need to fix cgroups"
|
||||
return
|
||||
fi
|
||||
|
||||
# NOTE The rest of this function deals with the unfortunate situation of
|
||||
# cgroup v1 with no cgroupns enabled. One fine day every user will have
|
||||
# cgroupns enabled (or switch or cgroup v2 which has it enabled by default).
|
||||
# Once that happens, this function can be removed completely.
|
||||
|
||||
echo 'WARN: cgroupns not enabled! Please use cgroup v2, or cgroup v1 with cgroupns enabled.'
|
||||
|
||||
# See: https://d2iq.com/blog/running-kind-inside-a-kubernetes-cluster-for-continuous-integration
|
||||
# Capture initial state before modifying
|
||||
#
|
||||
# Basically we're looking for the cgroup-path for the cpu controller for the
|
||||
# current process. this tells us what cgroup-path the container is in.
|
||||
# Then we collect the subsystems that are active on this path.
|
||||
# We assume the cpu controller is in use on all node containers.
|
||||
# We assume the cpu controller is in use on all node containers,
|
||||
# and other controllers use the same sub-path.
|
||||
#
|
||||
# See: https://man7.org/linux/man-pages/man7/cgroups.7.html
|
||||
local current_cgroup
|
||||
current_cgroup=$(grep -E '^[^:]*:([^:]*,)?cpu(,[^,:]*)?:.*' /proc/self/cgroup | cut -d: -f3)
|
||||
echo 'INFO: fix cgroup mounts for all subsystems'
|
||||
local cgroup_subsystems
|
||||
cgroup_subsystems=$(findmnt -lun -o source,target -t cgroup | grep "${current_cgroup}" | awk '{print $2}')
|
||||
# Unmount the cgroup subsystems that are not known to runtime used to
|
||||
# run the container we are in. Those subsystems are not properly scoped
|
||||
# (i.e. the root cgroup is exposed, rather than something like docker/xxxx).
|
||||
# In case a runtime (which is aware of more subsystems -- such as rdma,
|
||||
# misc, or unified) is used inside the container, it may create cgroups for
|
||||
# these subsystems, and as they are not scoped, they will leak to the host
|
||||
# and thus will become non-removable.
|
||||
#
|
||||
# See https://github.com/kubernetes/kubernetes/issues/109182
|
||||
local unsupported_cgroups
|
||||
unsupported_cgroups=$(findmnt -lun -o source,target -t cgroup | grep_allow_nomatch -v "${current_cgroup}" | awk '{print $2}')
|
||||
if [ -n "$unsupported_cgroups" ]; then
|
||||
local mnt
|
||||
echo "$unsupported_cgroups" |
|
||||
while IFS= read -r mnt; do
|
||||
echo "INFO: unmounting and removing $mnt"
|
||||
umount "$mnt" || true
|
||||
rmdir "$mnt" || true
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# For each cgroup subsystem, Docker does a bind mount from the current
|
||||
# cgroup to the root of the cgroup subsystem. For instance:
|
||||
# /sys/fs/cgroup/memory/docker/<cid> -> /sys/fs/cgroup/memory
|
||||
|
|
@ -214,10 +317,12 @@ fix_cgroup() {
|
|||
# "nesting" clusters, unless we instruct it to use a different cgroup root.
|
||||
# We do this, and when doing so we must fixup this alternative root
|
||||
# currently this is hardcoded to be /kubelet
|
||||
# under systemd cgroup driver, kubelet appends .slice
|
||||
mount --make-rprivate /sys/fs/cgroup
|
||||
echo "${cgroup_subsystems}" |
|
||||
while IFS= read -r subsystem; do
|
||||
mount_kubelet_cgroup_root "/kubelet" "${subsystem}"
|
||||
mount_kubelet_cgroup_root "/kubelet.slice" "${subsystem}"
|
||||
done
|
||||
}
|
||||
|
||||
|
|
@ -287,18 +392,15 @@ fix_kmsg() {
|
|||
}
|
||||
|
||||
select_iptables() {
|
||||
# based on: https://github.com/kubernetes/kubernetes/blob/ffe93b3979486feb41a0f85191bdd189cbd56ccc/build/debian-iptables/iptables-wrapper
|
||||
local mode=nft
|
||||
num_legacy_lines=$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep '^-' | wc -l || true)
|
||||
if [ "${num_legacy_lines}" -ge 10 ]; then
|
||||
# based on: https://github.com/kubernetes-sigs/iptables-wrappers/blob/97b01f43a8e8db07840fc4b95e833a37c0d36b12/iptables-wrapper-installer.sh
|
||||
local mode num_legacy_lines num_nft_lines
|
||||
num_legacy_lines=$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep -c '^-' || true)
|
||||
num_nft_lines=$( (timeout 5 sh -c "iptables-nft-save; ip6tables-nft-save" || true) 2>/dev/null | grep -c '^-' || true)
|
||||
if [ "${num_legacy_lines}" -ge "${num_nft_lines}" ]; then
|
||||
mode=legacy
|
||||
else
|
||||
num_nft_lines=$( (timeout 5 sh -c "iptables-nft-save; ip6tables-nft-save" || true) 2>/dev/null | grep '^-' | wc -l || true)
|
||||
if [ "${num_legacy_lines}" -ge "${num_nft_lines}" ]; then
|
||||
mode=legacy
|
||||
fi
|
||||
mode=nft
|
||||
fi
|
||||
|
||||
echo "INFO: setting iptables to detected mode: ${mode}" >&2
|
||||
update-alternatives --set iptables "/usr/sbin/iptables-${mode}" > /dev/null
|
||||
update-alternatives --set ip6tables "/usr/sbin/ip6tables-${mode}" > /dev/null
|
||||
|
|
|
|||
|
|
@ -1,34 +1,86 @@
|
|||
[
|
||||
{
|
||||
"name": "v1.24.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "f8b0a2d0ca7435e98fff553702ed4977e33b301d0316ee4512d28b485701613e",
|
||||
"linux": "8cd17a9fb5c73f9cab97754bd6ed725cb2b1fe9faa02f7f75a9cf5566b6f8716",
|
||||
"windows": "ba87d2ef329db940890f8970afce1a6654814e0e427f91b9d5347496d4e7d1a3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v1.22.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94",
|
||||
"linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5",
|
||||
"windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v1.21.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6",
|
||||
"linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874",
|
||||
"windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v1.20.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651",
|
||||
"linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1",
|
||||
"windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c"
|
||||
}
|
||||
}
|
||||
]
|
||||
{
|
||||
"checksums": {
|
||||
"amd64": {
|
||||
"darwin": "a1cbd7847462f6c693e6df13033036ea2401ac4c9cac3186e0c494022021defa",
|
||||
"linux": "8dc0f14a1c6db1b009128ad1a7fab28a49c29dd46f8d90eb1429dacda8e8d948",
|
||||
"windows": "a327ccc5009ba45b7c2f668af110c9b414ae847c23e4a38b812ef69de9e396fb"
|
||||
},
|
||||
"arm": {
|
||||
"linux": "19c9b82491ff02cf1844ae2ea705d8970882d1f40d96ce0777f7084cb7aaa7ac"
|
||||
},
|
||||
"arm64": {
|
||||
"darwin": "ab973bb05305d725c194c358f723504f4a2891a035482fc352f2cfbc3654a526",
|
||||
"linux": "8ef60a1369080fe1b12831b307dfb7b87e2b6f100c47226468f6eb0b84ea82aa"
|
||||
},
|
||||
"ppc64le": {
|
||||
"linux": "2018960bf1918b4d80ef63b236d9c107f5747799432c45a10c1b262e487c2203"
|
||||
},
|
||||
"s390x": {
|
||||
"linux": "4325510e5dd9955c13a3ce9fd273745dd55bd9ab6910c6667b5feb0f912ce28b"
|
||||
},
|
||||
"darwin": "a1cbd7847462f6c693e6df13033036ea2401ac4c9cac3186e0c494022021defa",
|
||||
"linux": "8dc0f14a1c6db1b009128ad1a7fab28a49c29dd46f8d90eb1429dacda8e8d948",
|
||||
"windows": "a327ccc5009ba45b7c2f668af110c9b414ae847c23e4a38b812ef69de9e396fb"
|
||||
},
|
||||
"name": "v1.26.0-beta.1"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"amd64": {
|
||||
"darwin": "96a8cbb6fe8e8fd629fd49cd222358ceaee2fbac946f86da9113925d3f8d685b",
|
||||
"linux": "c4576588f6c746ffcf9d8f768a0ca929b63d15652c230e15163f8ccf212bcae5",
|
||||
"windows": "09c83da4d1e1712175a199452076e1cdb77662d15725da8fc0704528f15e4d7a"
|
||||
},
|
||||
"arm": {
|
||||
"linux": "baaaa5bb066faea551158551aad5e9e547fbc05769e59adec54433118a6a5dc6"
|
||||
},
|
||||
"arm64": {
|
||||
"darwin": "ef7dfe41df9b8ebb5a5f836c9255d355ba9e664cd2e8db6f5377d24b2b2ceb14",
|
||||
"linux": "27561719a6164079966bba0648ce704140462b46cac9257cb2f98367f674208a"
|
||||
},
|
||||
"ppc64le": {
|
||||
"linux": "2747ed3a01d5d2c3fa576acc5a1e3aa431cebec0e4f92e498b53ce9e892f6c6c"
|
||||
},
|
||||
"s390x": {
|
||||
"linux": "dc8f2475e87eafbedfcabad2bb56b283c7151529029dd1bde749736dd56d9eab"
|
||||
},
|
||||
"darwin": "96a8cbb6fe8e8fd629fd49cd222358ceaee2fbac946f86da9113925d3f8d685b",
|
||||
"linux": "c4576588f6c746ffcf9d8f768a0ca929b63d15652c230e15163f8ccf212bcae5",
|
||||
"windows": "09c83da4d1e1712175a199452076e1cdb77662d15725da8fc0704528f15e4d7a"
|
||||
},
|
||||
"name": "v1.26.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "f8b0a2d0ca7435e98fff553702ed4977e33b301d0316ee4512d28b485701613e",
|
||||
"linux": "8cd17a9fb5c73f9cab97754bd6ed725cb2b1fe9faa02f7f75a9cf5566b6f8716",
|
||||
"windows": "ba87d2ef329db940890f8970afce1a6654814e0e427f91b9d5347496d4e7d1a3"
|
||||
},
|
||||
"name": "v1.24.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94",
|
||||
"linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5",
|
||||
"windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1"
|
||||
},
|
||||
"name": "v1.22.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6",
|
||||
"linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874",
|
||||
"windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135"
|
||||
},
|
||||
"name": "v1.21.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651",
|
||||
"linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1",
|
||||
"windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c"
|
||||
},
|
||||
"name": "v1.20.0-beta.0"
|
||||
}
|
||||
]
|
||||
|
|
@ -1,34 +1,50 @@
|
|||
[
|
||||
{
|
||||
"name": "v1.24.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "f8b0a2d0ca7435e98fff553702ed4977e33b301d0316ee4512d28b485701613e",
|
||||
"linux": "8cd17a9fb5c73f9cab97754bd6ed725cb2b1fe9faa02f7f75a9cf5566b6f8716",
|
||||
"windows": "ba87d2ef329db940890f8970afce1a6654814e0e427f91b9d5347496d4e7d1a3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v1.22.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94",
|
||||
"linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5",
|
||||
"windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v1.21.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6",
|
||||
"linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874",
|
||||
"windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "v1.20.0-beta.0",
|
||||
"checksums": {
|
||||
"darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651",
|
||||
"linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1",
|
||||
"windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c"
|
||||
}
|
||||
}
|
||||
]
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "a1cbd7847462f6c693e6df13033036ea2401ac4c9cac3186e0c494022021defa",
|
||||
"linux": "8dc0f14a1c6db1b009128ad1a7fab28a49c29dd46f8d90eb1429dacda8e8d948",
|
||||
"windows": "a327ccc5009ba45b7c2f668af110c9b414ae847c23e4a38b812ef69de9e396fb"
|
||||
},
|
||||
"name": "v1.26.0-beta.1"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "96a8cbb6fe8e8fd629fd49cd222358ceaee2fbac946f86da9113925d3f8d685b",
|
||||
"linux": "c4576588f6c746ffcf9d8f768a0ca929b63d15652c230e15163f8ccf212bcae5",
|
||||
"windows": "09c83da4d1e1712175a199452076e1cdb77662d15725da8fc0704528f15e4d7a"
|
||||
},
|
||||
"name": "v1.26.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "f8b0a2d0ca7435e98fff553702ed4977e33b301d0316ee4512d28b485701613e",
|
||||
"linux": "8cd17a9fb5c73f9cab97754bd6ed725cb2b1fe9faa02f7f75a9cf5566b6f8716",
|
||||
"windows": "ba87d2ef329db940890f8970afce1a6654814e0e427f91b9d5347496d4e7d1a3"
|
||||
},
|
||||
"name": "v1.24.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94",
|
||||
"linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5",
|
||||
"windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1"
|
||||
},
|
||||
"name": "v1.22.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6",
|
||||
"linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874",
|
||||
"windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135"
|
||||
},
|
||||
"name": "v1.21.0-beta.0"
|
||||
},
|
||||
{
|
||||
"checksums": {
|
||||
"darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651",
|
||||
"linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1",
|
||||
"windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c"
|
||||
},
|
||||
"name": "v1.20.0-beta.0"
|
||||
}
|
||||
]
|
||||
62
go.mod
62
go.mod
|
|
@ -45,6 +45,7 @@ require (
|
|||
github.com/juju/version v0.0.0-20180108022336-b64dbd566305 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
|
||||
github.com/klauspost/cpuid v1.2.0
|
||||
github.com/machine-drivers/docker-machine-driver-qemu v0.1.1-0.20220331133007-0324171328f7
|
||||
github.com/machine-drivers/docker-machine-driver-vmware v0.1.5
|
||||
github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24
|
||||
github.com/mattn/go-isatty v0.0.14
|
||||
|
|
@ -74,37 +75,38 @@ require (
|
|||
golang.org/x/build v0.0.0-20190927031335-2835ba2e683f
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
|
||||
golang.org/x/exp v0.0.0-20210220032938-85be41e4509f
|
||||
golang.org/x/mod v0.5.1
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3
|
||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad
|
||||
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
golang.org/x/text v0.3.7
|
||||
gonum.org/v1/plot v0.11.0
|
||||
google.golang.org/api v0.77.0
|
||||
google.golang.org/api v0.79.0
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
k8s.io/api v0.23.6
|
||||
k8s.io/apimachinery v0.23.6
|
||||
k8s.io/client-go v0.23.6
|
||||
k8s.io/api v0.24.0
|
||||
k8s.io/apimachinery v0.24.0
|
||||
k8s.io/client-go v0.24.0
|
||||
k8s.io/cluster-bootstrap v0.0.0
|
||||
k8s.io/component-base v0.23.6
|
||||
k8s.io/component-base v0.24.0
|
||||
k8s.io/klog/v2 v2.60.1
|
||||
k8s.io/kubectl v0.23.6
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed
|
||||
libvirt.org/go/libvirt v1.8002.0
|
||||
k8s.io/kubectl v0.24.0
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
|
||||
libvirt.org/go/libvirt v1.8003.0
|
||||
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/Xuanwo/go-locale v1.1.0
|
||||
github.com/docker/go-connections v0.4.0
|
||||
github.com/opencontainers/runc v1.0.2
|
||||
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0
|
||||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go v0.100.2 // indirect
|
||||
cloud.google.com/go/compute v1.6.0 // indirect
|
||||
cloud.google.com/go/compute v1.6.1 // indirect
|
||||
cloud.google.com/go/iam v0.3.0 // indirect
|
||||
cloud.google.com/go/monitoring v1.1.0 // indirect
|
||||
cloud.google.com/go/trace v1.2.0 // indirect
|
||||
|
|
@ -112,6 +114,8 @@ require (
|
|||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect
|
||||
github.com/Microsoft/go-winio v0.5.0 // indirect
|
||||
github.com/PuerkitoBio/purell v1.1.1 // indirect
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
||||
github.com/VividCortex/ewma v1.1.1 // indirect
|
||||
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect
|
||||
github.com/aws/aws-sdk-go v1.38.49 // indirect
|
||||
|
|
@ -122,11 +126,14 @@ require (
|
|||
github.com/containerd/cgroups v1.0.1 // indirect
|
||||
github.com/containerd/containerd v1.5.2 // indirect
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.7.0 // indirect
|
||||
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
||||
github.com/cyphar/filepath-securejoin v0.2.2 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/docker/cli v20.10.7+incompatible // indirect
|
||||
github.com/docker/distribution v2.7.1+incompatible // indirect
|
||||
github.com/docker/distribution v2.8.1+incompatible // indirect
|
||||
github.com/docker/docker-credential-helpers v0.6.3 // indirect
|
||||
github.com/emicklei/go-restful v2.9.5+incompatible // indirect
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
||||
github.com/fatih/color v1.13.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.5.1 // indirect
|
||||
|
|
@ -135,16 +142,20 @@ require (
|
|||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||
github.com/go-openapi/jsonreference v0.19.5 // indirect
|
||||
github.com/go-openapi/swag v0.19.14 // indirect
|
||||
github.com/go-pdf/fpdf v0.6.0 // indirect
|
||||
github.com/godbus/dbus/v5 v5.0.4 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/golang/snappy v0.0.3 // indirect
|
||||
github.com/google/gnostic v0.5.7-v3refs // indirect
|
||||
github.com/google/go-querystring v1.0.0 // indirect
|
||||
github.com/google/gofuzz v1.1.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.3.0 // indirect
|
||||
github.com/googleapis/gnostic v0.5.5 // indirect
|
||||
github.com/googleapis/go-type-adapters v1.0.0 // indirect
|
||||
github.com/gookit/color v1.4.2 // indirect
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||
|
|
@ -154,10 +165,12 @@ require (
|
|||
github.com/imdario/mergo v0.3.11 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.13.0 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
||||
github.com/magiconair/properties v1.8.6 // indirect
|
||||
github.com/mailru/easyjson v0.7.6 // indirect
|
||||
github.com/mattn/go-colorable v0.1.12 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.13 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
|
||||
|
|
@ -168,18 +181,19 @@ require (
|
|||
github.com/mitchellh/mapstructure v1.4.3 // indirect
|
||||
github.com/moby/spdystream v0.2.0 // indirect
|
||||
github.com/moby/sys/mountinfo v0.4.1 // indirect
|
||||
github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 // indirect
|
||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/opencontainers/image-spec v1.0.1 // indirect
|
||||
github.com/opencontainers/runc v1.0.2 // indirect
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect
|
||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||
github.com/prometheus/client_golang v1.11.0 // indirect
|
||||
github.com/prometheus/client_golang v1.12.1 // indirect
|
||||
github.com/prometheus/client_model v0.2.0 // indirect
|
||||
github.com/prometheus/common v0.28.0 // indirect
|
||||
github.com/prometheus/procfs v0.6.0 // indirect
|
||||
github.com/prometheus/common v0.32.1 // indirect
|
||||
github.com/prometheus/procfs v0.7.3 // indirect
|
||||
github.com/prometheus/prometheus v2.5.0+incompatible // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
|
|
@ -197,18 +211,18 @@ require (
|
|||
go.uber.org/multierr v1.6.0 // indirect
|
||||
go.uber.org/zap v1.19.0 // indirect
|
||||
golang.org/x/image v0.0.0-20220302094943-723b81ca9867 // indirect
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 // indirect
|
||||
google.golang.org/grpc v1.45.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 // indirect
|
||||
google.golang.org/grpc v1.46.0 // indirect
|
||||
google.golang.org/protobuf v1.28.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect
|
||||
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect
|
||||
sigs.k8s.io/yaml v1.2.0 // indirect
|
||||
)
|
||||
|
|
|
|||
146
go.sum
146
go.sum
|
|
@ -41,8 +41,9 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7
|
|||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
||||
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
||||
cloud.google.com/go/compute v1.6.0 h1:XdQIN5mdPTSBVwSIVDuY5e8ZzVAccsHvD3qTEz4zIps=
|
||||
cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=
|
||||
cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc=
|
||||
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||
|
|
@ -73,7 +74,6 @@ git.sr.ht/~sbinet/gg v0.3.1 h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik=
|
|||
git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
|
||||
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||
github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||
|
|
@ -136,8 +136,10 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
|
|||
github.com/Parallels/docker-machine-parallels/v2 v2.0.1 h1:3Rj+4tcm/UqMU5g2bLJmpxD0ssn1BB5am4Cd6yUDbVI=
|
||||
github.com/Parallels/docker-machine-parallels/v2 v2.0.1/go.mod h1:NKwI5KryEmEHMZVj80t9JQcfXWZp4/ZYNBuw4C5sQ9E=
|
||||
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
|
||||
github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM=
|
||||
|
|
@ -164,6 +166,8 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
|
|||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
|
||||
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
||||
github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
|
||||
|
|
@ -232,6 +236,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP
|
|||
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
|
||||
|
|
@ -334,6 +339,7 @@ github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7
|
|||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
|
||||
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
|
||||
github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
|
||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
|
|
@ -345,6 +351,7 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do
|
|||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
|
||||
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
|
||||
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
|
||||
github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
|
||||
github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
|
||||
|
|
@ -363,8 +370,10 @@ github.com/docker/cli v20.10.7+incompatible h1:pv/3NqibQKphWZiAskMzdz8w0PRbtTaEB
|
|||
github.com/docker/cli v20.10.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||
github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
|
||||
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
||||
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v0.0.0-20180621001606-093424bec097/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20181225093023-5ddb1d410a8b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20190115220918-5ec31380a5d3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
|
|
@ -391,6 +400,7 @@ github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e/go.mod h1:Ro8st/El
|
|||
github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2 h1:dWB6v3RcOy03t/bUadywsbyrQwCqZeNIEX6M1OtSZOM=
|
||||
github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8=
|
||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
|
||||
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
|
|
@ -400,6 +410,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
|
|||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
|
|
@ -464,16 +475,19 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU
|
|||
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
|
||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
|
||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
|
||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
|
||||
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
|
||||
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
|
||||
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
|
||||
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
|
||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
|
||||
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
|
||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng=
|
||||
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
|
||||
github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
|
||||
github.com/go-pdf/fpdf v0.6.0 h1:MlgtGIfsdMEEQJr2le6b/HNr1ZlQwxyWr77r2aj2U/8=
|
||||
|
|
@ -483,6 +497,7 @@ github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblf
|
|||
github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
|
||||
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
|
||||
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
|
||||
github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
|
||||
|
|
@ -539,6 +554,8 @@ github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//
|
|||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
|
||||
github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
|
||||
github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
|
|
@ -604,7 +621,6 @@ github.com/googleapis/gax-go/v2 v2.3.0 h1:nRJtk3y8Fm770D42QV6T90ZnvFZyk7agSo3Q+Z
|
|||
github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=
|
||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
||||
github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
|
||||
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
|
||||
github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA=
|
||||
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
|
||||
|
|
@ -695,6 +711,7 @@ github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f h1:tL0
|
|||
github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f/go.mod h1:+c1/kUpg2zlkoWqTOvzDs36Wpbm3Gd1nlmtXAEB0WGU=
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
|
|
@ -762,6 +779,8 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9
|
|||
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
github.com/machine-drivers/docker-machine-driver-qemu v0.1.1-0.20220331133007-0324171328f7 h1:f9xnae3LZMVUXFJtqy1xuwQfwX+NQUS5LelCLM3RBxg=
|
||||
github.com/machine-drivers/docker-machine-driver-qemu v0.1.1-0.20220331133007-0324171328f7/go.mod h1:yhDK3dYTcmZljNMDPXfmVRwSsHx1EoaEL32v7BANaYs=
|
||||
github.com/machine-drivers/docker-machine-driver-vmware v0.1.5 h1:51GqJ84u9EBATnn8rWsHNavcuRPlCLnDmvjzZVuliwY=
|
||||
github.com/machine-drivers/docker-machine-driver-vmware v0.1.5/go.mod h1:dTnTzUH3uzhMo0ddV1zRjGYWcVhQWwqiHPxz5l+HPd0=
|
||||
github.com/machine-drivers/machine v0.7.1-0.20211105063445-78a84df85426 h1:gVDPCmqwvHQ4ox/9svvnkomYJAAiV59smbPdTK4DIm4=
|
||||
|
|
@ -774,6 +793,7 @@ github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN
|
|||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
|
||||
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||
github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
|
||||
github.com/maruel/panicparse v1.5.0/go.mod h1:aOutY/MUjdj80R0AEVI9qE2zHqig+67t2ffUDDiLzAM=
|
||||
|
|
@ -840,8 +860,8 @@ github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh
|
|||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
|
||||
github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0=
|
||||
github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A=
|
||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
|
||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
|
|
@ -854,6 +874,7 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
|||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
|
||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
|
|
@ -906,6 +927,7 @@ github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/
|
|||
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
|
||||
github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
|
||||
|
|
@ -958,8 +980,9 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
|
|||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||
github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
|
||||
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
||||
github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
|
||||
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
|
||||
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
|
|
@ -974,8 +997,8 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+
|
|||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
|
||||
github.com/prometheus/common v0.28.0 h1:vGVfV9KrDTvWt5boZO0I19g2E3CsWfpPPKZM9dt3mEw=
|
||||
github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
|
||||
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
|
||||
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
|
||||
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
|
|
@ -986,8 +1009,9 @@ github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa
|
|||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
|
||||
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/prometheus v2.5.0+incompatible h1:7QPitgO2kOFG8ecuRn9O/4L9+10He72rVRJvMXrE9Hg=
|
||||
github.com/prometheus/prometheus v2.5.0+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
|
|
@ -1020,6 +1044,7 @@ github.com/shirou/gopsutil/v3 v3.22.4 h1:srAQaiX6jX/cYL6q29aE0m8lOskT9CurZ9N61YR
|
|||
github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||
github.com/sirupsen/logrus v1.0.4/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
|
|
@ -1124,7 +1149,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
|
||||
|
|
@ -1185,6 +1210,7 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
|||
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
|
||||
golang.org/x/build v0.0.0-20190927031335-2835ba2e683f h1:hXVePvSFG7tPGX4Pwk1d10ePFfoTCc0QmISfpKOHsS8=
|
||||
golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM=
|
||||
golang.org/x/crypto v0.0.0-20170704135851-51714a8c4ac1/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
|
|
@ -1206,8 +1232,9 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh
|
|||
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
|
|
@ -1261,8 +1288,8 @@ golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hM
|
|||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
|
||||
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
|
|
@ -1317,13 +1344,14 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
|
|||
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
|
@ -1360,6 +1388,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
|
@ -1424,7 +1453,6 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
|
@ -1460,26 +1488,26 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
|
||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60=
|
||||
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
@ -1497,8 +1525,9 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
|
@ -1564,8 +1593,8 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff h1:VX/uD7MK0AHXGiScH3fsieUQUcpmRERPDYtqZdJnA+Q=
|
||||
golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM=
|
||||
golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717 h1:hI3jKY4Hpf63ns040onEbB3dAkR/H/P83hw1TG8dD3Y=
|
||||
golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
|
@ -1614,8 +1643,9 @@ google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQ
|
|||
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
|
||||
google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
|
||||
google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
|
||||
google.golang.org/api v0.77.0 h1:msijLTxwkJ7Jub5tv9KBVCKtHOQwnvnvkX7ErFFCVxY=
|
||||
google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
|
||||
google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
|
||||
google.golang.org/api v0.79.0 h1:vaOcm0WdXvhGkci9a0+CcQVZqSRjN8ksSBlWv99f8Pg=
|
||||
google.golang.org/api v0.79.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
|
@ -1696,6 +1726,7 @@ google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ6
|
|||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
|
|
@ -1706,8 +1737,10 @@ google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2I
|
|||
google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 h1:myaecH64R0bIEDjNORIel4iXubqzaHU1K2z8ajBwWcM=
|
||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||
google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo=
|
||||
google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
|
||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
|
|
@ -1739,8 +1772,9 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
|
|||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||
google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=
|
||||
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
|
||||
google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=
|
||||
google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
|
||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
|
|
@ -1818,77 +1852,77 @@ k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
|
|||
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
|
||||
k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
|
||||
k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
|
||||
k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw=
|
||||
k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g=
|
||||
k8s.io/api v0.24.0 h1:J0hann2hfxWr1hinZIDefw7Q96wmCBx6SSB8IY0MdDg=
|
||||
k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I=
|
||||
k8s.io/apimachinery v0.19.1/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
|
||||
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
|
||||
k8s.io/apimachinery v0.22.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0=
|
||||
k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ=
|
||||
k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
|
||||
k8s.io/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ=
|
||||
k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
|
||||
k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
|
||||
k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
|
||||
k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
|
||||
k8s.io/cli-runtime v0.23.6/go.mod h1:0Z3VR/HRIFKiLzKIAkm1mPtcH98GT/fXu2IU0E4vFmw=
|
||||
k8s.io/cli-runtime v0.24.0/go.mod h1:9XxoZDsEkRFUThnwqNviqzljtT/LdHtNWvcNFrAXl0A=
|
||||
k8s.io/client-go v0.19.1/go.mod h1:AZOIVSI9UUtQPeJD3zJFp15CEhSjRgAuQP5PWRJrCIQ=
|
||||
k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
|
||||
k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
|
||||
k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
|
||||
k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ=
|
||||
k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4=
|
||||
k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U=
|
||||
k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw=
|
||||
k8s.io/cluster-bootstrap v0.22.4 h1:2ZhV/1K4GiCrnmDHHbBnN3bERWn+Nxrtxmxp6uYYThI=
|
||||
k8s.io/cluster-bootstrap v0.22.4/go.mod h1:fTQZ6u9G6fg2LHhB8nEgZLnXIhCDSRYuLUUS5pgW8RY=
|
||||
k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk=
|
||||
k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
|
||||
k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
|
||||
k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
|
||||
k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
|
||||
k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8=
|
||||
k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0=
|
||||
k8s.io/component-helpers v0.23.6/go.mod h1:kgvl6wvnYg9oebklLPpbW8UhvAZ9Qds26/RANEbny/8=
|
||||
k8s.io/component-base v0.24.0 h1:h5jieHZQoHrY/lHG+HyrSbJeyfuitheBvqvKwKHVC0g=
|
||||
k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA=
|
||||
k8s.io/component-helpers v0.24.0/go.mod h1:Q2SlLm4h6g6lPTC9GMMfzdywfLSvJT2f1hOnnjaWD8c=
|
||||
k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
|
||||
k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
|
||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc=
|
||||
k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
|
||||
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
|
||||
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4=
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
|
||||
k8s.io/kubectl v0.23.6 h1:ajzrqj88GqlH/gpscMCts+mKNeSJprpkWJEHO8CR2Ss=
|
||||
k8s.io/kubectl v0.23.6/go.mod h1:mMtJhc2QtQiSfvIQoMEUIjGHtZuP4uxMy/ees6j6zx8=
|
||||
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU=
|
||||
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk=
|
||||
k8s.io/kubectl v0.24.0 h1:nA+WtMLVdXUs4wLogGd1mPTAesnLdBpCVgCmz3I7dXo=
|
||||
k8s.io/kubectl v0.24.0/go.mod h1:pdXkmCyHiRTqjYfyUJiXtbVNURhv0/Q1TyRhy2d5ic0=
|
||||
k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
|
||||
k8s.io/metrics v0.23.6/go.mod h1:Fm9VzVMZ7KVEEeLStF2y3XogfcDwpGyI15o1xB6PbYk=
|
||||
k8s.io/metrics v0.24.0/go.mod h1:jrLlFGdKl3X+szubOXPG0Lf2aVxuV3QJcbsgVRAM6fI=
|
||||
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE=
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
libvirt.org/go/libvirt v1.8002.0 h1:X8gz2Sa1ek4S5FznpDpeRz6JpNb7NdkfzTii5GMIwDY=
|
||||
libvirt.org/go/libvirt v1.8002.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
libvirt.org/go/libvirt v1.8003.0 h1:2puEq21MkIiOK6EboeRp7dLW1CdPsSJAYPWufH0CESg=
|
||||
libvirt.org/go/libvirt v1.8003.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s=
|
||||
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
|
||||
sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8=
|
||||
sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ=
|
||||
sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io=
|
||||
sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
|
||||
sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI=
|
||||
sigs.k8s.io/kustomize/cmd/config v0.10.6/go.mod h1:/S4A4nUANUa4bZJ/Edt7ZQTyKOY9WCER0uBS1SW2Rco=
|
||||
sigs.k8s.io/kustomize/kustomize/v4 v4.5.4/go.mod h1:Zo/Xc5FKD6sHl0lilbrieeGeZHVYCA4BzxeAaLI05Bg=
|
||||
sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2ECa78Ht/kEg=
|
||||
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 h1:IKsKAnscMyIOqyl8s8V7guTcx0QBEa6OT57EPgAgpmM=
|
||||
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0/go.mod h1:DhZ52sQMJHW21+JXyA2LRUPRIxKnrNrwh+QFV+2tVA4=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
|
|
|
|||
|
|
@ -118,7 +118,13 @@ Window::Window()
|
|||
|
||||
setWindowTitle(tr("minikube"));
|
||||
setWindowIcon(*trayIconIcon);
|
||||
setupUpdateChecking();
|
||||
}
|
||||
|
||||
void Window::setupUpdateChecking()
|
||||
{
|
||||
checkForUpdates();
|
||||
connect(this, &Window::updateCheck, this, &Window::checkForUpdates);
|
||||
}
|
||||
|
||||
QProcessEnvironment Window::setMacEnv()
|
||||
|
|
@ -235,6 +241,7 @@ void Window::createActions()
|
|||
|
||||
restoreAction = new QAction(tr("&Restore"), this);
|
||||
connect(restoreAction, &QAction::triggered, this, &Window::restoreWindow);
|
||||
connect(restoreAction, &QAction::triggered, this, &Window::updateCheck);
|
||||
|
||||
quitAction = new QAction(tr("&Quit"), this);
|
||||
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
|
||||
|
|
@ -593,7 +600,7 @@ void Window::updateTrayActions(Cluster cluster)
|
|||
bool isPaused = cluster.status() == "Paused";
|
||||
pauseAction->setEnabled(isRunning || isPaused);
|
||||
stopAction->setEnabled(isRunning || isPaused);
|
||||
pauseAction->setText(getPauseLabel(isRunning));
|
||||
pauseAction->setText(getPauseLabel(isPaused));
|
||||
startAction->setText(getStartLabel(isRunning));
|
||||
}
|
||||
|
||||
|
|
@ -711,6 +718,7 @@ bool Window::sendMinikubeCommand(QStringList cmds, QString &text)
|
|||
qDebug() << process->readAllStandardError();
|
||||
}
|
||||
delete process;
|
||||
emit updateCheck();
|
||||
return success;
|
||||
}
|
||||
|
||||
|
|
@ -1128,8 +1136,44 @@ void Window::checkForMinikube()
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static bool checkedForUpdateRecently()
|
||||
{
|
||||
QString filePath = QStandardPaths::locate(QStandardPaths::HomeLocation, "/.minikube-gui/last_update_check");
|
||||
if (filePath == "") {
|
||||
return false;
|
||||
}
|
||||
QFile file(filePath);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
return false;
|
||||
}
|
||||
QTextStream in(&file);
|
||||
QString line = in.readLine();
|
||||
QDateTime nextCheck = QDateTime::fromString(line).addSecs(60*60*24);
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
return nextCheck > now;
|
||||
}
|
||||
|
||||
static void logUpdateCheck()
|
||||
{
|
||||
QDir dir = QDir(QDir::homePath() + "/.minikube-gui");
|
||||
if (!dir.exists()) {
|
||||
dir.mkpath(".");
|
||||
}
|
||||
QString filePath = dir.filePath("last_update_check");
|
||||
QFile file(filePath);
|
||||
if (!file.open(QIODevice::WriteOnly)) {
|
||||
return;
|
||||
}
|
||||
QTextStream stream(&file);
|
||||
stream << QDateTime::currentDateTime().toString() << Qt::endl;
|
||||
}
|
||||
|
||||
void Window::checkForUpdates()
|
||||
{
|
||||
if (checkedForUpdateRecently()) {
|
||||
return;
|
||||
}
|
||||
logUpdateCheck();
|
||||
QString releases = getRequest("https://storage.googleapis.com/minikube-gui/releases.json");
|
||||
QJsonObject latestRelease =
|
||||
QJsonDocument::fromJson(releases.toUtf8()).array().first().toObject();
|
||||
|
|
|
|||
|
|
@ -97,6 +97,9 @@ public:
|
|||
protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
signals:
|
||||
void updateCheck();
|
||||
|
||||
private slots:
|
||||
void messageClicked();
|
||||
void updateButtons();
|
||||
|
|
@ -215,6 +218,7 @@ private:
|
|||
void checkForUpdates();
|
||||
QString getRequest(QString url);
|
||||
void notifyUpdate(QString latest, QString link);
|
||||
void setupUpdateChecking();
|
||||
};
|
||||
|
||||
#endif // QT_NO_SYSTEMTRAYICON
|
||||
|
|
|
|||
|
|
@ -61,8 +61,10 @@ else
|
|||
# Copy the most recently built PR ISO for release
|
||||
CURRENT_ISO_VERSION=$(egrep "ISO_VERSION \?=" Makefile | cut -d " " -f 3)
|
||||
CURRENT_ISO_BUCKET=$(egrep "isoBucket :=" pkg/minikube/download/iso.go | cut -d " " -f 3 | cut -d '"' -f 2)
|
||||
gsutil cp gs://${CURRENT_ISO_BUCKET}/minikube-${CURRENT_ISO_VERSION}.iso gs://${ISO_BUCKET}/minikube-${ISO_VERSION}.iso
|
||||
gsutil cp gs://${CURRENT_ISO_BUCKET}/minikube-${CURRENT_ISO_VERSION}.iso.sha256 gs://${ISO_BUCKET}/minikube-${ISO_VERSION}.iso.sha256
|
||||
gsutil cp gs://${CURRENT_ISO_BUCKET}/minikube-${CURRENT_ISO_VERSION}-amd64.iso gs://${ISO_BUCKET}/minikube-${ISO_VERSION}-amd64.iso
|
||||
gsutil cp gs://${CURRENT_ISO_BUCKET}/minikube-${CURRENT_ISO_VERSION}-amd64.iso.sha256 gs://${ISO_BUCKET}/minikube-${ISO_VERSION}-amd64.iso.sha256
|
||||
gsutil cp gs://${CURRENT_ISO_BUCKET}/minikube-${CURRENT_ISO_VERSION}-arm64.iso gs://${ISO_BUCKET}/minikube-${ISO_VERSION}-arm64.iso
|
||||
gsutil cp gs://${CURRENT_ISO_BUCKET}/minikube-${CURRENT_ISO_VERSION}-arm64.iso.sha256 gs://${ISO_BUCKET}/minikube-${ISO_VERSION}-arm64.iso.sha256
|
||||
fi
|
||||
|
||||
git config user.name "minikube-bot"
|
||||
|
|
|
|||
|
|
@ -100,6 +100,13 @@ sudo ARCH="$ARCH" ./installers/check_install_docker.sh || true
|
|||
# install gotestsum if not present
|
||||
GOROOT="/usr/local/go" ./installers/check_install_gotestsum.sh || true
|
||||
|
||||
# install cron jobs
|
||||
if [ "$OS" == "linux" ]; then
|
||||
source ./installers/check_install_linux_crons.sh
|
||||
else
|
||||
source ./installers/check_install_osx_crons.sh
|
||||
fi
|
||||
|
||||
# let's just clean all docker artifacts up
|
||||
docker system prune --force --volumes || true
|
||||
docker system df || true
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2022 The Kubernetes Authors All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
go clean -modcache
|
||||
|
|
@ -22,7 +22,7 @@ if (($# < 1)); then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_TO_INSTALL=1.18.1
|
||||
VERSION_TO_INSTALL=1.18.2
|
||||
INSTALL_PATH=${1}
|
||||
|
||||
function current_arch() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2022 The Kubernetes Authors All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP AND REBOOT"
|
||||
sudo install cron/cleanup_go_modules.sh /etc/cron.monthly/cleanup_go_modules || echo "FAILED TO INSTALL GO MODULES CLEANUP"
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2022 The Kubernetes Authors All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP AND REBOOT"
|
||||
echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab
|
||||
install cron/cleanup_go_modules.sh $HOME/cleanup_go_modules.sh || echo "FAILED TO INSTALL GO MODULES CLEANUP"
|
||||
echo "0 0 1 * * $HOME/cleanup_go_modules.sh" | crontab
|
||||
crontab -l
|
||||
|
|
@ -31,9 +31,6 @@ DRIVER="docker"
|
|||
JOB_NAME="Docker_Linux"
|
||||
CONTAINER_RUNTIME="docker"
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
# removing possible left over docker containers from previous runs
|
||||
docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true
|
||||
|
||||
|
|
|
|||
|
|
@ -22,18 +22,17 @@
|
|||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
ARCH="arm64"
|
||||
OS="linux"
|
||||
DRIVER="docker"
|
||||
JOB_NAME="$JOB_NAME"
|
||||
CONTAINER_RUNTIME="docker"
|
||||
EXTERNAL="yes"
|
||||
|
||||
# removing possible left over docker containers from previous runs
|
||||
docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true
|
||||
|
||||
ARCH="arm64" \
|
||||
OS="linux" \
|
||||
DRIVER="docker" \
|
||||
JOB_NAME="$JOB_NAME" \
|
||||
CONTAINER_RUNTIME="docker" \
|
||||
EXTERNAL="yes" \
|
||||
source ./common.sh
|
||||
|
|
|
|||
|
|
@ -31,11 +31,6 @@ DRIVER="docker"
|
|||
JOB_NAME="Docker_Linux_containerd"
|
||||
CONTAINER_RUNTIME="containerd"
|
||||
|
||||
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
# removing possible left over docker containers from previous runs
|
||||
docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true
|
||||
|
||||
|
|
|
|||
|
|
@ -22,18 +22,17 @@
|
|||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
ARCH="arm64"
|
||||
OS="linux"
|
||||
DRIVER="docker"
|
||||
JOB_NAME="$JOB_NAME"
|
||||
CONTAINER_RUNTIME="containerd"
|
||||
EXTERNAL="yes"
|
||||
|
||||
# removing possible left over docker containers from previous runs
|
||||
docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true
|
||||
|
||||
ARCH="arm64" \
|
||||
OS="linux" \
|
||||
DRIVER="docker" \
|
||||
JOB_NAME="$JOB_NAME" \
|
||||
CONTAINER_RUNTIME="containerd" \
|
||||
EXTERNAL="yes" \
|
||||
source ./common.sh
|
||||
|
|
|
|||
|
|
@ -31,11 +31,6 @@ DRIVER="docker"
|
|||
JOB_NAME="Docker_Linux_crio"
|
||||
CONTAINER_RUNTIME="crio"
|
||||
|
||||
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
# removing possible left over docker containers from previous runs
|
||||
docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true
|
||||
|
||||
|
|
|
|||
|
|
@ -22,18 +22,17 @@
|
|||
# COMMIT: Actual commit ID from upstream build
|
||||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
ARCH="arm64"
|
||||
OS="linux"
|
||||
DRIVER="docker"
|
||||
JOB_NAME="$JOB_NAME"
|
||||
CONTAINER_RUNTIME="crio"
|
||||
EXTERNAL="yes"
|
||||
|
||||
# removing possible left over docker containers from previous runs
|
||||
docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true
|
||||
|
||||
ARCH="arm64" \
|
||||
OS="linux" \
|
||||
DRIVER="docker" \
|
||||
JOB_NAME="$JOB_NAME" \
|
||||
CONTAINER_RUNTIME="crio" \
|
||||
EXTERNAL="yes" \
|
||||
source ./common.sh
|
||||
|
|
|
|||
|
|
@ -34,9 +34,6 @@ EXPECTED_DEFAULT_DRIVER="kvm2"
|
|||
# We pick kvm as our gvisor testbed because it is fast & reliable
|
||||
EXTRA_TEST_ARGS="-gvisor"
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install qemu-system libvirt-clients libvirt-daemon-system ebtables iptables dnsmasq
|
||||
sudo adduser jenkins libvirt || true
|
||||
|
|
|
|||
|
|
@ -31,11 +31,6 @@ DRIVER="kvm2"
|
|||
JOB_NAME="KVM_Linux_containerd"
|
||||
CONTAINER_RUNTIME="containerd"
|
||||
|
||||
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install qemu-system libvirt-clients libvirt-daemon-system ebtables iptables dnsmasq
|
||||
sudo adduser jenkins libvirt || true
|
||||
|
|
|
|||
|
|
@ -31,11 +31,6 @@ DRIVER="kvm2"
|
|||
JOB_NAME="KVM_Linux_crio"
|
||||
CONTAINER_RUNTIME="crio"
|
||||
|
||||
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install qemu-system libvirt-clients libvirt-daemon-system ebtables iptables dnsmasq
|
||||
sudo adduser jenkins libvirt || true
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
|
||||
# access_token: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
|
||||
set -e
|
||||
|
||||
OS="linux"
|
||||
|
|
@ -66,9 +65,6 @@ if ! which socat &>/dev/null; then
|
|||
sudo apt-get -qq -y install socat
|
||||
fi
|
||||
|
||||
mkdir -p cron && gsutil -m rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
# We need this for reasons now
|
||||
sudo sysctl fs.protected_regular=0
|
||||
|
||||
|
|
|
|||
|
|
@ -31,9 +31,6 @@ DRIVER="podman"
|
|||
JOB_NAME="Experimental_Podman_Linux"
|
||||
CONTAINER_RUNTIME="containerd"
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
# remove possible left over podman containers
|
||||
sudo podman rm -f -v $(sudo podman ps -aq) || true
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,4 @@ JOB_NAME="VirtualBox_Linux"
|
|||
EXTRA_TEST_ARGS=""
|
||||
EXPECTED_DEFAULT_DRIVER="kvm2"
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
|
||||
source ./common.sh 2h
|
||||
|
|
|
|||
|
|
@ -47,9 +47,4 @@ do
|
|||
fi
|
||||
done
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP"
|
||||
echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab
|
||||
crontab -l
|
||||
|
||||
source common.sh
|
||||
|
|
|
|||
|
|
@ -34,9 +34,4 @@ EXTRA_TEST_ARGS=""
|
|||
EXPECTED_DEFAULT_DRIVER="hyperkit"
|
||||
EXTERNAL="yes"
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP"
|
||||
echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab
|
||||
crontab -l
|
||||
|
||||
source common.sh
|
||||
|
|
|
|||
|
|
@ -33,10 +33,4 @@ EXTRA_START_ARGS="--bootstrapper=kubeadm"
|
|||
# Assumes that hyperkit is also installed on the VirtualBox CI host.
|
||||
EXPECTED_DEFAULT_DRIVER="hyperkit"
|
||||
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO GET INSTALL CLEANUP"
|
||||
echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab
|
||||
crontab -l
|
||||
|
||||
source common.sh
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@
|
|||
|
||||
set -eux -o pipefail
|
||||
|
||||
mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/master/cron" cron || echo "FAILED TO GET CRON FILES"
|
||||
sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP"
|
||||
source ./hack/jenkins/installers/check_install_linux_crons.sh
|
||||
|
||||
# Make sure the right golang version is installed based on Makefile
|
||||
./hack/jenkins/installers/check_install_golang.sh /usr/local
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@
|
|||
# VERSION_MAJOR: The major version of the tag to be released.
|
||||
# VERSION_MINOR: The minor version of the tag to be released.
|
||||
# VERSION_BUILD: The build version of the tag to be released.
|
||||
# ISO_SHA256: The sha 256 of the minikube-iso for the current release.
|
||||
# ISO_SHA256_AMD64: The sha 256 of the amd64 minikube-iso for the current release.
|
||||
# ISO_SHA256_ARM64: The sha 256 of the arm64 minikube-iso for the current release.
|
||||
# GITHUB_TOKEN: The GitHub API access token. Injected by the Jenkins credential provider.
|
||||
|
||||
set -eux -o pipefail
|
||||
|
|
@ -62,7 +63,8 @@ See [Getting Started](https://minikube.sigs.k8s.io/docs/start/)
|
|||
|
||||
## ISO Checksum
|
||||
|
||||
\`${ISO_SHA256}\`"
|
||||
amd64: \`${ISO_SHA256_AMD64}\`
|
||||
arm64: \`${ISO_SHA256_ARM64}\`"
|
||||
|
||||
# ================================================================================
|
||||
# Deleting release from github before creating new one
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ RUN DEBIAN_FRONTEND=noninteractive \
|
|||
libvirt-dev:arm64 && \
|
||||
dpkg --configure -a
|
||||
|
||||
RUN curl -sSL https://golang.org/dl/go${GO_VERSION}.linux-arm64.tar.gz | tar -C /usr/local -xzf -
|
||||
RUN curl -sSL https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz | tar -C /usr/local -xzf -
|
||||
|
||||
ENV GOPATH /go
|
||||
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ func addonSpecificChecks(cc *config.ClusterConfig, name string, enable bool, run
|
|||
}
|
||||
|
||||
if name == "registry" {
|
||||
if driver.NeedsPortForward(cc.Driver) {
|
||||
if driver.NeedsPortForward(cc.Driver) && driver.IsKIC(cc.Driver) {
|
||||
port, err := oci.ForwardedPort(cc.Driver, cc.Name, constants.RegistryAddonPort)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "registry port")
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ func enableOrDisableAutoPause(cc *config.ClusterConfig, name, val string) error
|
|||
port := co.CP.Port // API server port
|
||||
if enable { // if enable, calculate the forwarded port
|
||||
port = constants.AutoPauseProxyPort
|
||||
if driver.NeedsPortForward(cc.Driver) {
|
||||
if driver.NeedsPortForward(cc.Driver) && driver.IsKIC(cc.Driver) {
|
||||
port, err = oci.ForwardedPort(cc.Driver, cc.Name, port)
|
||||
if err != nil {
|
||||
klog.ErrorS(err, "failed to get forwarded port for", "auto-pause port", port)
|
||||
|
|
|
|||
|
|
@ -19,16 +19,64 @@ limitations under the License.
|
|||
package oci
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"github.com/opencontainers/runc/libcontainer/cgroups"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
)
|
||||
|
||||
// IsCgroup2UnifiedMode returns whether we are running in cgroup 2 cgroup2 mode.
|
||||
func IsCgroup2UnifiedMode() (bool, error) {
|
||||
var st syscall.Statfs_t
|
||||
if err := syscall.Statfs("/sys/fs/cgroup", &st); err != nil {
|
||||
return false, err
|
||||
// findCgroupMountpoints returns the cgroups mount point
|
||||
// defined in docker engine engine/pkg/sysinfo/sysinfo_linux.go
|
||||
func findCgroupMountpoints() (map[string]string, error) {
|
||||
cgMounts, err := cgroups.GetCgroupMounts(false)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse cgroup information: %v", err)
|
||||
}
|
||||
return st.Type == unix.CGROUP2_SUPER_MAGIC, nil
|
||||
mps := make(map[string]string)
|
||||
for _, m := range cgMounts {
|
||||
for _, ss := range m.Subsystems {
|
||||
mps[ss] = m.Mountpoint
|
||||
}
|
||||
}
|
||||
return mps, nil
|
||||
}
|
||||
|
||||
// HasMemoryCgroup checks whether it is possible to set memory limit for cgroup.
|
||||
func HasMemoryCgroup() bool {
|
||||
cgMounts, err := findCgroupMountpoints()
|
||||
if err != nil {
|
||||
klog.Warning("Your kernel does not support memory limit capabilities or the cgroup is not mounted.")
|
||||
return false
|
||||
}
|
||||
_, ok := cgMounts["memory"]
|
||||
if !ok {
|
||||
klog.Warning("Your kernel does not support memory limit capabilities or the cgroup is not mounted.")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// hasMemorySwapCgroup checks whether it is possible to set swap limit for cgroup
|
||||
func hasMemorySwapCgroup() bool {
|
||||
cgMounts, err := findCgroupMountpoints()
|
||||
if err != nil {
|
||||
klog.Warning("Your kernel does not support swap limit capabilities or the cgroup is not mounted.")
|
||||
return false
|
||||
}
|
||||
mountPoint, ok := cgMounts["memory"]
|
||||
if !ok {
|
||||
klog.Warning("Your kernel does not support swap limit capabilities or the cgroup is not mounted.")
|
||||
return false
|
||||
}
|
||||
|
||||
_, err = os.Stat(path.Join(mountPoint, "memory.memsw.limit_in_bytesw"))
|
||||
if err != nil {
|
||||
klog.Warning("Your kernel does not support swap limit capabilities or the cgroup is not mounted.")
|
||||
return false
|
||||
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,13 +18,10 @@ limitations under the License.
|
|||
|
||||
package oci
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// IsCgroup2UnifiedMode returns whether we are running in cgroup 2 cgroup2 mode.
|
||||
func IsCgroup2UnifiedMode() (bool, error) {
|
||||
return false, errors.Errorf("Not supported on %s", runtime.GOOS)
|
||||
func HasMemoryCgroup() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func hasMemorySwapCgroup() bool {
|
||||
return true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,38 +108,6 @@ func PrepareContainerNode(p CreateParams) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// HasMemoryCgroup checks whether it is possible to set memory limit for cgroup.
|
||||
func HasMemoryCgroup() bool {
|
||||
memcg := true
|
||||
if runtime.GOOS == "linux" {
|
||||
var memory string
|
||||
if cgroup2, err := IsCgroup2UnifiedMode(); err == nil && cgroup2 {
|
||||
memory = "/sys/fs/cgroup/memory/memsw.limit_in_bytes"
|
||||
}
|
||||
if _, err := os.Stat(memory); os.IsNotExist(err) {
|
||||
klog.Warning("Your kernel does not support memory limit capabilities or the cgroup is not mounted.")
|
||||
memcg = false
|
||||
}
|
||||
}
|
||||
return memcg
|
||||
}
|
||||
|
||||
func hasMemorySwapCgroup() bool {
|
||||
memcgSwap := true
|
||||
if runtime.GOOS == "linux" {
|
||||
var memoryswap string
|
||||
if cgroup2, err := IsCgroup2UnifiedMode(); err == nil && cgroup2 {
|
||||
memoryswap = "/sys/fs/cgroup/memory/memory.swap.max"
|
||||
}
|
||||
if _, err := os.Stat(memoryswap); os.IsNotExist(err) {
|
||||
// requires CONFIG_MEMCG_SWAP_ENABLED or cgroup_enable=memory in grub
|
||||
klog.Warning("Your kernel does not support swap limit capabilities or the cgroup is not mounted.")
|
||||
memcgSwap = false
|
||||
}
|
||||
}
|
||||
return memcgSwap
|
||||
}
|
||||
|
||||
// CreateContainerNode creates a new container node
|
||||
func CreateContainerNode(p CreateParams) error {
|
||||
// on windows os, if docker desktop is using Windows Containers. Exit early with error
|
||||
|
|
|
|||
|
|
@ -24,13 +24,13 @@ import (
|
|||
|
||||
const (
|
||||
// Version is the current version of kic
|
||||
Version = "v0.0.30-1647797120-13815"
|
||||
Version = "v0.0.31"
|
||||
// SHA of the kic base image
|
||||
baseImageSHA = "90e8f7ee4065da728c0b80d303827e05ce4421985fe9bd7bdca30a55218347b5"
|
||||
baseImageSHA = "c3375f1b260bd936aa532a0c749626e07d94ab129a7f2395e95345aa04ca708c"
|
||||
// The name of the GCR kicbase repository
|
||||
gcrRepo = "gcr.io/k8s-minikube/kicbase-builds"
|
||||
gcrRepo = "gcr.io/k8s-minikube/kicbase"
|
||||
// The name of the Dockerhub kicbase repository
|
||||
dockerhubRepo = "docker.io/kicbase/build"
|
||||
dockerhubRepo = "docker.io/kicbase/stable"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
|
|||
|
|
@ -0,0 +1,767 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package qemu
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/docker/machine/libmachine/log"
|
||||
"github.com/docker/machine/libmachine/mcnutils"
|
||||
"github.com/docker/machine/libmachine/ssh"
|
||||
"github.com/docker/machine/libmachine/state"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
pkgdrivers "k8s.io/minikube/pkg/drivers"
|
||||
)
|
||||
|
||||
const (
|
||||
isoFilename = "boot2docker.iso"
|
||||
privateNetworkName = "docker-machines"
|
||||
|
||||
defaultSSHUser = "docker"
|
||||
)
|
||||
|
||||
type Driver struct {
|
||||
*drivers.BaseDriver
|
||||
*pkgdrivers.CommonDriver
|
||||
EnginePort int
|
||||
FirstQuery bool
|
||||
|
||||
Memory int
|
||||
DiskSize int
|
||||
CPU int
|
||||
Program string
|
||||
BIOS bool
|
||||
CPUType string
|
||||
MachineType string
|
||||
Firmware string
|
||||
Display bool
|
||||
DisplayType string
|
||||
Nographic bool
|
||||
VirtioDrives bool
|
||||
Network string
|
||||
PrivateNetwork string
|
||||
Boot2DockerURL string
|
||||
NetworkInterface string
|
||||
NetworkAddress string
|
||||
NetworkSocket string
|
||||
NetworkBridge string
|
||||
CaCertPath string
|
||||
PrivateKeyPath string
|
||||
DiskPath string
|
||||
CacheMode string
|
||||
IOMode string
|
||||
UserDataFile string
|
||||
CloudConfigRoot string
|
||||
LocalPorts string
|
||||
}
|
||||
|
||||
func (d *Driver) GetMachineName() string {
|
||||
return d.MachineName
|
||||
}
|
||||
|
||||
func (d *Driver) GetSSHHostname() (string, error) {
|
||||
return "localhost", nil
|
||||
}
|
||||
|
||||
func (d *Driver) GetSSHKeyPath() string {
|
||||
return d.ResolveStorePath("id_rsa")
|
||||
}
|
||||
|
||||
func (d *Driver) GetSSHPort() (int, error) {
|
||||
if d.SSHPort == 0 {
|
||||
d.SSHPort = 22
|
||||
}
|
||||
|
||||
return d.SSHPort, nil
|
||||
}
|
||||
|
||||
func (d *Driver) GetSSHUsername() string {
|
||||
if d.SSHUser == "" {
|
||||
d.SSHUser = "docker"
|
||||
}
|
||||
|
||||
return d.SSHUser
|
||||
}
|
||||
|
||||
func (d *Driver) DriverName() string {
|
||||
return "qemu2"
|
||||
}
|
||||
|
||||
func (d *Driver) GetURL() (string, error) {
|
||||
log.Debugf("GetURL called")
|
||||
if _, err := os.Stat(d.pidfilePath()); err != nil {
|
||||
return "", nil
|
||||
}
|
||||
ip, err := d.GetIP()
|
||||
if err != nil {
|
||||
log.Warnf("Failed to get IP: %s", err)
|
||||
return "", err
|
||||
}
|
||||
if ip == "" {
|
||||
return "", nil
|
||||
}
|
||||
port := d.GetPort()
|
||||
return fmt.Sprintf("tcp://%s:%d", ip, port), nil
|
||||
}
|
||||
|
||||
func NewDriver(hostName, storePath string) drivers.Driver {
|
||||
return &Driver{
|
||||
BIOS: runtime.GOARCH != "arm64",
|
||||
PrivateNetwork: privateNetworkName,
|
||||
BaseDriver: &drivers.BaseDriver{
|
||||
SSHUser: defaultSSHUser,
|
||||
MachineName: hostName,
|
||||
StorePath: storePath,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Driver) GetIP() (string, error) {
|
||||
if d.Network == "user" {
|
||||
return "127.0.0.1", nil
|
||||
}
|
||||
return d.NetworkAddress, nil
|
||||
}
|
||||
|
||||
func (d *Driver) GetPort() int {
|
||||
var port = d.EnginePort
|
||||
if d.FirstQuery {
|
||||
d.FirstQuery = false
|
||||
port = 2376
|
||||
}
|
||||
return port
|
||||
}
|
||||
|
||||
func checkPid(pid int) error {
|
||||
process, err := os.FindProcess(pid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return process.Signal(syscall.Signal(0))
|
||||
}
|
||||
|
||||
func (d *Driver) GetState() (state.State, error) {
|
||||
|
||||
if _, err := os.Stat(d.pidfilePath()); err != nil {
|
||||
return state.Stopped, nil
|
||||
}
|
||||
p, err := ioutil.ReadFile(d.pidfilePath())
|
||||
if err != nil {
|
||||
return state.Error, err
|
||||
}
|
||||
pid, err := strconv.Atoi(strings.TrimSpace(string(p)))
|
||||
if err != nil {
|
||||
return state.Error, err
|
||||
}
|
||||
if err := checkPid(pid); err != nil {
|
||||
// No pid, remove pidfile
|
||||
os.Remove(d.pidfilePath())
|
||||
return state.Stopped, nil
|
||||
}
|
||||
ret, err := d.RunQMPCommand("query-status")
|
||||
if err != nil {
|
||||
return state.Error, err
|
||||
}
|
||||
// RunState is one of:
|
||||
// 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
|
||||
// 'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
|
||||
// 'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
|
||||
// 'guest-panicked'
|
||||
switch ret["status"] {
|
||||
case "running":
|
||||
return state.Running, nil
|
||||
case "paused":
|
||||
return state.Paused, nil
|
||||
case "shutdown":
|
||||
return state.Stopped, nil
|
||||
}
|
||||
return state.None, nil
|
||||
}
|
||||
|
||||
func (d *Driver) PreCreateCheck() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Driver) Create() error {
|
||||
var err error
|
||||
if d.Network == "user" {
|
||||
minPort, maxPort, err := parsePortRange(d.LocalPorts)
|
||||
log.Debugf("port range: %d -> %d", minPort, maxPort)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
d.SSHPort, err = getAvailableTCPPortFromRange(minPort, maxPort)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
d.EnginePort, err = getAvailableTCPPortFromRange(minPort, maxPort)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if d.EnginePort == d.SSHPort {
|
||||
// can't have both on same port
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
b2dutils := mcnutils.NewB2dUtils(d.StorePath)
|
||||
if err := b2dutils.CopyIsoToMachineDir(d.Boot2DockerURL, d.MachineName); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("Creating SSH key...")
|
||||
if err := ssh.GenerateSSHKey(d.sshKeyPath()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("Creating Disk image...")
|
||||
if err := d.generateDiskImage(d.DiskSize); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if d.UserDataFile != "" {
|
||||
log.Infof("Creating Userdata Disk...")
|
||||
if d.CloudConfigRoot, err = d.generateUserdataDisk(d.UserDataFile); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
log.Infof("Starting QEMU VM...")
|
||||
return d.Start()
|
||||
}
|
||||
|
||||
func parsePortRange(rawPortRange string) (int, int, error) {
|
||||
if rawPortRange == "" {
|
||||
return 0, 65535, nil
|
||||
}
|
||||
|
||||
portRange := strings.Split(rawPortRange, "-")
|
||||
|
||||
if len(portRange) < 2 {
|
||||
return 0, 0, errors.New("Invalid port range, must be at least of length 2")
|
||||
}
|
||||
|
||||
minPort, err := strconv.Atoi(portRange[0])
|
||||
if err != nil {
|
||||
return 0, 0, errors.Wrap(err, "Invalid port range")
|
||||
}
|
||||
maxPort, err := strconv.Atoi(portRange[1])
|
||||
if err != nil {
|
||||
return 0, 0, errors.Wrap(err, "Invalid port range")
|
||||
}
|
||||
|
||||
if maxPort < minPort {
|
||||
return 0, 0, errors.New("Invalid port range")
|
||||
}
|
||||
|
||||
if maxPort-minPort < 2 {
|
||||
return 0, 0, errors.New("Port range must be minimum 2 ports")
|
||||
}
|
||||
|
||||
return minPort, maxPort, nil
|
||||
}
|
||||
|
||||
func getRandomPortNumberInRange(min int, max int) int {
|
||||
return rand.Intn(max-min) + min
|
||||
}
|
||||
|
||||
func getAvailableTCPPortFromRange(minPort int, maxPort int) (int, error) {
|
||||
port := 0
|
||||
for i := 0; i <= 10; i++ {
|
||||
var ln net.Listener
|
||||
var err error
|
||||
if minPort == 0 && maxPort == 65535 {
|
||||
ln, err = net.Listen("tcp4", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
} else {
|
||||
port = getRandomPortNumberInRange(minPort, maxPort)
|
||||
log.Debugf("testing port: %d", port)
|
||||
ln, err = net.Listen("tcp4", fmt.Sprintf("127.0.0.1:%d", port))
|
||||
if err != nil {
|
||||
log.Debugf("port already in use: %d", port)
|
||||
continue
|
||||
}
|
||||
}
|
||||
defer ln.Close()
|
||||
addr := ln.Addr().String()
|
||||
addrParts := strings.SplitN(addr, ":", 2)
|
||||
p, err := strconv.Atoi(addrParts[1])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if p != 0 {
|
||||
port = p
|
||||
return port, nil
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
return 0, fmt.Errorf("unable to allocate tcp port")
|
||||
}
|
||||
|
||||
func (d *Driver) Start() error {
|
||||
// fmt.Printf("Init qemu %s\n", i.VM)
|
||||
machineDir := filepath.Join(d.StorePath, "machines", d.GetMachineName())
|
||||
|
||||
var startCmd []string
|
||||
|
||||
if d.MachineType != "" {
|
||||
machineType := d.MachineType
|
||||
startCmd = append(startCmd,
|
||||
"-M", machineType,
|
||||
)
|
||||
}
|
||||
if d.CPUType != "" {
|
||||
startCmd = append(startCmd,
|
||||
"-cpu", d.CPUType,
|
||||
)
|
||||
}
|
||||
|
||||
if !d.BIOS {
|
||||
if d.Firmware != "" {
|
||||
startCmd = append(startCmd,
|
||||
"-drive", fmt.Sprintf("file=%s,readonly=on,format=raw,if=pflash", d.Firmware))
|
||||
} else {
|
||||
return fmt.Errorf("unknown firmware")
|
||||
}
|
||||
}
|
||||
|
||||
if d.Display {
|
||||
if d.DisplayType != "" {
|
||||
startCmd = append(startCmd,
|
||||
"-display", d.DisplayType,
|
||||
)
|
||||
}
|
||||
// else use the default graphic output
|
||||
} else {
|
||||
if d.Nographic {
|
||||
startCmd = append(startCmd,
|
||||
"-nographic",
|
||||
)
|
||||
} else {
|
||||
startCmd = append(startCmd,
|
||||
"-display", "none",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// hardware acceleration is important, it increases performance by 10x
|
||||
if runtime.GOOS == "darwin" {
|
||||
startCmd = append(startCmd, "-accel", "hvf")
|
||||
} else if _, err := os.Stat("/dev/kvm"); err == nil && runtime.GOOS == "linux" {
|
||||
startCmd = append(startCmd, "-accel", "kvm")
|
||||
}
|
||||
|
||||
startCmd = append(startCmd,
|
||||
"-m", fmt.Sprintf("%d", d.Memory),
|
||||
"-smp", fmt.Sprintf("%d", d.CPU),
|
||||
"-boot", "d")
|
||||
var isoPath = filepath.Join(machineDir, isoFilename)
|
||||
if d.VirtioDrives {
|
||||
startCmd = append(startCmd,
|
||||
"-drive", fmt.Sprintf("file=%s,index=2,media=cdrom,if=virtio", isoPath))
|
||||
} else {
|
||||
startCmd = append(startCmd,
|
||||
"-cdrom", isoPath)
|
||||
}
|
||||
startCmd = append(startCmd,
|
||||
"-qmp", fmt.Sprintf("unix:%s,server,nowait", d.monitorPath()),
|
||||
"-pidfile", d.pidfilePath(),
|
||||
)
|
||||
|
||||
if d.Network == "user" {
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("user,model=virtio,hostfwd=tcp::%d-:22,hostfwd=tcp::%d-:2376,hostname=%s", d.SSHPort, d.EnginePort, d.GetMachineName()),
|
||||
)
|
||||
} else if d.Network == "tap" {
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("tap,model=virtio,ifname=%s,script=no,downscript=no", d.NetworkInterface),
|
||||
)
|
||||
} else if d.Network == "vde" {
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("vde,model=virtio,sock=%s", d.NetworkSocket),
|
||||
)
|
||||
} else if d.Network == "bridge" {
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("bridge,model=virtio,br=%s", d.NetworkBridge),
|
||||
)
|
||||
} else {
|
||||
log.Errorf("Unknown network: %s", d.Network)
|
||||
}
|
||||
|
||||
startCmd = append(startCmd, "-daemonize")
|
||||
|
||||
if d.CloudConfigRoot != "" {
|
||||
startCmd = append(startCmd,
|
||||
"-fsdev",
|
||||
fmt.Sprintf("local,security_model=passthrough,readonly,id=fsdev0,path=%s", d.CloudConfigRoot))
|
||||
startCmd = append(startCmd, "-device", "virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=config-2")
|
||||
}
|
||||
|
||||
if d.VirtioDrives {
|
||||
startCmd = append(startCmd,
|
||||
"-drive", fmt.Sprintf("file=%s,index=0,media=disk,if=virtio", d.diskPath()))
|
||||
} else {
|
||||
// last argument is always the name of the disk image
|
||||
startCmd = append(startCmd, d.diskPath())
|
||||
}
|
||||
|
||||
if stdout, stderr, err := cmdOutErr(d.Program, startCmd...); err != nil {
|
||||
fmt.Printf("OUTPUT: %s\n", stdout)
|
||||
fmt.Printf("ERROR: %s\n", stderr)
|
||||
return err
|
||||
}
|
||||
log.Infof("Waiting for VM to start (ssh -p %d docker@localhost)...", d.SSHPort)
|
||||
|
||||
return WaitForTCPWithDelay(fmt.Sprintf("localhost:%d", d.SSHPort), time.Second)
|
||||
}
|
||||
|
||||
func cmdOutErr(cmdStr string, args ...string) (string, string, error) {
|
||||
cmd := exec.Command(cmdStr, args...)
|
||||
log.Debugf("executing: %v %v", cmdStr, strings.Join(args, " "))
|
||||
var stdout bytes.Buffer
|
||||
var stderr bytes.Buffer
|
||||
cmd.Stdout = &stdout
|
||||
cmd.Stderr = &stderr
|
||||
err := cmd.Run()
|
||||
stderrStr := stderr.String()
|
||||
log.Debugf("STDOUT: %v", stdout.String())
|
||||
log.Debugf("STDERR: %v", stderrStr)
|
||||
if err != nil {
|
||||
if ee, ok := err.(*exec.Error); ok && ee == exec.ErrNotFound {
|
||||
err = fmt.Errorf("mystery error: %s", ee)
|
||||
}
|
||||
} else {
|
||||
// also catch error messages in stderr, even if the return code
|
||||
// looks OK
|
||||
if strings.Contains(stderrStr, "error:") {
|
||||
err = fmt.Errorf("%v %v failed: %v", cmdStr, strings.Join(args, " "), stderrStr)
|
||||
}
|
||||
}
|
||||
return stdout.String(), stderrStr, err
|
||||
}
|
||||
|
||||
func (d *Driver) Stop() error {
|
||||
// _, err := d.RunQMPCommand("stop")
|
||||
_, err := d.RunQMPCommand("system_powerdown")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Driver) Remove() error {
|
||||
s, err := d.GetState()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "get state")
|
||||
}
|
||||
if s == state.Running {
|
||||
if err := d.Kill(); err != nil {
|
||||
return errors.Wrap(err, "kill")
|
||||
}
|
||||
}
|
||||
if s != state.Stopped {
|
||||
_, err = d.RunQMPCommand("quit")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "quit")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Driver) Restart() error {
|
||||
s, err := d.GetState()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if s == state.Running {
|
||||
if err := d.Stop(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return d.Start()
|
||||
}
|
||||
|
||||
func (d *Driver) Kill() error {
|
||||
// _, err := d.RunQMPCommand("quit")
|
||||
_, err := d.RunQMPCommand("system_powerdown")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Driver) StartDocker() error {
|
||||
return fmt.Errorf("hosts without a driver cannot start docker")
|
||||
}
|
||||
|
||||
func (d *Driver) StopDocker() error {
|
||||
return fmt.Errorf("hosts without a driver cannot stop docker")
|
||||
}
|
||||
|
||||
func (d *Driver) GetDockerConfigDir() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (d *Driver) Upgrade() error {
|
||||
return fmt.Errorf("hosts without a driver cannot be upgraded")
|
||||
}
|
||||
|
||||
func (d *Driver) sshKeyPath() string {
|
||||
machineDir := filepath.Join(d.StorePath, "machines", d.GetMachineName())
|
||||
return filepath.Join(machineDir, "id_rsa")
|
||||
}
|
||||
|
||||
func (d *Driver) publicSSHKeyPath() string {
|
||||
return d.sshKeyPath() + ".pub"
|
||||
}
|
||||
|
||||
func (d *Driver) diskPath() string {
|
||||
machineDir := filepath.Join(d.StorePath, "machines", d.GetMachineName())
|
||||
return filepath.Join(machineDir, "disk.qcow2")
|
||||
}
|
||||
|
||||
func (d *Driver) monitorPath() string {
|
||||
machineDir := filepath.Join(d.StorePath, "machines", d.GetMachineName())
|
||||
return filepath.Join(machineDir, "monitor")
|
||||
}
|
||||
|
||||
func (d *Driver) pidfilePath() string {
|
||||
machineDir := filepath.Join(d.StorePath, "machines", d.GetMachineName())
|
||||
return filepath.Join(machineDir, "qemu.pid")
|
||||
}
|
||||
|
||||
// Make a boot2docker VM disk image.
|
||||
func (d *Driver) generateDiskImage(size int) error {
|
||||
log.Debugf("Creating %d MB hard disk image...", size)
|
||||
|
||||
magicString := "boot2docker, please format-me"
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
tw := tar.NewWriter(buf)
|
||||
|
||||
// magicString first so the automount script knows to format the disk
|
||||
file := &tar.Header{Name: magicString, Size: int64(len(magicString))}
|
||||
if err := tw.WriteHeader(file); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tw.Write([]byte(magicString)); err != nil {
|
||||
return err
|
||||
}
|
||||
// .ssh/key.pub => authorized_keys
|
||||
file = &tar.Header{Name: ".ssh", Typeflag: tar.TypeDir, Mode: 0700}
|
||||
if err := tw.WriteHeader(file); err != nil {
|
||||
return err
|
||||
}
|
||||
pubKey, err := ioutil.ReadFile(d.publicSSHKeyPath())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
file = &tar.Header{Name: ".ssh/authorized_keys", Size: int64(len(pubKey)), Mode: 0644}
|
||||
if err := tw.WriteHeader(file); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tw.Write(pubKey); err != nil {
|
||||
return err
|
||||
}
|
||||
file = &tar.Header{Name: ".ssh/authorized_keys2", Size: int64(len(pubKey)), Mode: 0644}
|
||||
if err := tw.WriteHeader(file); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tw.Write(pubKey); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tw.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
rawFile := fmt.Sprintf("%s.raw", d.diskPath())
|
||||
if err := ioutil.WriteFile(rawFile, buf.Bytes(), 0644); err != nil {
|
||||
return nil
|
||||
}
|
||||
if stdout, stderr, err := cmdOutErr("qemu-img", "convert", "-f", "raw", "-O", "qcow2", rawFile, d.diskPath()); err != nil {
|
||||
fmt.Printf("OUTPUT: %s\n", stdout)
|
||||
fmt.Printf("ERROR: %s\n", stderr)
|
||||
return err
|
||||
}
|
||||
if stdout, stderr, err := cmdOutErr("qemu-img", "resize", d.diskPath(), fmt.Sprintf("+%dM", size)); err != nil {
|
||||
fmt.Printf("OUTPUT: %s\n", stdout)
|
||||
fmt.Printf("ERROR: %s\n", stderr)
|
||||
return err
|
||||
}
|
||||
log.Debugf("DONE writing to %s and %s", rawFile, d.diskPath())
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Driver) generateUserdataDisk(userdataFile string) (string, error) {
|
||||
// Start with virtio, add ISO & FAT format later
|
||||
// Start with local file, add wget/fetct URL? (or if URL, use datasource..)
|
||||
userdata, err := ioutil.ReadFile(userdataFile)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
machineDir := filepath.Join(d.StorePath, "machines", d.GetMachineName())
|
||||
ccRoot := filepath.Join(machineDir, "cloud-config")
|
||||
err = os.MkdirAll(ccRoot, 0755)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
userDataDir := filepath.Join(ccRoot, "openstack/latest")
|
||||
err = os.MkdirAll(userDataDir, 0755)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
writeFile := filepath.Join(userDataDir, "user_data")
|
||||
if err := ioutil.WriteFile(writeFile, userdata, 0644); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return ccRoot, nil
|
||||
|
||||
}
|
||||
|
||||
func (d *Driver) RunQMPCommand(command string) (map[string]interface{}, error) {
|
||||
|
||||
// connect to monitor
|
||||
conn, err := net.Dial("unix", d.monitorPath())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
// initial QMP response
|
||||
var buf [1024]byte
|
||||
nr, err := conn.Read(buf[:])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
type qmpInitialResponse struct {
|
||||
QMP struct {
|
||||
Version struct {
|
||||
QEMU struct {
|
||||
Micro int `json:"micro"`
|
||||
Minor int `json:"minor"`
|
||||
Major int `json:"major"`
|
||||
} `json:"qemu"`
|
||||
Package string `json:"package"`
|
||||
} `json:"version"`
|
||||
Capabilities []string `json:"capabilities"`
|
||||
} `jason:"QMP"`
|
||||
}
|
||||
|
||||
var initialResponse qmpInitialResponse
|
||||
err = json.Unmarshal(buf[:nr], &initialResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// run 'qmp_capabilities' to switch to command mode
|
||||
// { "execute": "qmp_capabilities" }
|
||||
type qmpCommand struct {
|
||||
Command string `json:"execute"`
|
||||
}
|
||||
jsonCommand, err := json.Marshal(qmpCommand{Command: "qmp_capabilities"})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = conn.Write(jsonCommand)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nr, err = conn.Read(buf[:])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
type qmpResponse struct {
|
||||
Return map[string]interface{} `json:"return"`
|
||||
}
|
||||
var response qmpResponse
|
||||
err = json.Unmarshal(buf[:nr], &response)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// expecting empty response
|
||||
if len(response.Return) != 0 {
|
||||
return nil, fmt.Errorf("qmp_capabilities failed: %v", response.Return)
|
||||
}
|
||||
|
||||
// { "execute": command }
|
||||
jsonCommand, err = json.Marshal(qmpCommand{Command: command})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = conn.Write(jsonCommand)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nr, err = conn.Read(buf[:])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = json.Unmarshal(buf[:nr], &response)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if strings.HasPrefix(command, "query-") {
|
||||
return response.Return, nil
|
||||
}
|
||||
// non-query commands should return an empty response
|
||||
if len(response.Return) != 0 {
|
||||
return nil, fmt.Errorf("%s failed: %v", command, response.Return)
|
||||
}
|
||||
return response.Return, nil
|
||||
}
|
||||
|
||||
func WaitForTCPWithDelay(addr string, duration time.Duration) error {
|
||||
for {
|
||||
conn, err := net.Dial("tcp", addr)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
defer conn.Close()
|
||||
if _, err = conn.Read(make([]byte, 1)); err != nil {
|
||||
time.Sleep(duration)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -813,6 +813,7 @@ func GenerateTemplateData(addon *Addon, cfg config.KubernetesConfig, netInfo Net
|
|||
CustomIngressCert string
|
||||
IngressAPIVersion string
|
||||
ContainerRuntime string
|
||||
RegistryAliases string
|
||||
Images map[string]string
|
||||
Registries map[string]string
|
||||
CustomRegistries map[string]string
|
||||
|
|
@ -825,6 +826,7 @@ func GenerateTemplateData(addon *Addon, cfg config.KubernetesConfig, netInfo Net
|
|||
LoadBalancerStartIP: cfg.LoadBalancerStartIP,
|
||||
LoadBalancerEndIP: cfg.LoadBalancerEndIP,
|
||||
CustomIngressCert: cfg.CustomIngressCert,
|
||||
RegistryAliases: cfg.RegistryAliases,
|
||||
IngressAPIVersion: "v1", // api version for ingress (eg, "v1beta1"; defaults to "v1" for k8s 1.19+)
|
||||
ContainerRuntime: cfg.ContainerRuntime,
|
||||
Images: images,
|
||||
|
|
|
|||
|
|
@ -18,9 +18,14 @@ limitations under the License.
|
|||
package images
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"path"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
|
|
@ -28,6 +33,11 @@ import (
|
|||
"k8s.io/minikube/pkg/version"
|
||||
)
|
||||
|
||||
const (
|
||||
// builds a docker v2 repository API call in the format https://k8s.gcr.io/v2/coredns/coredns/tags/list
|
||||
tagURLTemplate = "https://%s/v2/%s/tags/list"
|
||||
)
|
||||
|
||||
// Pause returns the image name to pull for a given Kubernetes version
|
||||
func Pause(v semver.Version, mirror string) string {
|
||||
// Note: changing this logic requires bumping the preload version
|
||||
|
|
@ -35,10 +45,13 @@ func Pause(v semver.Version, mirror string) string {
|
|||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
||||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants_unix.go
|
||||
pv := "3.6"
|
||||
majorMinorVersion := fmt.Sprintf("v%d.%d", v.Major, v.Minor)
|
||||
imageName := "pause"
|
||||
majorMinorVersion := fmt.Sprintf("v%d.%d", v.Major, v.Minor)
|
||||
|
||||
if pVersion, ok := constants.KubeadmImages[majorMinorVersion][imageName]; ok {
|
||||
pv = pVersion
|
||||
} else {
|
||||
pv = findLatestTagFromRepository(fmt.Sprintf(tagURLTemplate, kubernetesRepo(mirror), imageName), pv)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s:%s", path.Join(kubernetesRepo(mirror), imageName), pv)
|
||||
|
|
@ -64,24 +77,60 @@ func componentImage(name string, v semver.Version, mirror string) string {
|
|||
return fmt.Sprintf("%s:v%s", path.Join(kubernetesRepo(mirror), name), v)
|
||||
}
|
||||
|
||||
// fixes 13136 by getting the latest image version from the k8s.gcr.io repository instead of hardcoded
|
||||
func findLatestTagFromRepository(url string, lastKnownGood string) string {
|
||||
client := &http.Client{}
|
||||
errorMsg := fmt.Sprintf("Failed to get latest image version for %s, reverting to version %s.", url, lastKnownGood)
|
||||
|
||||
resp, err := client.Get(url)
|
||||
|
||||
if err != nil || resp.StatusCode != http.StatusOK {
|
||||
klog.Warningf("%s Error %v", errorMsg, err)
|
||||
return lastKnownGood
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
klog.Warningf("%s Error %v", errorMsg, err)
|
||||
return lastKnownGood
|
||||
}
|
||||
|
||||
type TagsResponse struct {
|
||||
Name string `json:"name"`
|
||||
Tags []string `json:"tags"`
|
||||
}
|
||||
|
||||
tags := TagsResponse{}
|
||||
err = json.Unmarshal(body, &tags)
|
||||
if err != nil || len(tags.Tags) < 1 {
|
||||
klog.Warningf("%s Error %v", errorMsg, err)
|
||||
return lastKnownGood
|
||||
}
|
||||
lastTagNum := len(tags.Tags) - 1
|
||||
return tags.Tags[lastTagNum]
|
||||
}
|
||||
|
||||
// coreDNS returns the images used for CoreDNS
|
||||
func coreDNS(v semver.Version, mirror string) string {
|
||||
// Note: changing this logic requires bumping the preload version
|
||||
// Should match `CoreDNSImageName` and `CoreDNSVersion` in
|
||||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
||||
|
||||
cv := "1.8.4"
|
||||
in := "coredns/coredns"
|
||||
imageName := "coredns/coredns"
|
||||
cv := "v1.8.6"
|
||||
if semver.MustParseRange("<1.21.0-alpha.1")(v) {
|
||||
in = "coredns"
|
||||
imageName = "coredns"
|
||||
}
|
||||
|
||||
majorMinorVersion := fmt.Sprintf("v%d.%d", v.Major, v.Minor)
|
||||
if cVersion, ok := constants.KubeadmImages[majorMinorVersion][in]; ok {
|
||||
if cVersion, ok := constants.KubeadmImages[majorMinorVersion][imageName]; ok {
|
||||
cv = cVersion
|
||||
} else {
|
||||
cv = findLatestTagFromRepository(fmt.Sprintf(tagURLTemplate, kubernetesRepo(mirror), imageName), cv)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s:%s", path.Join(kubernetesRepo(mirror), in), cv)
|
||||
return fmt.Sprintf("%s:%s", path.Join(kubernetesRepo(mirror), imageName), cv)
|
||||
}
|
||||
|
||||
// etcd returns the image used for etcd
|
||||
|
|
@ -90,10 +139,12 @@ func etcd(v semver.Version, mirror string) string {
|
|||
// Should match `DefaultEtcdVersion` in:
|
||||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
||||
ev := "3.5.0-0"
|
||||
majorMinorVersion := fmt.Sprintf("v%d.%d", v.Major, v.Minor)
|
||||
imageName := "etcd"
|
||||
majorMinorVersion := fmt.Sprintf("v%d.%d", v.Major, v.Minor)
|
||||
if eVersion, ok := constants.KubeadmImages[majorMinorVersion][imageName]; ok {
|
||||
ev = eVersion
|
||||
} else {
|
||||
ev = findLatestTagFromRepository(fmt.Sprintf(tagURLTemplate, kubernetesRepo(mirror), imageName), ev)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s:%s", path.Join(kubernetesRepo(mirror), imageName), ev)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ limitations under the License.
|
|||
package images
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
|
|
@ -91,6 +93,40 @@ k8s.gcr.io/coredns/coredns:v1.8.4
|
|||
}
|
||||
}
|
||||
|
||||
func TestGetLatestTag(t *testing.T) {
|
||||
serverResp := "{tags: [\"1.8.7\"]}"
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, err := w.Write([]byte(serverResp))
|
||||
if err != nil {
|
||||
t.Errorf("failed to write https response")
|
||||
}
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
var testCases = []struct {
|
||||
name string
|
||||
url string
|
||||
lastKnownGood string
|
||||
wsResponse string
|
||||
expect string
|
||||
}{
|
||||
{name: "VersionGetSuccess", url: server.URL, lastKnownGood: "v1.8.6", wsResponse: `{"name": "coredns", "tags": ["v1.8.9"]}`, expect: "v1.8.9"},
|
||||
{name: "VersionGetFail", url: server.URL, lastKnownGood: "v1.8.6", wsResponse: `{"name": "nah", "nope": ["v1.8.9"]}`, expect: "v1.8.6"},
|
||||
{name: "VersionGetFailNone", url: server.URL, lastKnownGood: "v1.8.6", wsResponse: ``, expect: "v1.8.6"},
|
||||
{name: "VersionGetSuccessMultiple", url: server.URL, lastKnownGood: "v1.8.6", wsResponse: `{"name": "coredns", "tags": ["1.8.7","v1.8.9"]}`, expect: "v1.8.9"},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
serverResp = tc.wsResponse
|
||||
resp := findLatestTagFromRepository(tc.url, tc.lastKnownGood)
|
||||
if diff := cmp.Diff(tc.expect, resp); diff != "" {
|
||||
t.Errorf("Incorrect response version (-want +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuxiliary(t *testing.T) {
|
||||
want := []string{
|
||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||
|
|
|
|||
|
|
@ -290,6 +290,10 @@ func (k *Bootstrapper) init(cfg config.ClusterConfig) error {
|
|||
}()
|
||||
|
||||
wg.Wait()
|
||||
// Tunnel apiserver to guest, if necessary
|
||||
if cfg.APIServerPort != 0 {
|
||||
k.tunnelToAPIServer(cfg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -399,6 +403,10 @@ func (k *Bootstrapper) StartCluster(cfg config.ClusterConfig) error {
|
|||
}
|
||||
|
||||
if err := bsutil.ExistingConfig(k.c); err == nil {
|
||||
// If the guest already exists and was stopped, re-establish the apiserver tunnel so checks pass
|
||||
if cfg.APIServerPort != 0 {
|
||||
k.tunnelToAPIServer(cfg)
|
||||
}
|
||||
klog.Infof("found existing configuration files, will attempt cluster restart")
|
||||
rerr := k.restartControlPlane(cfg)
|
||||
if rerr == nil {
|
||||
|
|
@ -433,6 +441,22 @@ func (k *Bootstrapper) StartCluster(cfg config.ClusterConfig) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (k *Bootstrapper) tunnelToAPIServer(cfg config.ClusterConfig) {
|
||||
m, err := machine.NewAPIClient()
|
||||
if err != nil {
|
||||
klog.Warningf("libmachine API failed: %v", err)
|
||||
}
|
||||
cp, err := config.PrimaryControlPlane(&cfg)
|
||||
if err != nil {
|
||||
klog.Warningf("finding control plane failed: %v", err)
|
||||
}
|
||||
args := []string{"-f", "-NTL", fmt.Sprintf("%d:localhost:8443", cfg.APIServerPort)}
|
||||
err = machine.CreateSSHShell(m, cfg, cp, args, false)
|
||||
if err != nil {
|
||||
klog.Warningf("apiserver tunnel failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// client sets and returns a Kubernetes client to use to speak to a kubeadm launched apiserver
|
||||
func (k *Bootstrapper) client(ip string, port int) (*kubernetes.Clientset, error) {
|
||||
if k.k8sClient != nil {
|
||||
|
|
@ -569,6 +593,7 @@ func (k *Bootstrapper) needsReconfigure(conf string, hostname string, port int,
|
|||
klog.Infof("needs reconfigure: configs differ:\n%s", rr.Output())
|
||||
return true
|
||||
}
|
||||
|
||||
// cruntime.Enable() may restart kube-apiserver but does not wait for it to return back
|
||||
apiStatusTimeout := 3000 * time.Millisecond
|
||||
st, err := kverify.WaitForAPIServerStatus(k.c, apiStatusTimeout, hostname, port)
|
||||
|
|
|
|||
|
|
@ -58,6 +58,10 @@ func HostIP(host *host.Host, clusterName string) (net.IP, error) {
|
|||
return []byte{}, errors.Wrap(err, "Error converting VM/Host IP address to IPv4 address")
|
||||
}
|
||||
return net.IPv4(vmIP[0], vmIP[1], vmIP[2], byte(1)), nil
|
||||
case driver.QEMU2:
|
||||
return net.ParseIP("10.0.2.2"), nil
|
||||
case driver.QEMU:
|
||||
return net.ParseIP("10.0.2.2"), nil
|
||||
case driver.HyperV:
|
||||
v := reflect.ValueOf(host.Driver).Elem()
|
||||
var hypervVirtualSwitch string
|
||||
|
|
@ -147,6 +151,9 @@ func DriverIP(api libmachine.API, machineName string) (net.IP, error) {
|
|||
if driver.IsKIC(host.DriverName) {
|
||||
ipStr = oci.DefaultBindIPV4
|
||||
}
|
||||
if driver.IsQEMU(host.DriverName) {
|
||||
ipStr = "127.0.0.1"
|
||||
}
|
||||
ip := net.ParseIP(ipStr)
|
||||
if ip == nil {
|
||||
return nil, fmt.Errorf("parsing IP: %s", ipStr)
|
||||
|
|
|
|||
|
|
@ -52,11 +52,12 @@ type ClusterConfig struct {
|
|||
HypervVirtualSwitch string
|
||||
HypervUseExternalSwitch bool
|
||||
HypervExternalAdapter string
|
||||
KVMNetwork string // Only used by the KVM2 driver
|
||||
KVMQemuURI string // Only used by the KVM2 driver
|
||||
KVMGPU bool // Only used by the KVM2 driver
|
||||
KVMHidden bool // Only used by the KVM2 driver
|
||||
KVMNUMACount int // Only used by the KVM2 driver
|
||||
KVMNetwork string // Only used by the KVM2 driver
|
||||
KVMQemuURI string // Only used by the KVM2 driver
|
||||
KVMGPU bool // Only used by the KVM2 driver
|
||||
KVMHidden bool // Only used by the KVM2 driver
|
||||
KVMNUMACount int // Only used by the KVM2 driver
|
||||
APIServerPort int
|
||||
DockerOpt []string // Each entry is formatted as KEY=VALUE.
|
||||
DisableDriverMounts bool // Only used by virtualbox
|
||||
NFSShare []string
|
||||
|
|
@ -119,6 +120,7 @@ type KubernetesConfig struct {
|
|||
LoadBalancerStartIP string // currently only used by MetalLB addon
|
||||
LoadBalancerEndIP string // currently only used by MetalLB addon
|
||||
CustomIngressCert string // used by Ingress addon
|
||||
RegistryAliases string // currently only used by registry-aliases addon
|
||||
ExtraOptions ExtraOptionSlice
|
||||
|
||||
ShouldLoadCachedImages bool
|
||||
|
|
|
|||
|
|
@ -33,10 +33,10 @@ var (
|
|||
const (
|
||||
// DefaultKubernetesVersion is the default Kubernetes version
|
||||
// dont update till #10545 is solved
|
||||
DefaultKubernetesVersion = "v1.23.5"
|
||||
DefaultKubernetesVersion = "v1.23.6"
|
||||
// NewestKubernetesVersion is the newest Kubernetes version to test against
|
||||
// NOTE: You may need to update coreDNS & etcd versions in pkg/minikube/bootstrapper/images/images.go
|
||||
NewestKubernetesVersion = "v1.23.6-rc.0"
|
||||
NewestKubernetesVersion = "v1.23.6"
|
||||
// OldestKubernetesVersion is the oldest Kubernetes version to test against
|
||||
OldestKubernetesVersion = "v1.16.0"
|
||||
// NoKubernetesVersion is the version used when users does NOT want to install kubernetes
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ const fileScheme = "file"
|
|||
// DefaultISOURLs returns a list of ISO URL's to consult by default, in priority order
|
||||
func DefaultISOURLs() []string {
|
||||
v := version.GetISOVersion()
|
||||
isoBucket := "minikube-builds/iso/14152"
|
||||
isoBucket := "minikube/iso"
|
||||
return []string{
|
||||
fmt.Sprintf("https://storage.googleapis.com/%s/minikube-%s-%s.iso", isoBucket, v, runtime.GOARCH),
|
||||
fmt.Sprintf("https://github.com/kubernetes/minikube/releases/download/%s/minikube-%s-%s.iso", v, v, runtime.GOARCH),
|
||||
|
|
|
|||
|
|
@ -46,6 +46,10 @@ const (
|
|||
SSH = "ssh"
|
||||
// KVM2 driver
|
||||
KVM2 = "kvm2"
|
||||
// QEMU2 driver
|
||||
QEMU2 = "qemu2"
|
||||
// QEMU driver
|
||||
QEMU = "qemu"
|
||||
// VirtualBox driver
|
||||
VirtualBox = "virtualbox"
|
||||
// HyperKit driver
|
||||
|
|
@ -156,6 +160,11 @@ func IsKVM(name string) bool {
|
|||
return name == KVM2 || name == AliasKVM
|
||||
}
|
||||
|
||||
// IsQEMU checks if the driver is a QEMU[2]
|
||||
func IsQEMU(name string) bool {
|
||||
return name == QEMU2 || name == QEMU
|
||||
}
|
||||
|
||||
// IsVM checks if the driver is a VM
|
||||
func IsVM(name string) bool {
|
||||
if IsKIC(name) || BareMetal(name) {
|
||||
|
|
@ -181,6 +190,9 @@ func AllowsPreload(driverName string) bool {
|
|||
|
||||
// NeedsPortForward returns true if driver is unable provide direct IP connectivity
|
||||
func NeedsPortForward(name string) bool {
|
||||
if IsQEMU(name) {
|
||||
return true
|
||||
}
|
||||
if !IsKIC(name) {
|
||||
return false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ var supportedDrivers = func() []string {
|
|||
if runtime.GOARCH == "arm64" {
|
||||
// on darwin/arm64 only docker and ssh are supported yet
|
||||
return []string{
|
||||
QEMU2,
|
||||
Docker,
|
||||
Podman,
|
||||
SSH,
|
||||
|
|
@ -50,6 +51,7 @@ var supportedDrivers = func() []string {
|
|||
VMwareFusion,
|
||||
HyperKit,
|
||||
VMware,
|
||||
QEMU2,
|
||||
Docker,
|
||||
Podman,
|
||||
SSH,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ var supportedDrivers = []string{
|
|||
VirtualBox,
|
||||
VMwareFusion,
|
||||
KVM2,
|
||||
QEMU2,
|
||||
QEMU,
|
||||
VMware,
|
||||
None,
|
||||
Docker,
|
||||
|
|
|
|||
|
|
@ -66,6 +66,8 @@ func TestMachineType(t *testing.T) {
|
|||
None: "bare metal machine",
|
||||
SSH: "bare metal machine",
|
||||
KVM2: "VM",
|
||||
QEMU2: "VM",
|
||||
QEMU: "VM",
|
||||
VirtualBox: "VM",
|
||||
HyperKit: "VM",
|
||||
VMware: "VM",
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ var supportedDrivers = []string{
|
|||
VMwareFusion,
|
||||
HyperV,
|
||||
VMware,
|
||||
QEMU2,
|
||||
Docker,
|
||||
Podman,
|
||||
SSH,
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import (
|
|||
|
||||
// ControlPlaneEndpoint returns the location where callers can reach this cluster
|
||||
func ControlPlaneEndpoint(cc *config.ClusterConfig, cp *config.Node, driverName string) (string, net.IP, int, error) {
|
||||
if NeedsPortForward(driverName) {
|
||||
if NeedsPortForward(driverName) && IsKIC(driverName) {
|
||||
port, err := oci.ForwardedPort(cc.Driver, cc.Name, cp.Port)
|
||||
if err != nil {
|
||||
klog.Warningf("failed to get forwarded control plane port %v", err)
|
||||
|
|
@ -45,6 +45,8 @@ func ControlPlaneEndpoint(cc *config.ClusterConfig, cp *config.Node, driverName
|
|||
hostname = cc.KubernetesConfig.APIServerName
|
||||
}
|
||||
return hostname, ips[0], port, err
|
||||
} else if NeedsPortForward(driverName) && IsQEMU(driverName) {
|
||||
return "localhost", net.IPv4(127, 0, 0, 1), cc.APIServerPort, nil
|
||||
}
|
||||
|
||||
// https://github.com/kubernetes/minikube/issues/3878
|
||||
|
|
|
|||
|
|
@ -122,6 +122,9 @@ func saveHost(api libmachine.API, h *host.Host, cfg *config.ClusterConfig, n *co
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if ip == "127.0.0.1" && driver.IsQEMU(h.Driver.DriverName()) {
|
||||
ip = "10.0.2.15"
|
||||
}
|
||||
n.IP = ip
|
||||
return config.SaveNode(cfg, n)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -558,6 +558,14 @@ func startMachine(cfg *config.ClusterConfig, node *config.Node, delOnFail bool)
|
|||
return runner, preExists, m, host, errors.Wrap(err, "Failed to validate network")
|
||||
}
|
||||
|
||||
if driver.IsQEMU(host.Driver.DriverName()) {
|
||||
apiServerPort, err := getPort()
|
||||
if err != nil {
|
||||
return runner, preExists, m, host, errors.Wrap(err, "Failed to find apiserver port")
|
||||
}
|
||||
cfg.APIServerPort = apiServerPort
|
||||
}
|
||||
|
||||
// Bypass proxy for minikube's vm host ip
|
||||
err = proxy.ExcludeIP(ip)
|
||||
if err != nil {
|
||||
|
|
@ -567,6 +575,21 @@ func startMachine(cfg *config.ClusterConfig, node *config.Node, delOnFail bool)
|
|||
return runner, preExists, m, host, err
|
||||
}
|
||||
|
||||
// getPort asks the kernel for a free open port that is ready to use
|
||||
func getPort() (int, error) {
|
||||
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
l, err := net.ListenTCP("tcp", addr)
|
||||
if err != nil {
|
||||
return -1, errors.Errorf("Error accessing port %d", addr.Port)
|
||||
}
|
||||
defer l.Close()
|
||||
return l.Addr().(*net.TCPAddr).Port, nil
|
||||
}
|
||||
|
||||
// startHostInternal starts a new minikube host using a VM or None
|
||||
func startHostInternal(api libmachine.API, cc *config.ClusterConfig, n *config.Node, delOnFail bool) (*host.Host, bool, error) {
|
||||
host, exists, err := machine.StartHost(api, cc, n)
|
||||
|
|
@ -638,7 +661,7 @@ func validateNetwork(h *host.Host, r command.Runner, imageRepository string) (st
|
|||
}
|
||||
}
|
||||
|
||||
if !driver.BareMetal(h.Driver.DriverName()) && !driver.IsKIC(h.Driver.DriverName()) {
|
||||
if !driver.BareMetal(h.Driver.DriverName()) && !driver.IsKIC(h.Driver.DriverName()) && !driver.IsQEMU(h.Driver.DriverName()) {
|
||||
if err := trySSH(h, ip); err != nil {
|
||||
return ip, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,6 +71,9 @@ var (
|
|||
// user attempted to run a Windows executable (.exe) inside of WSL rather than using the Linux binary
|
||||
WrongBinaryWSL = Kind{ID: "MK_WRONG_BINARY_WSL", ExitCode: ExProgramUnsupported}
|
||||
|
||||
// this feature is unimplemented for whatever reason
|
||||
Unimplemented = Kind{ID: "MK_UNIMPLEMENTED", ExitCode: ExProgramUnsupported}
|
||||
|
||||
// minikube failed to create a new Docker Machine api client
|
||||
NewAPIClient = Kind{ID: "MK_NEW_APICLIENT", ExitCode: ExProgramError}
|
||||
// minikube could not disable an addon, e.g. dashboard addon
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ import (
|
|||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/none"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/parallels"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/podman"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/qemu"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/qemu2"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/ssh"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/virtualbox"
|
||||
_ "k8s.io/minikube/pkg/minikube/registry/drvs/vmware"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package qemu
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package qemu
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
drvqemu "github.com/machine-drivers/docker-machine-driver-qemu"
|
||||
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/download"
|
||||
"k8s.io/minikube/pkg/minikube/driver"
|
||||
"k8s.io/minikube/pkg/minikube/localpath"
|
||||
"k8s.io/minikube/pkg/minikube/registry"
|
||||
)
|
||||
|
||||
const (
|
||||
docURL = "https://minikube.sigs.k8s.io/docs/reference/drivers/qemu/"
|
||||
)
|
||||
|
||||
func init() {
|
||||
if err := registry.Register(registry.DriverDef{
|
||||
Name: driver.QEMU,
|
||||
Config: configure,
|
||||
Status: status,
|
||||
Default: true,
|
||||
Priority: registry.Experimental,
|
||||
}); err != nil {
|
||||
panic(fmt.Sprintf("register failed: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
||||
name := config.MachineName(cc, n)
|
||||
return drvqemu.Driver{
|
||||
BaseDriver: &drivers.BaseDriver{
|
||||
MachineName: name,
|
||||
StorePath: localpath.MiniPath(),
|
||||
SSHUser: "docker",
|
||||
},
|
||||
Boot2DockerURL: download.LocalISOResource(cc.MinikubeISO),
|
||||
DiskSize: cc.DiskSize,
|
||||
Memory: cc.Memory,
|
||||
CPU: cc.CPUs,
|
||||
EnginePort: 2376,
|
||||
FirstQuery: true,
|
||||
DiskPath: filepath.Join(localpath.MiniPath(), "machines", name, fmt.Sprintf("%s.img", name)),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func status() registry.State {
|
||||
_, err := exec.LookPath("qemu-system-x86_64")
|
||||
if err != nil {
|
||||
return registry.State{Error: err, Fix: "Install qemu-system", Doc: docURL}
|
||||
}
|
||||
|
||||
return registry.State{Installed: true, Healthy: true, Running: true}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package qemu2
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package qemu2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"k8s.io/minikube/pkg/drivers/qemu"
|
||||
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/download"
|
||||
"k8s.io/minikube/pkg/minikube/driver"
|
||||
"k8s.io/minikube/pkg/minikube/localpath"
|
||||
"k8s.io/minikube/pkg/minikube/registry"
|
||||
)
|
||||
|
||||
const (
|
||||
docURL = "https://minikube.sigs.k8s.io/docs/reference/drivers/qemu2/"
|
||||
)
|
||||
|
||||
func init() {
|
||||
if err := registry.Register(registry.DriverDef{
|
||||
Name: driver.QEMU2,
|
||||
Init: func() drivers.Driver { return qemu.NewDriver("", "") },
|
||||
Config: configure,
|
||||
Status: status,
|
||||
Default: true,
|
||||
Priority: registry.Experimental,
|
||||
}); err != nil {
|
||||
panic(fmt.Sprintf("register failed: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
func qemuSystemProgram() (string, error) {
|
||||
arch := runtime.GOARCH
|
||||
switch arch {
|
||||
case "amd64":
|
||||
return "qemu-system-x86_64", nil
|
||||
case "arm64":
|
||||
return "qemu-system-aarch64", nil
|
||||
default:
|
||||
return "", fmt.Errorf("unknown arch: %s", arch)
|
||||
}
|
||||
}
|
||||
|
||||
func qemuFirmwarePath() (string, error) {
|
||||
arch := runtime.GOARCH
|
||||
// For macOS, find the correct brew installation path for qemu firmware
|
||||
if runtime.GOOS == "darwin" {
|
||||
var p, fw string
|
||||
switch arch {
|
||||
case "amd64":
|
||||
p = "/usr/local/Cellar/qemu"
|
||||
fw = "share/qemu/edk2-x86_64-code.fd"
|
||||
case "arm64":
|
||||
p = "/opt/homebrew/Cellar/qemu"
|
||||
fw = "share/qemu/edk2-aarch64-code.fd"
|
||||
default:
|
||||
return "", fmt.Errorf("unknown arch: %s", arch)
|
||||
}
|
||||
|
||||
v, err := ioutil.ReadDir(p)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("lookup qemu: %v", err)
|
||||
}
|
||||
for _, version := range v {
|
||||
if version.IsDir() {
|
||||
return path.Join(p, version.Name(), fw), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch arch {
|
||||
case "amd64":
|
||||
return "/usr/share/OVMF/OVMF_CODE.fd", nil
|
||||
case "arm64":
|
||||
return "/usr/share/AAVMF/AAVMF_CODE.fd", nil
|
||||
default:
|
||||
return "", fmt.Errorf("unknown arch: %s", arch)
|
||||
}
|
||||
}
|
||||
|
||||
func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
||||
name := config.MachineName(cc, n)
|
||||
qemuSystem, err := qemuSystemProgram()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var qemuMachine string
|
||||
var qemuCPU string
|
||||
switch runtime.GOARCH {
|
||||
case "amd64":
|
||||
qemuMachine = "" // default
|
||||
qemuCPU = "" // default
|
||||
case "arm64":
|
||||
qemuMachine = "virt"
|
||||
qemuCPU = "cortex-a72"
|
||||
// highmem=off needed, see https://patchwork.kernel.org/project/qemu-devel/patch/20201126215017.41156-9-agraf@csgraf.de/#23800615 for details
|
||||
if runtime.GOOS == "darwin" {
|
||||
qemuMachine = "virt,highmem=off"
|
||||
} else if _, err := os.Stat("/dev/kvm"); err == nil {
|
||||
qemuMachine = "virt,gic-version=3"
|
||||
qemuCPU = "host"
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown arch: %s", runtime.GOARCH)
|
||||
}
|
||||
qemuFirmware, err := qemuFirmwarePath()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return qemu.Driver{
|
||||
BaseDriver: &drivers.BaseDriver{
|
||||
MachineName: name,
|
||||
StorePath: localpath.MiniPath(),
|
||||
SSHUser: "docker",
|
||||
},
|
||||
Boot2DockerURL: download.LocalISOResource(cc.MinikubeISO),
|
||||
DiskSize: cc.DiskSize,
|
||||
Memory: cc.Memory,
|
||||
CPU: cc.CPUs,
|
||||
EnginePort: 2376,
|
||||
FirstQuery: true,
|
||||
DiskPath: filepath.Join(localpath.MiniPath(), "machines", name, fmt.Sprintf("%s.img", name)),
|
||||
Program: qemuSystem,
|
||||
BIOS: runtime.GOARCH != "arm64",
|
||||
MachineType: qemuMachine,
|
||||
CPUType: qemuCPU,
|
||||
Firmware: qemuFirmware,
|
||||
VirtioDrives: false,
|
||||
Network: "user",
|
||||
CacheMode: "default",
|
||||
IOMode: "threads",
|
||||
}, nil
|
||||
}
|
||||
|
||||
func status() registry.State {
|
||||
qemuSystem, err := qemuSystemProgram()
|
||||
if err != nil {
|
||||
return registry.State{Error: err, Doc: docURL}
|
||||
}
|
||||
|
||||
_, err = exec.LookPath(qemuSystem)
|
||||
if err != nil {
|
||||
return registry.State{Error: err, Fix: "Install qemu-system", Doc: docURL}
|
||||
}
|
||||
|
||||
qemuFirmware, err := qemuFirmwarePath()
|
||||
if err != nil {
|
||||
return registry.State{Error: err, Doc: docURL}
|
||||
}
|
||||
|
||||
if _, err := os.Stat(qemuFirmware); err != nil && runtime.GOARCH == "arm64" {
|
||||
return registry.State{Error: err, Fix: "Install uefi firmware", Doc: docURL}
|
||||
}
|
||||
|
||||
return registry.State{Installed: true, Healthy: true, Running: true}
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@ minikube start [flags]
|
|||
--apiserver-names strings A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine
|
||||
--apiserver-port int The apiserver listening port (default 8443)
|
||||
--auto-update-drivers If set, automatically updates drivers to the latest version. Defaults to true. (default true)
|
||||
--base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.30-1647797120-13815@sha256:90e8f7ee4065da728c0b80d303827e05ce4421985fe9bd7bdca30a55218347b5")
|
||||
--base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase:v0.0.31@sha256:c3375f1b260bd936aa532a0c749626e07d94ab129a7f2395e95345aa04ca708c")
|
||||
--binary-mirror string Location to fetch kubectl, kubelet, & kubeadm binaries from.
|
||||
--cache-images If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none. (default true)
|
||||
--cert-expiration duration Duration until minikube certificate expiration, defaults to three years (26280h). (default 26280h0m0s)
|
||||
|
|
@ -69,9 +69,9 @@ minikube start [flags]
|
|||
--insecure-registry strings Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.
|
||||
--install-addons If set, install addons. Defaults to true. (default true)
|
||||
--interactive Allow user prompts for more information (default true)
|
||||
--iso-url strings Locations to fetch the minikube ISO from. (default [https://storage.googleapis.com/minikube-builds/iso/14152/minikube-v1.25.2-1652384524-14152-amd64.iso,https://github.com/kubernetes/minikube/releases/download/v1.25.2-1652384524-14152/minikube-v1.25.2-1652384524-14152-amd64.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.25.2-1652384524-14152-amd64.iso,https://storage.googleapis.com/minikube-builds/iso/14152/minikube-v1.25.2-1652384524-14152.iso,https://github.com/kubernetes/minikube/releases/download/v1.25.2-1652384524-14152/minikube-v1.25.2-1652384524-14152.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.25.2-1652384524-14152.iso])
|
||||
--iso-url strings Locations to fetch the minikube ISO from. (default [https://storage.googleapis.com/minikube/iso/minikube-v1.26.0-beta.1-amd64.iso,https://github.com/kubernetes/minikube/releases/download/v1.26.0-beta.1/minikube-v1.26.0-beta.1-amd64.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.26.0-beta.1-amd64.iso,https://storage.googleapis.com/minikube/iso/minikube-v1.26.0-beta.1.iso,https://github.com/kubernetes/minikube/releases/download/v1.26.0-beta.1/minikube-v1.26.0-beta.1.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.26.0-beta.1.iso])
|
||||
--keep-context This will keep the existing kubectl context and will create a minikube context.
|
||||
--kubernetes-version string The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.23.5, 'latest' for v1.23.6-rc.0). Defaults to 'stable'.
|
||||
--kubernetes-version string The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.23.6, 'latest' for v1.23.6). Defaults to 'stable'.
|
||||
--kvm-gpu Enable experimental NVIDIA GPU support in minikube
|
||||
--kvm-hidden Hide the hypervisor signature from the guest in minikube (kvm2 driver only)
|
||||
--kvm-network string The KVM default network name. (kvm2 driver only) (default "default")
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ minikube was interrupted by an OS signal
|
|||
"MK_WRONG_BINARY_WSL" (Exit code ExProgramUnsupported)
|
||||
user attempted to run a Windows executable (.exe) inside of WSL rather than using the Linux binary
|
||||
|
||||
"MK_UNIMPLEMENTED" (Exit code ExProgramUnsupported)
|
||||
this feature is unimplemented for whatever reason
|
||||
|
||||
"MK_NEW_APICLIENT" (Exit code ExProgramError)
|
||||
minikube failed to create a new Docker Machine api client
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ This step uses the git tag to publish new binaries to GCS and create a GitHub re
|
|||
* Ensure that you are logged in (top right)
|
||||
* Click "▶️ Build with Parameters" (left)
|
||||
* `VERSION_MAJOR`, `VERSION_MINOR`, and `VERSION_BUILD` should reflect the values in your Makefile
|
||||
* For `ISO_SHA256`, run: `gsutil cat gs://minikube/iso/minikube-v<version>.iso.sha256`
|
||||
* For `ISO_SHA256_AMD64`, run: `gsutil cat gs://minikube/iso/minikube-v<version>-amd64.iso.sha256`
|
||||
* For `ISO_SHA256_ARM64`, run: `gsutil cat gs://minikube/iso/minikube-v<version>-arm64.iso.sha256`
|
||||
* Click *Build*
|
||||
|
||||
## Check the release logs
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library
|
|||
* [Docker]({{<ref "docker.md">}}) - container-based (preferred)
|
||||
* [KVM2]({{<ref "kvm2.md">}}) - VM-based (preferred)
|
||||
* [VirtualBox]({{<ref "virtualbox.md">}}) - VM
|
||||
* [QEMU]({{<ref "qemu.md">}}) - VM (experimental)
|
||||
* [None]({{<ref "none.md">}}) - bare-metal
|
||||
* [Podman]({{<ref "podman.md">}}) - container (experimental)
|
||||
* [SSH]({{<ref "ssh.md">}}) - remote ssh
|
||||
|
|
@ -29,6 +30,7 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library
|
|||
* [VirtualBox]({{<ref "virtualbox.md">}}) - VM
|
||||
* [Parallels]({{<ref "parallels.md">}}) - VM
|
||||
* [VMware Fusion]({{<ref "vmware.md">}}) - VM
|
||||
* [QEMU]({{<ref "qemu.md">}}) - VM (experimental)
|
||||
* [SSH]({{<ref "ssh.md">}}) - remote ssh
|
||||
|
||||
## Windows
|
||||
|
|
@ -37,4 +39,5 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library
|
|||
* [Docker]({{<ref "docker.md">}}) - VM + Container (preferred)
|
||||
* [VirtualBox]({{<ref "virtualbox.md">}}) - VM
|
||||
* [VMware Workstation]({{<ref "vmware.md">}}) - VM
|
||||
* [QEMU]({{<ref "qemu.md">}}) - VM (experimental)
|
||||
* [SSH]({{<ref "ssh.md">}}) - remote ssh
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
title: "qemu"
|
||||
weight: 3
|
||||
description: >
|
||||
QEMU driver
|
||||
aliases:
|
||||
- /docs/reference/drivers/qemu
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The `qemu` driver users QEMU (system) for VM creation.
|
||||
|
||||
<https://www.qemu.org/>
|
||||
|
||||
## Issues
|
||||
|
||||
* [Full list of open 'qemu' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fqemu-driver)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
* Run `minikube start --alsologtostderr -v=4` to debug crashes
|
||||
|
|
@ -25,10 +25,77 @@ A NodePort service is the most basic way to get external traffic directly to you
|
|||
We also have a shortcut for fetching the minikube IP and a service's `NodePort`:
|
||||
|
||||
```shell
|
||||
minikube service --url <service-name>
|
||||
minikube service <service-name> --url
|
||||
```
|
||||
|
||||
## Getting the NodePort using kubectl
|
||||
### Using `minikube service` with tunnel
|
||||
|
||||
The network is limited if using the Docker driver on Darwin, Windows, or WSL, and the Node IP is not reachable directly.
|
||||
|
||||
Running minikube on Linux with the Docker driver will result in no tunnel being created.
|
||||
|
||||
Services of type `NodePort` can be exposed via the `minikube service <service-name> --url` command. It must be run in a separate terminal window to keep the [tunnel](https://en.wikipedia.org/wiki/Port_forwarding#Local_port_forwarding) open. Ctrl-C in the terminal can be used to terminate the process at which time the network routes will be cleaned up.
|
||||
|
||||
### Example of NodePort
|
||||
|
||||
1. Create a Kubernetes deployment
|
||||
|
||||
```shell
|
||||
kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
|
||||
```
|
||||
|
||||
2. Create a Kubernetes service type NodePort
|
||||
|
||||
```shell
|
||||
kubectl expose deployment hello-minikube1 --type=NodePort --port=8080
|
||||
```
|
||||
|
||||
3. Check Node Port
|
||||
|
||||
```shell
|
||||
kubectl get svc
|
||||
```
|
||||
<pre>
|
||||
$ kc get svc
|
||||
AME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
hello-minikube1 NodePort 10.100.238.34 <none> 8080:31389/TCP 3s
|
||||
</pre>
|
||||
|
||||
4. Run service tunnel
|
||||
|
||||
```shell
|
||||
minikube service hello-minikube1 --url
|
||||
```
|
||||
|
||||
`minikube service hello-minikube1 --url` runs as a process, creating a [tunnel](https://en.wikipedia.org/wiki/Port_forwarding#Local_port_forwarding) to the cluster. The command exposes the service directly to any program running on the host operating system.
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
service output example
|
||||
</summary>
|
||||
<pre>
|
||||
$ minikube service hello-minikube1 --url
|
||||
http://127.0.0.1:57123
|
||||
❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
|
||||
</pre>
|
||||
</details>
|
||||
|
||||
Check ssh tunnel in another terminal
|
||||
|
||||
```shell
|
||||
$ ps -ef | grep docker@127.0.0.1
|
||||
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -N docker@127.0.0.1 -p 55972 -i /Users/FOO/.minikube/machines/minikube/id_rsa -L TUNNEL_PORT:CLUSTER_IP:TARGET_PORT
|
||||
```
|
||||
|
||||
5. Try in your browser
|
||||
|
||||
Open in your browser (ensure there is no proxy set)
|
||||
|
||||
```shell
|
||||
http://127.0.0.1:TUNNEL_PORT
|
||||
```
|
||||
|
||||
### Getting the NodePort using kubectl
|
||||
|
||||
The minikube VM is exposed to the host system via a host-only IP address, that can be obtained with the `minikube ip` command. Any services of type `NodePort` can be accessed over that IP address, on the NodePort.
|
||||
|
||||
|
|
@ -54,77 +121,78 @@ This flag also accepts a comma separated list of ports and port ranges.
|
|||
|
||||
A LoadBalancer service is the standard way to expose a service to the internet. With this method, each service gets its own IP address.
|
||||
|
||||
## Using `minikube tunnel`
|
||||
### Using `minikube tunnel`
|
||||
|
||||
Services of type `LoadBalancer` can be exposed via the `minikube tunnel` command. It must be run in a separate terminal window to keep the `LoadBalancer` running. Ctrl-C in the terminal can be used to terminate the process at which time the network routes will be cleaned up.
|
||||
|
||||
## Example
|
||||
### Example of LoadBalancer
|
||||
|
||||
#### Run tunnel in a separate terminal
|
||||
1. Run the tunnel in a separate terminal
|
||||
|
||||
it will ask for password.
|
||||
It will ask for a password.
|
||||
|
||||
```shell
|
||||
minikube tunnel
|
||||
```
|
||||
```shell
|
||||
minikube tunnel
|
||||
```
|
||||
|
||||
`minikube tunnel` runs as a process, creating a network route on the host to the service CIDR of the cluster using the cluster's IP address as a gateway. The tunnel command exposes the external IP directly to any program running on the host operating system.
|
||||
`minikube tunnel` runs as a process, creating a network route on the host to the service CIDR of the cluster using the cluster's IP address as a gateway. The tunnel command exposes the external IP directly to any program running on the host operating system.
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
tunnel output example
|
||||
</summary>
|
||||
<pre>
|
||||
Password:
|
||||
Status:
|
||||
machine: minikube
|
||||
pid: 39087
|
||||
route: 10.96.0.0/12 -> 192.168.64.194
|
||||
minikube: Running
|
||||
services: [hello-minikube]
|
||||
errors:
|
||||
minikube: no errors
|
||||
router: no errors
|
||||
loadbalancer emulator: no errors
|
||||
...
|
||||
...
|
||||
...
|
||||
</pre>
|
||||
</details>
|
||||
<details>
|
||||
<summary>
|
||||
tunnel output example
|
||||
</summary>
|
||||
<pre>
|
||||
Password:
|
||||
Status:
|
||||
machine: minikube
|
||||
pid: 39087
|
||||
route: 10.96.0.0/12 -> 192.168.64.194
|
||||
minikube: Running
|
||||
services: [hello-minikube]
|
||||
errors:
|
||||
minikube: no errors
|
||||
router: no errors
|
||||
loadbalancer emulator: no errors
|
||||
...
|
||||
...
|
||||
...
|
||||
</pre>
|
||||
</details>
|
||||
|
||||
#### Create a kubernetes deployment
|
||||
2. Create a Kubernetes deployment
|
||||
|
||||
```shell
|
||||
kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
|
||||
```
|
||||
```shell
|
||||
kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
|
||||
```
|
||||
|
||||
#### Create a kubernetes service type LoadBalancer
|
||||
3. Create a Kubernetes service with type LoadBalancer
|
||||
|
||||
```shell
|
||||
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
|
||||
```
|
||||
```shell
|
||||
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
|
||||
```
|
||||
|
||||
### Check external IP
|
||||
4. Check the external IP
|
||||
|
||||
```shell
|
||||
kubectl get svc
|
||||
```
|
||||
<pre>
|
||||
$ kc get svc
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
hello-minikube1 LoadBalancer 10.96.184.178 10.96.184.178 8080:30791/TCP 40s
|
||||
</pre>
|
||||
```shell
|
||||
kubectl get svc
|
||||
```
|
||||
<pre>
|
||||
$ kc get svc
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
hello-minikube1 LoadBalancer 10.96.184.178 10.96.184.178 8080:30791/TCP 40s
|
||||
</pre>
|
||||
|
||||
note that without minikube tunnel, kubernetes would be showing external IP as "pending".
|
||||
Note that without minikube tunnel, Kubernetes will show the external IP as "pending".
|
||||
|
||||
### Try in your browser
|
||||
5. Try in your browser
|
||||
|
||||
open in your browser (make sure there is no proxy set)
|
||||
```
|
||||
http://REPLACE_WITH_EXTERNAL_IP:8080
|
||||
```
|
||||
Open in your browser (ensure there is no proxy set)
|
||||
|
||||
Each service will get its own external ip.
|
||||
```shell
|
||||
http://REPLACE_WITH_EXTERNAL_IP:8080
|
||||
```
|
||||
|
||||
Each service will get its own external IP.
|
||||
|
||||
----
|
||||
|
||||
|
|
@ -150,12 +218,12 @@ Adding a route requires root privileges for the user, and thus there are differe
|
|||
|
||||
<https://superuser.com/questions/1328452/sudoers-nopasswd-for-single-executable-but-allowing-others>
|
||||
|
||||
|
||||
### Access to ports <1024 on Windows requires root permission
|
||||
|
||||
If you are using Docker driver on Windows, there is a chance that you have an old version of SSH client you might get an error like - `Privileged ports can only be forwarded by root.` or you might not be able to access the service even after `minikube tunnel` if the access port is less than 1024 but for ports greater than 1024 works fine.
|
||||
|
||||
In order to resolve this, ensure that you are running the latest version of SSH client. You can install the latest version of the SSH client on Windows by running the following in a Command Prompt with an Administrator Privileges (Requires [chocolatey package manager](https://chocolatey.org/install))
|
||||
```
|
||||
```cmd
|
||||
choco install openssh
|
||||
```
|
||||
The latest version (`OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5`) which is available on Windows 10 by default doesn't work. You can track the issue with this over here - https://github.com/PowerShell/Win32-OpenSSH/issues/1693
|
||||
The latest version (`OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5`) which is available on Windows 10 by default doesn't work. You can track the issue with this over here - https://github.com/PowerShell/Win32-OpenSSH/issues/1693
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue