diff --git a/.github/ISSUE_TEMPLATE/__en-US.md b/.github/ISSUE_TEMPLATE/__en-US.md index c930965aa515..f5f0b81e62f2 100644 --- a/.github/ISSUE_TEMPLATE/__en-US.md +++ b/.github/ISSUE_TEMPLATE/__en-US.md @@ -9,14 +9,10 @@ about: Report an issue 2. 3. -**Full output of `minikube logs` command:** -
- - -
+**Run `minikube logs --file=logs.txt` and drag and drop the log file into this issue** -**Full output of failed command:** +**Full output of failed command if not `minikube start`:**
diff --git a/.github/ISSUE_TEMPLATE/ja.md b/.github/ISSUE_TEMPLATE/ja.md new file mode 100644 index 000000000000..bbf5d32b6c60 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ja.md @@ -0,0 +1,20 @@ +--- +name: 日本語 +about: 問題の報告 +labels: l/ja +--- + +**問題を再現するための手順:** + +1. +2. +3. + +**`minikube logs --file=logs.txt` を実行して、このissueにログファイルをドラッグ&ドロップしてください** + + +**`minikube start` ではない場合は、失敗したコマンドの全出力:** +
+ + +
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c9c14c92dd83..5bed7747198d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,10 +12,10 @@ on: - "!deploy/iso/**" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: build_minikube: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -42,7 +42,7 @@ jobs: name: minikube_binaries path: out lint: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -61,7 +61,7 @@ jobs: run: make test continue-on-error: false unit_test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 10415104ef26..20d2f0fcfbef 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -6,10 +6,10 @@ on: - master env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: generate-docs: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 diff --git a/.github/workflows/functional_verified.yml b/.github/workflows/functional_verified.yml new file mode 100644 index 000000000000..464d4dc0cb79 --- /dev/null +++ b/.github/workflows/functional_verified.yml @@ -0,0 +1,218 @@ +name: Functional_Verified +on: + workflow_dispatch: + pull_request: + paths: + - "go.mod" + - "**.go" + - "**.yml" + - "**.yaml" + - "Makefile" + - "!deploy/kicbase/**" + - "!deploy/iso/**" + types: + - labeled + - opened + - synchronize + label: + types: + - created + - edited + - deleted +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.17.1' + +jobs: + # Runs before all other jobs + # builds the minikube binaries + build_minikube: + if: contains(github.event.pull_request.labels.*.name, 'ok-to-test') + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: ${{env.GO_VERSION}} + stable: true + - name: Download Dependencies + run: go mod download + - name: Build Binaries + run: | + sudo apt-get update + sudo apt-get install -y libvirt-dev + MINIKUBE_BUILD_IN_DOCKER=y make cross e2e-cross debs + cp -r test/integration/testdata ./out + whoami + echo github ref $GITHUB_REF + echo workflow $GITHUB_WORKFLOW + echo home $HOME + echo event name $GITHUB_EVENT_NAME + echo workspace $GITHUB_WORKSPACE + echo "end of debug stuff" + echo $(which jq) + - uses: actions/upload-artifact@v1 + with: + name: minikube_binaries + path: out + functional_docker_ubuntu_arm64: + needs: [ build_minikube ] + runs-on: [ self-hosted, arm64 ] + env: + TIME_ELAPSED: time + JOB_NAME: "functional_docker_ubuntu_arm64" + GOPOGH_RESULT: "" + SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 + steps: + - name: Install tools + shell: bash + run: | + sudo apt update + sudo apt install -y jq docker git cron + sudo usermod -aG docker $USER + + - name: Init + shell: bash + run: | + if [[ -f /var/run/reboot.in.progress ]]; then + echo "reboot in progress" + exit 1 + fi + sudo touch /var/run/job.in.progress + rm -rf cleanup.sh install_cleanup.sh + # after this PR is merged, update URLs to get the scripts from github master + wget https://storage.googleapis.com/minikube-ci-utils/cleanup.sh + wget https://storage.googleapis.com/minikube-ci-utils/install_cleanup.sh + chmod +x cleanup.sh install_cleanup.sh + ./install_cleanup.sh + + - name: Install kubectl + shell: bash + run: | + curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl + sudo install kubectl /usr/local/bin/kubectl + kubectl version --client=true + + - name: Install gopogh + shell: bash + run: | + curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 + sudo install gopogh-linux-arm64 /usr/local/bin/gopogh + + - name: Docker Info + shell: bash + run: | + echo "--------------------------" + docker version || true + echo "--------------------------" + docker info || true + echo "--------------------------" + docker system df || true + echo "--------------------------" + docker system info --format='{{json .}}'|| true + echo "--------------------------" + docker ps || true + echo "--------------------------" + whoami || true + 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@v2 + with: + go-version: ${{env.GO_VERSION}} + stable: true + + - name: Download Binaries + uses: actions/download-artifact@v1 + with: + name: minikube_binaries + + - name: Pre-cleanup + continue-on-error: true + run: | + minikube_binaries/minikube-linux-arm64 delete --all --purge || true + docker kill $(docker ps -aq) || true + docker system prune --volumes --force || true + + - name: Run Integration Test + continue-on-error: false + # bash {0} to allow test to continue to next step. in case of + shell: bash {0} + run: | + cd minikube_binaries + mkdir -p report + mkdir -p testhome + chmod a+x e2e-* + chmod a+x minikube-* + MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-arm64 delete --all --purge + START_TIME=$(date -u +%s) + KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=25m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt + END_TIME=$(date -u +%s) + TIME_ELAPSED=$(($END_TIME-$START_TIME)) + min=$((${TIME_ELAPSED}/60)) + sec=$((${TIME_ELAPSED}%60)) + TIME_ELAPSED="${min} min $sec seconds " + echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV + - name: Generate HTML Report + shell: bash + run: | + cd minikube_binaries + export PATH=${PATH}:`go env GOPATH`/bin + go tool test2json -t < ./report/testout.txt > ./report/testout.json || true + STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true + echo status: ${STAT} + FailNum=$(echo $STAT | jq '.NumberOfFail') + TestsNum=$(echo $STAT | jq '.NumberOfTests') + GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" + echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV + echo 'STAT<> $GITHUB_ENV + echo "${STAT}" >> $GITHUB_ENV + echo 'EOF' >> $GITHUB_ENV + + - uses: actions/upload-artifact@v1 + with: + name: functional_docker_ubuntu_arm64 + path: minikube_binaries/report + + - name: The End Result - functional_docker_ubuntu_arm64 + shell: bash + run: | + echo ${GOPOGH_RESULT} + numFail=$(echo $STAT | jq '.NumberOfFail') + numPass=$(echo $STAT | jq '.NumberOfPass') + echo "*******************${numPass} Passes :) *******************" + echo $STAT | jq '.PassedTests' || true + echo "*******************************************************" + echo "---------------- ${numFail} Failures :( ----------------------------" + echo $STAT | jq '.FailedTests' || true + echo "-------------------------------------------------------" + if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi + if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi + if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi + if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi + + - name: finalize + shell: bash + run: sudo rm -rf /var/run/job.in.progress + # After all integration tests finished + # collect all the reports and upload them + upload_all_reports: + needs: + [ + functional_docker_ubuntu_arm64, + ] + runs-on: ubuntu-20.04 + steps: + - name: download all extra reports + uses: actions/download-artifact@v2-preview + - name: upload all extra reports + shell: bash {0} + continue-on-error: true + run: | + mkdir -p all_reports + cp -r ./functional_docker_ubuntu_arm64 ./all_reports/ + - uses: actions/upload-artifact@v1 + with: + name: all_reports + path: all_reports diff --git a/.github/workflows/leaderboard.yml b/.github/workflows/leaderboard.yml index 0c78b6e87e1c..1f120156d957 100644 --- a/.github/workflows/leaderboard.yml +++ b/.github/workflows/leaderboard.yml @@ -7,10 +7,10 @@ on: release: types: [published] env: - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: update-leaderboard: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index d735338d83a3..e362bf230381 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -14,12 +14,12 @@ on: - "!deploy/iso/**" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: # Runs before all other jobs # builds the minikube binaries build_minikube: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -46,7 +46,7 @@ jobs: name: minikube_binaries path: out lint: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -65,7 +65,7 @@ jobs: run: make test continue-on-error: false unit_test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -92,7 +92,7 @@ jobs: JOB_NAME: "functional_docker_ubuntu" GOPOGH_RESULT: "" SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: Install kubectl shell: bash @@ -191,7 +191,7 @@ jobs: JOB_NAME: "functional_docker_containerd_ubuntu" GOPOGH_RESULT: "" SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: Install kubectl shell: bash @@ -484,286 +484,6 @@ jobs: if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi if [ "$numPass" -lt 33 ];then echo "*** Failed to pass at least 33 ! ***";exit 2;fi if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_windows" - GOPOGH_RESULT: "" - STAT: "" - runs-on: [self-hosted, windows-10-ent, 8CPUs] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - .\minikube-windows-amd64.exe delete -p $_.Name - Suspend-VM $_.Name - Stop-VM $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - shell: powershell - run: | - echo $env:computername - echo "------------------------" - docker info - echo "------------------------" - docker volume ls - echo "------------------------" - docker system info --format '{{json .}}' - echo "------------------------" - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=docker" --test.timeout=15m --timeout-multiplier=1 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_windows - path: minikube_binaries/report - - name: The End Result functional_docker_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } - functional_hyperv_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_hyperv_windows" - GOPOGH_RESULT: "" - runs-on: [self-hosted, windows-10-ent, Standard_D16s_v3, hyperv] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - Stop-VM -Name $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - echo $env:computername - Get-WmiObject -class Win32_ComputerSystem - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=hyperv" --test.timeout=20m --timeout-multiplier=1.5 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_hyperv_windows - path: minikube_binaries/report - - name: The End Result functional_hyperv_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } functional_baremetal_ubuntu18_04: needs: [build_minikube] env: @@ -858,141 +578,6 @@ jobs: if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi if [ "$numPass" -lt 26 ];then echo "*** Failed to pass at least 26 ! ***";exit 2;fi if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_ubuntu_arm64: - needs: [ build_minikube ] - runs-on: [ self-hosted, arm64 ] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_ubuntu_arm64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq docker git cron - sudo usermod -aG docker $USER - - - name: Init - shell: bash - run: | - if [[ -f /var/run/reboot.in.progress ]]; then - echo "reboot in progress" - exit 1 - fi - sudo touch /var/run/job.in.progress - rm -rf cleanup.sh install_cleanup.sh - # after this PR is merged, update URLs to get the scripts from github master - wget https://storage.googleapis.com/minikube-ci-utils/cleanup.sh - wget https://storage.googleapis.com/minikube-ci-utils/install_cleanup.sh - chmod +x cleanup.sh install_cleanup.sh - ./install_cleanup.sh - - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 - sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - whoami || true - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Pre-cleanup - continue-on-error: true - run: | - minikube_binaries/minikube-linux-arm64 delete --all --purge || true - docker kill $(docker ps -aq) || true - docker system prune --volumes --force || true - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=25m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_ubuntu_arm64 - path: minikube_binaries/report - - - name: The End Result - functional_docker_ubuntu_arm64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi # After all integration tests finished # collect all the reports and upload them upload_all_reports: @@ -1001,14 +586,11 @@ jobs: [ functional_docker_ubuntu, functional_docker_containerd_ubuntu, - functional_docker_ubuntu_arm64, functional_podman_ubuntu, functional_virtualbox_macos, - functional_docker_windows, - functional_hyperv_windows, functional_baremetal_ubuntu18_04, ] - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: download all reports uses: actions/download-artifact@v2-preview @@ -1020,11 +602,8 @@ jobs: ls -lah cp -r ./functional_docker_ubuntu ./all_reports/ cp -r ./functional_docker_containerd_ubuntu ./all_reports/ - cp -r ./functional_docker_ubuntu_arm64 ./all_reports/ cp -r ./functional_podman_ubuntu ./all_reports/ cp -r ./functional_virtualbox_macos ./all_reports/ - cp -r ./functional_docker_windows ./all_reports/ - cp -r ./functional_hyperv_windows ./all_reports/ cp -r ./functional_baremetal_ubuntu18_04 ./all_reports/ - uses: actions/upload-artifact@v1 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 1b1c36b1734f..2d620c40fd66 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -12,12 +12,12 @@ on: - "!deploy/iso/**" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: # Runs before all other jobs # builds the minikube binaries build_minikube: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -44,7 +44,7 @@ jobs: name: minikube_binaries path: out lint: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -63,7 +63,7 @@ jobs: run: make test continue-on-error: false unit_test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -90,7 +90,7 @@ jobs: JOB_NAME: "functional_docker_ubuntu" GOPOGH_RESULT: "" SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: Install kubectl shell: bash @@ -189,7 +189,7 @@ jobs: JOB_NAME: "functional_docker_containerd_ubuntu" GOPOGH_RESULT: "" SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: Install kubectl shell: bash @@ -485,286 +485,6 @@ jobs: if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi if [ "$numPass" -lt 33 ];then echo "*** Failed to pass at least 33 ! ***";exit 2;fi if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_windows" - GOPOGH_RESULT: "" - STAT: "" - runs-on: [self-hosted, windows-10-ent, 8CPUs] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - .\minikube-windows-amd64.exe delete -p $_.Name - Suspend-VM $_.Name - Stop-VM $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - shell: powershell - run: | - echo $env:computername - echo "------------------------" - docker info - echo "------------------------" - docker volume ls - echo "------------------------" - docker system info --format '{{json .}}' - echo "------------------------" - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=docker" --test.timeout=15m --timeout-multiplier=1 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_windows - path: minikube_binaries/report - - name: The End Result functional_docker_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } - functional_hyperv_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_hyperv_windows" - GOPOGH_RESULT: "" - runs-on: [self-hosted, windows-10-ent, Standard_D16s_v3, hyperv] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - Stop-VM -Name $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - echo $env:computername - Get-WmiObject -class Win32_ComputerSystem - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=hyperv" --test.timeout=20m --timeout-multiplier=1.5 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_hyperv_windows - path: minikube_binaries/report - - name: The End Result functional_hyperv_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } functional_baremetal_ubuntu18_04: needs: [build_minikube] env: @@ -860,146 +580,6 @@ jobs: if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi if [ "$numPass" -lt 26 ];then echo "*** Failed to pass at least 26 ! ***";exit 2;fi if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_ubuntu_arm64: - needs: [ build_minikube ] - runs-on: [ self-hosted, arm64 ] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_ubuntu_arm64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq docker git cron - sudo usermod -aG docker $USER - - - name: Init - shell: bash - run: | - if [[ -f /var/run/reboot.in.progress ]]; then - echo "reboot in progress" - exit 1 - fi - sudo touch /var/run/job.in.progress - rm -rf cleanup.sh install_cleanup.sh - # after this PR is merged, update URLs to get the scripts from github master - wget https://storage.googleapis.com/minikube-ci-utils/cleanup.sh - wget https://storage.googleapis.com/minikube-ci-utils/install_cleanup.sh - chmod +x cleanup.sh install_cleanup.sh - ./install_cleanup.sh - - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 - sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - whoami || true - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Pre-cleanup - continue-on-error: true - run: | - minikube_binaries/minikube-linux-arm64 delete --all --purge || true - docker kill $(docker ps -aq) || true - docker system prune --volumes --force || true - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-arm64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=25m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_ubuntu_arm64 - path: minikube_binaries/report - - - name: The End Result - functional_docker_ubuntu_arm64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - - - name: finalize - shell: bash - run: sudo rm -rf /var/run/job.in.progress # After all integration tests finished # collect all the reports and upload them upload_all_reports: @@ -1009,13 +589,10 @@ jobs: functional_docker_ubuntu, functional_docker_containerd_ubuntu, functional_podman_ubuntu, - functional_docker_ubuntu_arm64, functional_virtualbox_macos, - functional_docker_windows, - functional_hyperv_windows, functional_baremetal_ubuntu18_04, ] - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: download all reports uses: actions/download-artifact@v2-preview @@ -1028,10 +605,7 @@ jobs: cp -r ./functional_docker_ubuntu ./all_reports/ cp -r ./functional_docker_containerd_ubuntu ./all_reports/ cp -r ./functional_podman_ubuntu ./all_reports/ - cp -r ./functional_docker_ubuntu_arm64 ./all_reports/ cp -r ./functional_virtualbox_macos ./all_reports/ - cp -r ./functional_docker_windows ./all_reports/ - cp -r ./functional_hyperv_windows ./all_reports/ cp -r ./functional_baremetal_ubuntu18_04 ./all_reports/ - uses: actions/upload-artifact@v1 diff --git a/.github/workflows/pr_verified.yaml b/.github/workflows/pr_verified.yaml deleted file mode 100644 index 5dabbfd60f87..000000000000 --- a/.github/workflows/pr_verified.yaml +++ /dev/null @@ -1,1033 +0,0 @@ -name: PR_Verified -on: - workflow_dispatch: - pull_request: - paths: - - "go.mod" - - "**.go" - - "**.yml" - - "**.yaml" - - "Makefile" - - "!deploy/kicbase/**" - - "!deploy/iso/**" - types: - - labeled - - opened - - synchronize - label: - types: - - created - - edited - - deleted -env: - GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' - -jobs: - # Runs before all other jobs - # builds the minikube binaries - build_minikube: - if: contains(github.event.pull_request.labels.*.name, 'pr_verified') - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Download Dependencies - run: go mod download - - name: Build Binaries - run: | - sudo apt-get update - sudo apt-get install -y libvirt-dev - MINIKUBE_BUILD_IN_DOCKER=y make cross e2e-cross debs - cp -r test/integration/testdata ./out - whoami - echo github ref $GITHUB_REF - echo workflow $GITHUB_WORKFLOW - echo home $HOME - echo event name $GITHUB_EVENT_NAME - echo workspace $GITHUB_WORKSPACE - echo "end of debug stuff" - echo $(which jq) - - uses: actions/upload-artifact@v1 - with: - name: minikube_binaries - path: out - pkg_install_amd64: - needs: [ build_minikube ] - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "pkg_install_amd64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - - name: Install Go - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -test.run TestDebPackageInstall -test.timeout=10m -test.v -timeout-multiplier=1.5 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out ./report/testout.html -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: pkg_install_amd64 - path: minikube_binaries/report - - - name: The End Result - pkg_install_amd64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - pkg_install_arm64: - needs: [ build_minikube ] - runs-on: [ self-hosted, arm64 ] - env: - TIME_ELAPSED: time - JOB_NAME: "pkg_install_arm64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 - sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - - - name: Install Go - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -test.run TestDebPackageInstall -test.timeout=10m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out ./report/testout.html -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: pkg_install_arm64 - path: minikube_binaries/report - - - name: The End Result - pkg_install_arm64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - addons_certs_docker_ubuntu: - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "addons_certs_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info || true - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.run "(TestAddons|TestCertOptions|TestSkaffold)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: addons_certs_docker_ubuntu - path: minikube_binaries/report - - name: The End Result - addons_certs_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 6 ];then echo "*** Failed to pass at least 6 ! ***";exit 2;fi - addons_certs_virtualbox_macos: - runs-on: macos-10.15 - env: - TIME_ELAPSED: time - JOB_NAME: "addons_certs_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Install docker - shell: bash - run: | - brew install docker-machine docker - sudo docker --version - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - cp minikube-darwin-amd64 minikube - chmod a+x minikube* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox -test.run "(TestDownloadOnly|TestAddons|TestCertOptions|TestSkaffold)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: addons_certs_virtualbox_macos - path: minikube_binaries/report - - name: The End Result - addons_certs_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 6 ];then echo "*** Failed to pass at least 6 ! ***";exit 2;fi - multinode_docker_ubuntu: - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "multinode_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info || true - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.run "TestMultiNode" -test.timeout=15m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: multinode_docker_ubuntu - path: minikube_binaries/report - - name: The End Result - multinode_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 5 ];then echo "*** Failed to pass at least 5 ! ***";exit 2;fi - multinode_virtualbox_macos: - runs-on: macos-10.15 - env: - TIME_ELAPSED: time - JOB_NAME: "multinode_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--driver=virtualbox -test.run "TestDownloadOnly|TestMultiNode" -test.timeout=45m -test.v -timeout-multiplier=1.2 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: multinode_virtualbox_macos - path: minikube_binaries/report - - name: The End Result - multinode_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 7 ];then echo "*** Failed to pass at least 7 ! ***";exit 2;fi - preload_dockerflags_docker_ubuntu: - # TestPause was removed due to https://github.com/kubernetes/minikube/issues/9568 - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "preload_dockerflags_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info || true - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.run "(TestDockerFlags|TestPreload)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: preload_dockerflags_docker_ubuntu - path: minikube_binaries/report - - name: The End Result - preload_dockerflags_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 2 ];then echo "*** Failed to pass at least 2 ! ***";exit 2;fi - pause_preload_dockerflags_virtualbox_macos: - runs-on: macos-10.15 - env: - TIME_ELAPSED: time - JOB_NAME: "pause_preload_dockerflags_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - 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@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox -test.run "(TestPause|TestPreload|TestDockerFlags)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: pause_preload_dockerflags_virtualbox_macos - path: minikube_binaries/report - - name: The End Result - pause_preload_dockerflags_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 9 ];then echo "*** Failed to pass at least 9 ! ***";exit 2;fi - scheduled_stop_docker_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "scheduled_stop_docker_windows" - GOPOGH_RESULT: "" - STAT: "" - runs-on: [self-hosted, windows-10-ent, 8CPUs] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - .\minikube-windows-amd64.exe delete -p $_.Name - Suspend-VM $_.Name - Stop-VM $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f --volumes - - name: Info - shell: powershell - run: | - echo $env:computername - echo "------------------------" - docker info - echo "------------------------" - docker volume ls - echo "------------------------" - docker system info --format '{{json .}}' - echo "------------------------" - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=docker" --test.timeout=15m --timeout-multiplier=1 --test.v --test.run=TestScheduledStopWindows --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - scheduled_stop_hyperv_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "scheduled_stop_hyperv_windows" - GOPOGH_RESULT: "" - runs-on: [self-hosted, windows-10-ent, Standard_D16s_v3, hyperv] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - Stop-VM -Name $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f --volumes - - name: Info - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - echo $env:computername - Get-WmiObject -class Win32_ComputerSystem - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=hyperv" --test.timeout=20m --timeout-multiplier=1.5 --test.v --test.run=TestScheduledStopWindows --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - # After all integration tests finished - # collect all the reports and upload them - upload_all_reports: - needs: - [ - pkg_install_amd64, - pkg_install_arm64, - addons_certs_virtualbox_macos, - multinode_docker_ubuntu, - multinode_virtualbox_macos, - preload_dockerflags_docker_ubuntu, - pause_preload_dockerflags_virtualbox_macos, - ] - runs-on: ubuntu-18.04 - steps: - - name: download all extra reports - uses: actions/download-artifact@v2-preview - - name: upload all extra reports - shell: bash {0} - continue-on-error: true - run: | - mkdir -p all_reports - cp -r ./pkg_install_amd64 ./all_reports/ - cp -r ./pkg_install_arm64 ./all_reports/ - cp -r ./scheduled_stop_docker_windows ./all_reports/ - cp -r ./scheduled_stop_hyperv_windows ./all_reports/ - cp -r ./addons_certs_docker_ubuntu ./all_reports/ - cp -r ./addons_certs_virtualbox_macos ./all_reports/ - cp -r ./multinode_docker_ubuntu ./all_reports/ - cp -r ./multinode_virtualbox_macos ./all_reports/ - cp -r ./preload_dockerflags_docker_ubuntu ./all_reports/ - cp -r ./pause_preload_dockerflags_virtualbox_macos ./all_reports/ - - uses: actions/upload-artifact@v1 - with: - name: all_reports - path: all_reports diff --git a/.github/workflows/time-to-k8s-public-chart.yml b/.github/workflows/time-to-k8s-public-chart.yml index a41de2aa068b..9c14758c07e4 100644 --- a/.github/workflows/time-to-k8s-public-chart.yml +++ b/.github/workflows/time-to-k8s-public-chart.yml @@ -6,10 +6,10 @@ on: - cron: "0 2,14 * * *" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: time-to-k8s-public-chart: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml index 791b2a19c9fc..053281348012 100644 --- a/.github/workflows/time-to-k8s.yml +++ b/.github/workflows/time-to-k8s.yml @@ -5,7 +5,7 @@ on: types: [released] env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: benchmark: runs-on: ubuntu-20.04 diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml index 98605138e656..b474b17aaec2 100644 --- a/.github/workflows/translations.yml +++ b/.github/workflows/translations.yml @@ -6,7 +6,7 @@ on: - "translations/**" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: unit_test: runs-on: ubuntu-20.04 diff --git a/.github/workflows/twitter-bot.yml b/.github/workflows/twitter-bot.yml index 1a7c97b56a1b..745d579ca55b 100644 --- a/.github/workflows/twitter-bot.yml +++ b/.github/workflows/twitter-bot.yml @@ -8,7 +8,7 @@ on: types: [published] jobs: twitter-release: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: ethomson/send-tweet-action@v1 with: diff --git a/.github/workflows/update-golang-version.yml b/.github/workflows/update-golang-version.yml index 18cc51b982fb..8e762723e323 100644 --- a/.github/workflows/update-golang-version.yml +++ b/.github/workflows/update-golang-version.yml @@ -6,10 +6,10 @@ on: - cron: "0 9 * * 1" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: bump-golang-version: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 diff --git a/.github/workflows/update-golint-version.yml b/.github/workflows/update-golint-version.yml index 3b21d6da968c..87992040054b 100644 --- a/.github/workflows/update-golint-version.yml +++ b/.github/workflows/update-golint-version.yml @@ -6,10 +6,10 @@ on: - cron: "0 10 * * 1" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: bump-golint-version: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 diff --git a/.github/workflows/update-k8s-versions.yml b/.github/workflows/update-k8s-versions.yml index d94302a62a5f..b92e31a90ba0 100644 --- a/.github/workflows/update-k8s-versions.yml +++ b/.github/workflows/update-k8s-versions.yml @@ -6,7 +6,7 @@ on: - cron: "0 8 * * 1" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.17.1' jobs: bump-k8s-versions: runs-on: ubuntu-20.04 diff --git a/CHANGELOG.md b/CHANGELOG.md index ab0ded5a073f..81407e951eee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,190 @@ # Release Notes +## Version 1.23.2 - 2021-09-21 + +Fix crio regression: +* Roll back default crio cgroup to systemd [#12533](https://github.com/kubernetes/minikube/pull/12533) +* Fix template typo [#12532](https://github.com/kubernetes/minikube/pull/12532) + +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! + +- Jeff MAURY +- Lakshya Gupta +- Medya Ghazizadeh +- Sharif Elgamal +- Steven Powell + +Thank you to our PR reviewers for this release! + +- medyagh (2 comments) +- sharifelgamal (1 comments) + +Thank you to our triage members for this release! + +- afbjorklund (12 comments) +- yxxhero (10 comments) +- medyagh (7 comments) +- spowelljr (4 comments) +- dilyanpalauzov (2 comments) + + +## Version 1.23.1 - 2021-09-17 + +Minor Improvements: +* Add crun version to `minikube version --components` [#12381](https://github.com/kubernetes/minikube/pull/12381) + +Bug Fixes: +* ingress addon: fix regression from v1.23.0 [#12443](https://github.com/kubernetes/minikube/pull/12443) +* ingress addon: fix role resource's referenced configmap [#12446](https://github.com/kubernetes/minikube/pull/12446) +* ingress-dns addon: fix regression from v1.23.0 [#12476](https://github.com/kubernetes/minikube/pull/12476) +* gcp-auth addon: delete image pull secrets on addon disable [#12473](https://github.com/kubernetes/minikube/pull/12473) +* gcp-auth addon: create pull secret even if creds JSON is nil [#12461](https://github.com/kubernetes/minikube/pull/12461) +* gcp-auth addon: fix refreshing pull secret [#12497](https://github.com/kubernetes/minikube/pull/12497) +* metallb addon: ask user for config values even if already set [#12437](https://github.com/kubernetes/minikube/pull/12437) +* ambassador addon: warn on enable that addon no longer works [#12474](https://github.com/kubernetes/minikube/pull/12474) +* dashboard addon: fix sha for metrics-scraper [#12496](https://github.com/kubernetes/minikube/pull/12496) +* windows installer: remove quotes from incorrect fields [#12430](https://github.com/kubernetes/minikube/pull/12430) +* strip namespace from images from aliyun registry [#11785](https://github.com/kubernetes/minikube/pull/11785) + +Version Upgrades: +* Bump cri-o from v1.20.0 to 1.22.0 [#12425](https://github.com/kubernetes/minikube/pull/12425) +* Bump dashboard from v2.1.0 to v2.3.1 and metrics-scraper from v1.0.4 to v1.0.7 [#12475](https://github.com/kubernetes/minikube/pull/12475) + +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! + +- Brian Li +- Brian de Alwis +- Hiroya Onoe +- Jayesh Srivastava +- Jeff MAURY +- Joel Jeremy Marquez +- Leif Ringstad +- Medya Ghazizadeh +- Sharif Elgamal +- Steven Powell +- Toshiaki Inukai + +Thank you to our PR reviewers for this release! + +- medyagh (9 comments) +- spowelljr (2 comments) +- afbjorklund (1 comments) + +Thank you to our triage members for this release! + +- spowelljr (17 comments) +- afbjorklund (16 comments) +- sharifelgamal (16 comments) +- RA489 (15 comments) +- medyagh (14 comments) + +## Version 1.23.0 - 2021-09-03 + +Features: +* Support Rootless Docker [#12359](https://github.com/kubernetes/minikube/pull/12359) +* Add support for tcsh in docker-env subcommand [#12332](https://github.com/kubernetes/minikube/pull/12332) +* Support Ingress on MacOS, driver docker [#12089](https://github.com/kubernetes/minikube/pull/12089) +* Add support for linux/s390x on docker/podman drivers [#12079](https://github.com/kubernetes/minikube/pull/12079) +* Add configurable port for minikube mount [#11979](https://github.com/kubernetes/minikube/pull/11979) +* Add method for customized box output [#11709](https://github.com/kubernetes/minikube/pull/11709) +* Add addon support for portainer [#11933](https://github.com/kubernetes/minikube/pull/11933) +* minikube start --image-repository will now accept URLs with port [#11585](https://github.com/kubernetes/minikube/pull/11585) +* Add ability to create extra disks for hyperkit driver [#11483](https://github.com/kubernetes/minikube/pull/11483) +* Add ability to create extra disks for kvm2 driver [#12351](https://github.com/kubernetes/minikube/pull/12351) + +minikube image: +* Add `minikube image` commands for pull and tag and push [#12326](https://github.com/kubernetes/minikube/pull/12326) +* new `image save` command [#12162](https://github.com/kubernetes/minikube/pull/12162) +* Auto start buildkit daemon on `image build` for containerd [#12076](https://github.com/kubernetes/minikube/pull/12076) + +Bug fixes: +* Select WSL VM IP when performing mounting [#12319](https://github.com/kubernetes/minikube/pull/12319) +* Fix minikube restart on Cloud Shell [#12237](https://github.com/kubernetes/minikube/pull/12237) +* pause each container separately [#12318](https://github.com/kubernetes/minikube/pull/12318) +* Add output parameter to the docker-env none shell [#12263](https://github.com/kubernetes/minikube/pull/12263) +* Clean up ssh tunnels during exit. [#11745](https://github.com/kubernetes/minikube/pull/11745) +* Fix loading an image from tar failing on existing delete [#12143](https://github.com/kubernetes/minikube/pull/12143) +* configure gcp-auth addon pull secret to work with all GCR and AR mirrors [#12106](https://github.com/kubernetes/minikube/pull/12106) +* Fix the error output of minikube version --components command [#12085](https://github.com/kubernetes/minikube/pull/12085) +* Added restart command after setting crio options [#11968](https://github.com/kubernetes/minikube/pull/11968) +* Don't set conntrack parameters in kube-proxy [#11957](https://github.com/kubernetes/minikube/pull/11957) +* Fix kvm2 driver arm64 deb package [#11937](https://github.com/kubernetes/minikube/pull/11937) +* Allow to set the dashboard proxyfied port [#11553](https://github.com/kubernetes/minikube/pull/11553) + +Version Upgrades: +* bump golang version to 1.17 [#12378](https://github.com/kubernetes/minikube/pull/12378) +* Bump default Kubernetes version to v1.22.1 and update addons to with new API (ingress, gcpauth, olm and cilium) [#12325](https://github.com/kubernetes/minikube/pull/12325) +* Add kubeadm image versions for kubernetes 1.22 [#12331](https://github.com/kubernetes/minikube/pull/12331) +* bump calico to v3.20 and move away from v1beta apis [#12230](https://github.com/kubernetes/minikube/pull/12230) +* Upgrade Buildroot to 2021.02 LTS with Linux 4.19 [#12268](https://github.com/kubernetes/minikube/pull/12268) +* Upgrade buildkit from 0.8.2 to 0.9.0 [#12032](https://github.com/kubernetes/minikube/pull/12032) +* ISO: Upgrade Docker, from 20.10.6 to 20.10.8 [#12122](https://github.com/kubernetes/minikube/pull/12122) +* ISO: Upgrade crictl (from cri-tools) to v1.21.0 [#12129](https://github.com/kubernetes/minikube/pull/12129) + +Thank you to our contributors for this release! + +- Akihiro Suda +- Alexandre Garnier +- Anders F Björklund +- Andriy Dzikh +- Blaine Gardner +- Devdutt Shenoi +- Ilya Zuyev +- Jack Zhang +- Jeff MAURY +- Joel Klint +- Julien Breux +- Leopold Schabel +- Matt Dainty +- Medya Ghazizadeh +- Pablo Caderno +- Parthvi Vala +- Peixuan Ding +- Predrag Rogic +- Raghavendra Talur +- Rajwinder Mahal +- Sharif Elgamal +- Steven Powell +- Tejal Desai +- Vishal Jain +- Zhang Shihe +- amit dixit +- balasu +- dmpe +- jayonlau +- m-aciek +- rajdevworks +- なつき + +Thank you to our PR reviewers for this release! + +- medyagh (68 comments) +- sharifelgamal (26 comments) +- afbjorklund (22 comments) +- spowelljr (15 comments) +- andriyDev (7 comments) +- mikebrow (7 comments) +- iliadmitriev (2 comments) +- ilya-zuyev (2 comments) +- azhao155 (1 comments) +- briandealwis (1 comments) +- ncresswell (1 comments) +- shahiddev (1 comments) + +Thank you to our triage members for this release! + +- afbjorklund (47 comments) +- RA489 (36 comments) +- sharifelgamal (32 comments) +- spowelljr (28 comments) +- medyagh (20 comments) + +Check out our [contributions leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/v1.23.0/) for this release! + ## Version 1.22.0 - 2021-07-07 Features: diff --git a/Makefile b/Makefile index eefd4f638017..b39ffb94103c 100644 --- a/Makefile +++ b/Makefile @@ -14,8 +14,8 @@ # Bump these on release - and please check ISO_VERSION for correctness. VERSION_MAJOR ?= 1 -VERSION_MINOR ?= 22 -VERSION_BUILD ?= 0 +VERSION_MINOR ?= 23 +VERSION_BUILD ?= 2 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.22.0-1628974786-12268 +ISO_VERSION ?= v1.23.1 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta DEB_VERSION ?= $(subst -,~,$(RAW_VERSION)) DEB_REVISION ?= 0 @@ -33,7 +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.16.7 +GO_VERSION ?= 1.17.1 +# update this only by running `make update-golang-version` +GO_K8S_VERSION_PREFIX ?= v1.23.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=) @@ -41,6 +43,9 @@ KVM_GO_VERSION ?= $(GO_VERSION:.0=) INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1) BUILDROOT_BRANCH ?= 2021.02.4 +# the go version on the line below is for the ISO and does not need to be updated often +GOLANG_OPTIONS = GO_VERSION=1.17 GO_HASH_FILE=$(PWD)/deploy/iso/minikube-iso/go.hash +BUILDROOT_OPTIONS = BR2_EXTERNAL=../../deploy/iso/minikube-iso $(GOLANG_OPTIONS) REGISTRY ?= gcr.io/k8s-minikube # Get git commit id @@ -52,7 +57,8 @@ HYPERKIT_BUILD_IMAGE ?= neilotoole/xcgo:go1.15 # NOTE: "latest" as of 2021-02-06. kube-cross images aren't updated as often as Kubernetes # https://github.com/kubernetes/kubernetes/blob/master/build/build-image/cross/VERSION # -BUILD_IMAGE ?= us.gcr.io/k8s-artifacts-prod/build-image/kube-cross:v$(GO_VERSION)-1 + +BUILD_IMAGE ?= us.gcr.io/k8s-artifacts-prod/build-image/kube-cross:$(GO_K8S_VERSION_PREFIX)-go$(GO_VERSION)-buster.0 ISO_BUILD_IMAGE ?= $(REGISTRY)/buildroot-image @@ -69,7 +75,7 @@ MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download KERNEL_VERSION ?= 4.19.202 # latest from https://github.com/golangci/golangci-lint/releases # update this only by running `make update-golint-version` -GOLINT_VERSION ?= v1.42.0 +GOLINT_VERSION ?= v1.42.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 @@ -280,17 +286,18 @@ minikube_iso: deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/b if [ ! -d $(BUILD_DIR)/buildroot ]; then \ mkdir -p $(BUILD_DIR); \ git clone --depth=1 --branch=$(BUILDROOT_BRANCH) https://github.com/buildroot/buildroot $(BUILD_DIR)/buildroot; \ + cp $(PWD)/deploy/iso/minikube-iso/go.hash $(BUILD_DIR)/buildroot/package/go/go.hash; \ fi; - $(MAKE) BR2_EXTERNAL=../../deploy/iso/minikube-iso minikube_defconfig -C $(BUILD_DIR)/buildroot - $(MAKE) -C $(BUILD_DIR)/buildroot host-python - $(MAKE) -C $(BUILD_DIR)/buildroot + $(MAKE) BR2_EXTERNAL=../../deploy/iso/minikube-iso minikube_defconfig -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) host-python + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) mv $(BUILD_DIR)/buildroot/output/images/rootfs.iso9660 $(BUILD_DIR)/minikube.iso # Change buildroot configuration for the minikube ISO .PHONY: iso-menuconfig iso-menuconfig: ## Configure buildroot configuration - $(MAKE) -C $(BUILD_DIR)/buildroot menuconfig - $(MAKE) -C $(BUILD_DIR)/buildroot savedefconfig + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) menuconfig + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) savedefconfig # Change the kernel configuration for the minikube ISO .PHONY: linux-menuconfig @@ -305,7 +312,7 @@ ifeq ($(IN_DOCKER),1) else docker run --rm --workdir /mnt --volume $(CURDIR):/mnt $(ISO_DOCKER_EXTRA_ARGS) \ --user $(shell id -u):$(shell id -g) --env HOME=/tmp --env IN_DOCKER=1 \ - $(ISO_BUILD_IMAGE) /usr/bin/make out/minikube.iso + $(ISO_BUILD_IMAGE) /bin/bash -lc '/usr/bin/make out/minikube.iso' endif iso_in_docker: @@ -682,7 +689,7 @@ docker-multi-arch-builder: env $(X_BUILD_ENV) docker buildx rm --builder $(X_DOCKER_BUILDER) || true env $(X_BUILD_ENV) docker buildx create --name $(X_DOCKER_BUILDER) --buildkitd-flags '--debug' || true -KICBASE_ARCH = linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x +KICBASE_ARCH = linux/amd64,linux/arm64,linux/s390x KICBASE_IMAGE_GCR ?= $(REGISTRY)/kicbase:$(KIC_VERSION) KICBASE_IMAGE_HUB ?= kicbase/stable:$(KIC_VERSION) KICBASE_IMAGE_REGISTRIES ?= $(KICBASE_IMAGE_GCR) $(KICBASE_IMAGE_HUB) diff --git a/cmd/drivers/hyperkit/main.go b/cmd/drivers/hyperkit/main.go index ca8f90ce6a48..c281bffb143f 100644 --- a/cmd/drivers/hyperkit/main.go +++ b/cmd/drivers/hyperkit/main.go @@ -1,3 +1,4 @@ +//go:build darwin && !arm64 // +build darwin,!arm64 /* diff --git a/cmd/drivers/kvm/main-nolinux.go b/cmd/drivers/kvm/main-nolinux.go index 8e466cd8e8ac..68567605e329 100644 --- a/cmd/drivers/kvm/main-nolinux.go +++ b/cmd/drivers/kvm/main-nolinux.go @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux /* diff --git a/cmd/drivers/kvm/main.go b/cmd/drivers/kvm/main.go index 455404b7c2ef..579138eb4b9d 100644 --- a/cmd/drivers/kvm/main.go +++ b/cmd/drivers/kvm/main.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* diff --git a/cmd/minikube/cmd/completion.go b/cmd/minikube/cmd/completion.go index f7d9dec0fc53..a92bc91fe41a 100644 --- a/cmd/minikube/cmd/completion.go +++ b/cmd/minikube/cmd/completion.go @@ -292,7 +292,7 @@ __minikube_convert_bash_to_zsh() { } buf := new(bytes.Buffer) - err = cmd.GenBashCompletion(buf) + err = cmd.GenZshCompletion(buf) if err != nil { return errors.Wrap(err, "Error generating zsh completion") } diff --git a/cmd/minikube/cmd/config/configure.go b/cmd/minikube/cmd/config/configure.go index cfa7dc7a7962..54b2d0df2619 100644 --- a/cmd/minikube/cmd/config/configure.go +++ b/cmd/minikube/cmd/config/configure.go @@ -199,13 +199,9 @@ var addonsConfigureCmd = &cobra.Command{ return net.ParseIP(s) != nil } - if cfg.KubernetesConfig.LoadBalancerStartIP == "" { - cfg.KubernetesConfig.LoadBalancerStartIP = AskForStaticValidatedValue("-- Enter Load Balancer Start IP: ", validator) - } + cfg.KubernetesConfig.LoadBalancerStartIP = AskForStaticValidatedValue("-- Enter Load Balancer Start IP: ", validator) - if cfg.KubernetesConfig.LoadBalancerEndIP == "" { - cfg.KubernetesConfig.LoadBalancerEndIP = AskForStaticValidatedValue("-- Enter Load Balancer End IP: ", validator) - } + cfg.KubernetesConfig.LoadBalancerEndIP = AskForStaticValidatedValue("-- Enter Load Balancer End IP: ", validator) if err := config.SaveProfile(profile, cfg); err != nil { out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) diff --git a/cmd/minikube/cmd/config/enable.go b/cmd/minikube/cmd/config/enable.go index 788a9477ae91..fb88e3218865 100644 --- a/cmd/minikube/cmd/config/enable.go +++ b/cmd/minikube/cmd/config/enable.go @@ -17,6 +17,7 @@ limitations under the License. package config import ( + "errors" "fmt" "github.com/spf13/cobra" @@ -45,10 +46,13 @@ var addonsEnableCmd = &cobra.Command{ out.Styled(style.Waiting, "using metrics-server addon, heapster is deprecated") addon = "metrics-server" } + if addon == "ambassador" { + out.Styled(style.Warning, "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73") + } viper.Set(config.AddonImages, images) viper.Set(config.AddonRegistries, registries) err := addons.SetAndSave(ClusterFlagValue(), addon, "true") - if err != nil { + if err != nil && !errors.Is(err, addons.ErrSkipThisAddon) { exit.Error(reason.InternalAddonEnable, "enable failed", err) } if addon == "dashboard" { @@ -63,8 +67,9 @@ var addonsEnableCmd = &cobra.Command{ `, out.V{"profileArg": tipProfileArg}) } - - out.Step(style.AddonEnable, "The '{{.addonName}}' addon is enabled", out.V{"addonName": addon}) + if err == nil { + out.Step(style.AddonEnable, "The '{{.addonName}}' addon is enabled", out.V{"addonName": addon}) + } }, } diff --git a/cmd/minikube/cmd/image.go b/cmd/minikube/cmd/image.go index dbaaf767b3a8..cea9f517d512 100644 --- a/cmd/minikube/cmd/image.go +++ b/cmd/minikube/cmd/image.go @@ -35,6 +35,10 @@ import ( docker "k8s.io/minikube/third_party/go-dockerclient" ) +var ( + allNodes bool +) + // imageCmd represents the image command var imageCmd = &cobra.Command{ Use: "image COMMAND", @@ -306,7 +310,7 @@ var buildImageCmd = &cobra.Command{ // Otherwise, assume it's a tar } } - if err := machine.BuildImage(img, dockerFile, tag, push, buildEnv, buildOpt, []*config.Profile{profile}); err != nil { + if err := machine.BuildImage(img, dockerFile, tag, push, buildEnv, buildOpt, []*config.Profile{profile}, allNodes, nodeName); err != nil { exit.Error(reason.GuestImageBuild, "Failed to build image", err) } if tmp != "" { @@ -387,6 +391,8 @@ func init() { buildImageCmd.Flags().StringVarP(&dockerFile, "file", "f", "", "Path to the Dockerfile to use (optional)") buildImageCmd.Flags().StringArrayVar(&buildEnv, "build-env", nil, "Environment variables to pass to the build. (format: key=value)") buildImageCmd.Flags().StringArrayVar(&buildOpt, "build-opt", nil, "Specify arbitrary flags to pass to the build. (format: key=value)") + buildImageCmd.Flags().StringVarP(&nodeName, "node", "n", "", "The node to build on. Defaults to the primary control plane.") + buildImageCmd.Flags().BoolVarP(&allNodes, "all", "", false, "Build image on all nodes.") imageCmd.AddCommand(buildImageCmd) saveImageCmd.Flags().BoolVar(&imgDaemon, "daemon", false, "Cache image to docker daemon") saveImageCmd.Flags().BoolVar(&imgRemote, "remote", false, "Cache image to remote registry") diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index d51fec280a0d..042b0611c18a 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -1088,13 +1088,9 @@ func validateCPUCount(drvName string) { // validateFlags validates the supplied flags against known bad combinations func validateFlags(cmd *cobra.Command, drvName string) { if cmd.Flags().Changed(humanReadableDiskSize) { - diskSizeMB, err := util.CalculateSizeInMB(viper.GetString(humanReadableDiskSize)) + err := validateDiskSize(viper.GetString(humanReadableDiskSize)) if err != nil { - exitIfNotForced(reason.Usage, "Validation unable to parse disk size '{{.diskSize}}': {{.error}}", out.V{"diskSize": viper.GetString(humanReadableDiskSize), "error": err}) - } - - if diskSizeMB < minimumDiskSize { - exitIfNotForced(reason.RsrcInsufficientStorage, "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}", out.V{"requested_size": diskSizeMB, "minimum_size": minimumDiskSize}) + exitIfNotForced(reason.Usage, "{{.err}}", out.V{"err": err}) } } @@ -1117,31 +1113,20 @@ func validateFlags(cmd *cobra.Command, drvName string) { if cmd.Flags().Changed(imageRepository) { viper.Set(imageRepository, validateImageRepository(viper.GetString(imageRepository))) } - - if cmd.Flags().Changed(containerRuntime) { - runtime := strings.ToLower(viper.GetString(containerRuntime)) - - validOptions := cruntime.ValidRuntimes() - // `crio` is accepted as an alternative spelling to `cri-o` - validOptions = append(validOptions, constants.CRIO) - - var validRuntime bool - for _, option := range validOptions { - if runtime == option { - validRuntime = true - } - - // Convert `cri-o` to `crio` as the K8s config uses the `crio` spelling - if runtime == "cri-o" { - viper.Set(containerRuntime, constants.CRIO) - } + if cmd.Flags().Changed(ports) { + err := validatePorts(viper.GetStringSlice(ports)) + if err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) } - if !validRuntime { - exit.Message(reason.Usage, `Invalid Container Runtime: "{{.runtime}}". Valid runtimes are: {{.validOptions}}`, out.V{"runtime": runtime, "validOptions": strings.Join(cruntime.ValidRuntimes(), ", ")}) - } + } - validateCNI(cmd, runtime) + if cmd.Flags().Changed(containerRuntime) { + err := validateRuntime(viper.GetString(containerRuntime)) + if err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) + } + validateCNI(cmd, viper.GetString(containerRuntime)) } if driver.BareMetal(drvName) { @@ -1206,6 +1191,61 @@ func validateFlags(cmd *cobra.Command, drvName string) { validateInsecureRegistry() } +// This function validates that the --ports are not below 1024 for the host and not outside range +func validatePorts(ports []string) error { + for _, portDuplet := range ports { + for i, port := range strings.Split(portDuplet, ":") { + p, err := strconv.Atoi(port) + if err != nil { + return errors.Errorf("Sorry, one of the ports provided with --ports flag is not valid %s", ports) + } + if p > 65535 || p < 1 { + return errors.Errorf("Sorry, one of the ports provided with --ports flag is outside range %s", ports) + } + if p < 1024 && i == 0 { + return errors.Errorf("Sorry, you cannot use privileged ports on the host (below 1024) %s", ports) + } + } + } + return nil +} + +// validateDiskSize validates the supplied disk size +func validateDiskSize(diskSize string) error { + diskSizeMB, err := util.CalculateSizeInMB(diskSize) + if err != nil { + return errors.Errorf("Validation unable to parse disk size %v: %v", diskSize, err) + } + if diskSizeMB < minimumDiskSize { + return errors.Errorf("Requested disk size %v is less than minimum of %v", diskSizeMB, minimumDiskSize) + } + return nil +} + +// validateRuntime validates the supplied runtime +func validateRuntime(runtime string) error { + validOptions := cruntime.ValidRuntimes() + // `crio` is accepted as an alternative spelling to `cri-o` + validOptions = append(validOptions, constants.CRIO) + + var validRuntime bool + for _, option := range validOptions { + if runtime == option { + validRuntime = true + } + + // Convert `cri-o` to `crio` as the K8s config uses the `crio` spelling + if runtime == "cri-o" { + viper.Set(containerRuntime, constants.CRIO) + } + } + + if !validRuntime { + return errors.Errorf("Invalid Container Runtime: %s. Valid runtimes are: %s", runtime, cruntime.ValidRuntimes()) + } + return nil +} + // if container runtime is not docker, check that cni is not disabled func validateCNI(cmd *cobra.Command, runtime string) { if runtime == "docker" { diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go index f87fd108e654..ba87db888eef 100644 --- a/cmd/minikube/cmd/start_flags.go +++ b/cmd/minikube/cmd/start_flags.go @@ -122,6 +122,7 @@ const ( defaultSSHPort = 22 listenAddress = "listen-address" extraDisks = "extra-disks" + certExpiration = "cert-expiration" ) var ( @@ -168,7 +169,8 @@ func initMinikubeFlags() { startCmd.Flags().StringP(network, "", "", "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.") startCmd.Flags().StringVarP(&outputFormat, "output", "o", "text", "Format to print stdout in. Options include: [text,json]") startCmd.Flags().StringP(trace, "", "", "Send trace events. Options include: [gcp]") - startCmd.Flags().Int(extraDisks, 0, "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)") + startCmd.Flags().Int(extraDisks, 0, "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)") + startCmd.Flags().Duration(certExpiration, constants.DefaultCertExpiration, "Duration until minikube certificate expiration, defaults to three years (26280h).") } // initKubernetesFlags inits the commandline flags for Kubernetes related options @@ -455,6 +457,7 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s SSHKey: viper.GetString(sshSSHKey), SSHPort: viper.GetInt(sshSSHPort), ExtraDisks: viper.GetInt(extraDisks), + CertExpiration: viper.GetDuration(certExpiration), KubernetesConfig: config.KubernetesConfig{ KubernetesVersion: k8sVersion, ClusterName: ClusterFlagValue(), @@ -492,9 +495,37 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s } } + if driver.IsKIC(drvName) { + si, err := oci.CachedDaemonInfo(drvName) + if err != nil { + exit.Message(reason.Usage, "Ensure your {{.driver_name}} is running and is healthy.", out.V{"driver_name": driver.FullName(drvName)}) + } + if si.Rootless { + if cc.KubernetesConfig.ContainerRuntime != "containerd" { + exit.Message(reason.Usage, "Container runtime must be set to \"containerd\" for rootless") + // TODO: support cri-o (https://kubernetes.io/docs/tasks/administer-cluster/kubelet-in-userns/#configuring-cri) + } + // KubeletInUserNamespace feature gate is essential for rootless driver. + // See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-in-userns/ + cc.KubernetesConfig.FeatureGates = addFeatureGate(cc.KubernetesConfig.FeatureGates, "KubeletInUserNamespace=true") + } + } + return cc } +func addFeatureGate(featureGates, s string) string { + split := strings.Split(featureGates, ",") + m := make(map[string]struct{}, len(split)) + for _, v := range split { + m[v] = struct{}{} + } + if _, ok := m[s]; !ok { + split = append(split, s) + } + return strings.Join(split, ",") +} + func checkNumaCount(k8sVersion string) { if viper.GetInt(kvmNUMACount) < 1 || viper.GetInt(kvmNUMACount) > 8 { exit.Message(reason.Usage, "--kvm-numa-count range is 1-8") @@ -552,6 +583,10 @@ func upgradeExistingConfig(cmd *cobra.Command, cc *config.ClusterConfig) { cc.KubernetesConfig.NodePort = viper.GetInt(apiServerPort) } + if cc.CertExpiration == 0 { + cc.CertExpiration = constants.DefaultCertExpiration + } + } // updateExistingConfigFromFlags will update the existing config from the flags - used on a second start @@ -624,6 +659,7 @@ func updateExistingConfigFromFlags(cmd *cobra.Command, existing *config.ClusterC updateStringFromFlag(cmd, &cc.KubernetesConfig.ServiceCIDR, serviceCIDR) updateBoolFromFlag(cmd, &cc.KubernetesConfig.ShouldLoadCachedImages, cacheImages) updateIntFromFlag(cmd, &cc.KubernetesConfig.NodePort, apiServerPort) + updateDurationFromFlag(cmd, &cc.CertExpiration, certExpiration) if cmd.Flags().Changed(kubernetesVersion) { cc.KubernetesConfig.KubernetesVersion = getKubernetesVersion(existing) @@ -730,7 +766,7 @@ func interpretWaitFlag(cmd cobra.Command) map[string]bool { } func checkExtraDiskOptions(cmd *cobra.Command, driverName string) { - supportedDrivers := []string{driver.HyperKit} + supportedDrivers := []string{driver.HyperKit, driver.KVM2} if cmd.Flags().Changed(extraDisks) { supported := false diff --git a/cmd/minikube/cmd/start_test.go b/cmd/minikube/cmd/start_test.go index 30b91b5a3095..fef084f0c837 100644 --- a/cmd/minikube/cmd/start_test.go +++ b/cmd/minikube/cmd/start_test.go @@ -17,6 +17,7 @@ limitations under the License. package cmd import ( + "fmt" "os" "strings" "testing" @@ -27,6 +28,7 @@ import ( cfg "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/proxy" ) @@ -363,3 +365,104 @@ func TestValidateImageRepository(t *testing.T) { } } + +func TestValidateDiskSize(t *testing.T) { + var tests = []struct { + diskSize string + errorMsg string + }{ + { + diskSize: "2G", + errorMsg: "", + }, + { + diskSize: "test", + errorMsg: "Validation unable to parse disk size test: FromHumanSize: invalid size: 'test'", + }, + { + diskSize: "6M", + errorMsg: fmt.Sprintf("Requested disk size 6 is less than minimum of %v", minimumDiskSize), + }, + } + for _, test := range tests { + t.Run(test.diskSize, func(t *testing.T) { + got := validateDiskSize(test.diskSize) + gotError := "" + if got != nil { + gotError = got.Error() + } + if gotError != test.errorMsg { + t.Errorf("validateDiskSize(diskSize=%v): got %v, expected %v", test.diskSize, got, test.errorMsg) + } + }) + } +} + +func TestValidateRuntime(t *testing.T) { + var tests = []struct { + runtime string + errorMsg string + }{ + { + runtime: "cri-o", + errorMsg: "", + }, + { + runtime: "docker", + errorMsg: "", + }, + + { + runtime: "test", + errorMsg: fmt.Sprintf("Invalid Container Runtime: test. Valid runtimes are: %v", cruntime.ValidRuntimes()), + }, + } + for _, test := range tests { + t.Run(test.runtime, func(t *testing.T) { + got := validateRuntime(test.runtime) + gotError := "" + if got != nil { + gotError = got.Error() + } + if gotError != test.errorMsg { + t.Errorf("ValidateRuntime(runtime=%v): got %v, expected %v", test.runtime, got, test.errorMsg) + } + }) + } +} + +func TestValidatePorts(t *testing.T) { + var tests = []struct { + ports []string + errorMsg string + }{ + { + ports: []string{"test:80"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [test:80]", + }, + { + ports: []string{"0:80"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range [0:80]", + }, + { + ports: []string{"80:80"}, + errorMsg: "Sorry, you cannot use privileged ports on the host (below 1024) [80:80]", + }, + { + ports: []string{"8080:80", "6443:443"}, + errorMsg: "", + }, + } + for _, test := range tests { + t.Run(strings.Join(test.ports, ","), func(t *testing.T) { + gotError := "" + got := validatePorts(test.ports) + if got != nil { + gotError = got.Error() + } + if gotError != test.errorMsg { + t.Errorf("validatePorts(ports=%v): got %v, expected %v", test.ports, got, test.errorMsg) + } + }) + } +} diff --git a/cmd/minikube/cmd/version.go b/cmd/minikube/cmd/version.go index 6f2a2da02b85..ce73d48043a5 100644 --- a/cmd/minikube/cmd/version.go +++ b/cmd/minikube/cmd/version.go @@ -63,6 +63,7 @@ var versionCmd = &cobra.Command{ "buildctl": exec.Command("buildctl", "--version"), "ctr": exec.Command("ctr", "--version"), "runc": exec.Command("runc", "--version"), + "crun": exec.Command("crun", "--version"), } for k, v := range versionCMDS { rr, err := runner.RunCmd(v) diff --git a/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl b/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl index a951f24faa67..d3e585591485 100644 --- a/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl +++ b/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl @@ -61,6 +61,7 @@ metadata: name: gcp-auth-certs-create namespace: gcp-auth spec: + ttlSecondsAfterFinished: 30 template: metadata: name: gcp-auth-certs-create @@ -120,6 +121,7 @@ metadata: name: gcp-auth-certs-patch namespace: gcp-auth spec: + ttlSecondsAfterFinished: 30 template: metadata: name: gcp-auth-certs-patch diff --git a/deploy/addons/ingress-dns/example/example.yaml b/deploy/addons/ingress-dns/example/example.yaml index d166deb3efdf..dfdd9e35a0ba 100644 --- a/deploy/addons/ingress-dns/example/example.yaml +++ b/deploy/addons/ingress-dns/example/example.yaml @@ -38,10 +38,8 @@ kind: Ingress metadata: name: example-ingress namespace: kube-system - annotations: - # use the shared ingress-nginx - kubernetes.io/ingress.class: nginx spec: + ingressClassName: nginx rules: - host: hello-john.test http: diff --git a/deploy/addons/ingress/ingress-deploy.yaml.tmpl b/deploy/addons/ingress/ingress-deploy.yaml.tmpl index bbc2965fe5f0..264973405245 100644 --- a/deploy/addons/ingress/ingress-deploy.yaml.tmpl +++ b/deploy/addons/ingress/ingress-deploy.yaml.tmpl @@ -215,7 +215,7 @@ rules: resources: - configmaps resourceNames: - - ingress-controller-leader-nginx + - ingress-controller-leader verbs: - get - update @@ -225,6 +225,7 @@ rules: - configmaps verbs: - create + - update - apiGroups: - '' resources: @@ -252,6 +253,17 @@ subjects: name: ingress-nginx namespace: ingress-nginx --- +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + labels: + app.kubernetes.io/component: controller + name: nginx + annotations: + ingressclass.kubernetes.io/is-default-class: "true" +spec: + controller: k8s.io/ingress-nginx +--- # Source: ingress-nginx/templates/controller-service-webhook.yaml apiVersion: v1 kind: Service diff --git a/deploy/iso/minikube-iso/Dockerfile b/deploy/iso/minikube-iso/Dockerfile index 3b9a94f96b8f..21906ca2b49d 100644 --- a/deploy/iso/minikube-iso/Dockerfile +++ b/deploy/iso/minikube-iso/Dockerfile @@ -15,7 +15,8 @@ FROM ubuntu:18.04 RUN apt-get update \ - && apt-get install -y apt dpkg apt-utils ca-certificates \ + && apt-get install -y apt dpkg apt-utils ca-certificates software-properties-common \ + && add-apt-repository -y ppa:longsleep/golang-backports \ && apt-get upgrade -y \ && apt-get install -y \ build-essential \ diff --git a/deploy/iso/minikube-iso/go.hash b/deploy/iso/minikube-iso/go.hash new file mode 100644 index 000000000000..d35d6ed5722b --- /dev/null +++ b/deploy/iso/minikube-iso/go.hash @@ -0,0 +1,3 @@ +# From https://golang.org/dl/ +sha256 3a70e5055509f347c0fb831ca07a2bf3b531068f349b14a3c652e9b5b67beb5d go1.17.src.tar.gz +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash index 11dd505068f1..36451957fa5b 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash +++ b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash @@ -22,3 +22,4 @@ sha256 fc8a8e61375e3ce30563eeb0fd6534c4f48fc20300a72e6ff51cc99cb2703516 v1.19.0. sha256 6165c5b8212ea03be2a465403177318bfe25a54c3e8d66d720344643913a0223 v1.19.1.tar.gz sha256 76fd7543bc92d4364a11060f43a5131893a76c6e6e9d6de3a6bb6292c110b631 v1.20.0.tar.gz sha256 1c01d4a76cdcfe3ac24147eb1d5f6ebd782bd98fb0ac0c19b79bd5a6560b1481 v1.20.2.tar.gz +sha256 bc53ea8977e252bd9812974c33ff654ee22076598e901464468c5c105a5ef773 v1.22.0.tar.gz diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk index 21d7f76556c7..48b3977ef660 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk +++ b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk @@ -4,8 +4,8 @@ # ################################################################################ -CRIO_BIN_VERSION = v1.20.2 -CRIO_BIN_COMMIT = d5a999ad0a35d895ded554e1e18c142075501a98 +CRIO_BIN_VERSION = v1.22.0 +CRIO_BIN_COMMIT = 6becad23eadd7dfdd25fd8df386bf3b706cf7758 CRIO_BIN_SITE = https://github.com/cri-o/cri-o/archive CRIO_BIN_SOURCE = $(CRIO_BIN_VERSION).tar.gz CRIO_BIN_DEPENDENCIES = host-go libgpgme diff --git a/deploy/kicbase/Dockerfile b/deploy/kicbase/Dockerfile index 95a62efccfe0..f7092a32d70b 100644 --- a/deploy/kicbase/Dockerfile +++ b/deploy/kicbase/Dockerfile @@ -30,6 +30,9 @@ RUN cd ./cmd/auto-pause/ && go build FROM ubuntu:focal-20210401 ARG BUILDKIT_VERSION="v0.9.0" +ARG FUSE_OVERLAYFS_VERSION="v1.7.1" +ARG CONTAINERD_FUSE_OVERLAYFS_VERSION="1.0.3" +ARG CRIO_VERSION="1.22" # copy in static files (configs, scripts) COPY deploy/kicbase/10-network-security.conf /etc/sysctl.d/10-network-security.conf @@ -113,7 +116,9 @@ RUN clean-install \ openssh-server \ dnsutils \ # libglib2.0-0 is required for conmon, which is required for podman - libglib2.0-0 + libglib2.0-0 \ + # fuse3 is required for fuse-overlayfs + fuse3 # install docker RUN sh -c "echo 'deb https://download.docker.com/linux/ubuntu focal stable' > /etc/apt/sources.list.d/docker.list" && \ @@ -121,6 +126,19 @@ RUN sh -c "echo 'deb https://download.docker.com/linux/ubuntu focal stable' > /e apt-key add - < docker.key && \ clean-install docker-ce docker-ce-cli containerd.io +# install fuse-overlayfs (used by rootless; apt-get version is old) +RUN curl -sSL --retry 5 --output /usr/local/bin/fuse-overlayfs https://github.com/containers/fuse-overlayfs/releases/download/${FUSE_OVERLAYFS_VERSION}/fuse-overlayfs-$(uname -m) \ + && chmod +x /usr/local/bin/fuse-overlayfs + +# install containerd-fuse-overlayfs (used by rootless) +RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm-v7/') \ + && echo "Installing containerd-fuse-overlayfs..." \ + && export CONTAINERD_FUSE_OVERLAYFS_BASE_URL="https://github.com/containerd/fuse-overlayfs-snapshotter/releases/download/v${CONTAINERD_FUSE_OVERLAYFS_VERSION}" \ + && curl -sSL --retry 5 --output /tmp/containerd-fuse-overlayfs.tgz "${CONTAINERD_FUSE_OVERLAYFS_BASE_URL}/containerd-fuse-overlayfs-${CONTAINERD_FUSE_OVERLAYFS_VERSION}-linux-${ARCH}.tar.gz" \ + && tar -C /usr/local/bin -xzvf /tmp/containerd-fuse-overlayfs.tgz \ + && rm -rf /tmp/containerd-fuse-overlayfs.tgz +COPY deploy/kicbase/containerd-fuse-overlayfs.service /etc/systemd/system/containerd-fuse-overlayfs.service + # install buildkit RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm-v7/') \ && echo "Installing buildkit ..." \ @@ -139,9 +157,9 @@ RUN sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/li apt-key add - < Release.key && \ clean-install containers-common catatonit conmon containernetworking-plugins cri-tools podman-plugins crun -# install cri-o based on https://github.com/cri-o/cri-o/blob/release-1.20/README.md#installing-cri-o -RUN sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.20/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:1.20.list" && \ - curl -LO https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.20/xUbuntu_20.04/Release.key && \ +# install cri-o based on https://github.com/cri-o/cri-o/blob/release-1.22/README.md#installing-cri-o +RUN 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 && \ apt-key add - < Release.key && \ clean-install cri-o cri-o-runc diff --git a/deploy/kicbase/containerd-fuse-overlayfs.service b/deploy/kicbase/containerd-fuse-overlayfs.service new file mode 100644 index 000000000000..a3d12bd5677a --- /dev/null +++ b/deploy/kicbase/containerd-fuse-overlayfs.service @@ -0,0 +1,13 @@ +# From https://github.com/kubernetes-sigs/kind/blob/0d3780371091b2dc9ff6eea1b6054f14ff5d970a/images/base/files/etc/systemd/system/containerd-fuse-overlayfs.service +[Unit] +Description=containerd fuse-overlayfs snapshotter +PartOf=containerd.service + +[Service] +ExecStart=/usr/local/bin/containerd-fuse-overlayfs-grpc /run/containerd-fuse-overlayfs.sock /var/lib/containerd-fuse-overlayfs +Type=notify +Restart=always +RestartSec=1 + +[Install] +WantedBy=multi-user.target diff --git a/deploy/kicbase/entrypoint b/deploy/kicbase/entrypoint index cc6a9338a054..0a0a26641c3a 100755 --- a/deploy/kicbase/entrypoint +++ b/deploy/kicbase/entrypoint @@ -19,6 +19,39 @@ set -o nounset set -o pipefail set -x +# If /proc/self/uid_map 4294967295 mappings, we are in the initial user namespace, i.e. the host. +# Otherwise we are in a non-initial user namespace. +# https://github.com/opencontainers/runc/blob/v1.0.0-rc92/libcontainer/system/linux.go#L109-L118 +userns="" +if grep -Eqv "0[[:space:]]+0[[:space:]]+4294967295" /proc/self/uid_map; then + userns="1" + echo 'INFO: running in a user namespace (experimental)' +fi + +validate_userns() { + if [[ -z "${userns}" ]]; then + return + fi + + local nofile_hard + nofile_hard="$(ulimit -Hn)" + local nofile_hard_expected="64000" + if [[ "${nofile_hard}" -lt "${nofile_hard_expected}" ]]; then + 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 + 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 +} + configure_containerd() { # we need to switch to the 'native' snapshotter on zfs if [[ "$(stat -f -c %T /kind)" == 'zfs' ]]; then @@ -73,12 +106,16 @@ fix_mount() { sync fi - 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 - mount -o remount,ro /sys + 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 + fi echo 'INFO: making mounts shared' >&2 # for mount propagation @@ -334,6 +371,9 @@ enable_network_magic(){ fi } +# validate state +validate_userns + # run pre-init fixups # NOTE: it's important that we do configure* first in this order to avoid races configure_containerd diff --git a/deploy/minikube/releases.json b/deploy/minikube/releases.json index 14d9feb5d365..6f0ab784ce90 100644 --- a/deploy/minikube/releases.json +++ b/deploy/minikube/releases.json @@ -1,4 +1,28 @@ [ + { + "name": "v1.23.2", + "checksums": { + "darwin": "cf2971d4b83b9c5e359d644410dcca9bba6933ee08427967302e6767f6628086", + "linux": "752d91414793b6a88b309c806b65841ffa62a3bf07383146bd54afbf15de80b4", + "windows": "994e806468425e23aadcf86b99f0341fa1848a9a70456f09111c071f769c552d" + } + }, + { + "name": "v1.23.1", + "checksums": { + "darwin": "2b6addab443e384fec975b9f4d35a931b1988961f6a9e87f10768596e23eb70e", + "linux": "fc23f94e870b18c2fc015af18fe2dee00452059100e42a5483b9440da1a5fba2", + "windows": "4050b6c97b18c6c25e1d760ff2d93333af7fe1f69d3eb29b5a20e60d6ef3f766" + } + }, + { + "name": "v1.23.0", + "checksums": { + "darwin": "943f522393e04879bb83d0e484d608dd4086e92c58a0161b4f29dc9691a9ec80", + "linux": "a34f1e46151f3e302b7d92dee680a0cceaba5c5d6ab79baaf695b17c4a61df38", + "windows": "7b7f4c7be4fd954037dbb0f05ef5631f1b453d0d08c8de7c4d402261816b50ac" + } + }, { "name": "v1.22.0", "checksums": { diff --git a/go.mod b/go.mod index a60ef99342bb..ed120cd4332b 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module k8s.io/minikube -go 1.16 +go 1.17 require ( - cloud.google.com/go/storage v1.15.0 + cloud.google.com/go/storage v1.16.1 contrib.go.opencensus.io/exporter/stackdriver v0.12.1 github.com/Delta456/box-cli-maker/v2 v2.2.2 github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2 @@ -29,7 +29,7 @@ require ( github.com/google/go-github/v36 v36.0.0 github.com/google/slowjam v1.0.0 github.com/google/uuid v1.3.0 - github.com/hashicorp/go-getter v1.5.7 + github.com/hashicorp/go-getter v1.5.8 github.com/hashicorp/go-retryablehttp v0.7.0 github.com/hashicorp/golang-lru v0.5.3 // indirect github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect @@ -51,7 +51,7 @@ require ( github.com/libvirt/libvirt-go v3.9.0+incompatible github.com/machine-drivers/docker-machine-driver-vmware v0.1.3 github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24 - github.com/mattn/go-isatty v0.0.13 + github.com/mattn/go-isatty v0.0.14 github.com/mitchellh/go-ps v1.0.0 github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14 github.com/moby/sys/mount v0.2.0 // indirect @@ -66,10 +66,10 @@ require ( github.com/pmezard/go-difflib v1.0.0 github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect - github.com/shirou/gopsutil/v3 v3.21.7 + github.com/shirou/gopsutil/v3 v3.21.8 github.com/spf13/cobra v1.2.1 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.8.1 + github.com/spf13/viper v1.9.0 github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097 go.opencensus.io v0.23.0 @@ -77,27 +77,136 @@ require ( go.opentelemetry.io/otel/sdk v0.16.0 go.opentelemetry.io/otel/trace v0.17.0 golang.org/x/build v0.0.0-20190927031335-2835ba2e683f - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 + golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 golang.org/x/exp v0.0.0-20210220032938-85be41e4509f - golang.org/x/mod v0.5.0 - golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 + golang.org/x/mod v0.5.1 + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf + golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365 golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 golang.org/x/text v0.3.7 - gonum.org/v1/plot v0.9.0 - google.golang.org/api v0.52.0 + gonum.org/v1/plot v0.10.0 + google.golang.org/api v0.57.0 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.22.1 - k8s.io/apimachinery v0.22.0 - k8s.io/client-go v0.22.0 - k8s.io/klog/v2 v2.10.0 - k8s.io/kubectl v0.22.1 + k8s.io/api v0.22.2 + k8s.io/apimachinery v0.22.2 + k8s.io/client-go v0.22.2 + k8s.io/klog/v2 v2.20.0 + k8s.io/kubectl v0.22.2 k8s.io/kubernetes v1.21.3 sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 ) +require ( + cloud.google.com/go v0.94.1 // indirect + cloud.google.com/go/container v0.1.0 // indirect + cloud.google.com/go/monitoring v0.1.0 // indirect + cloud.google.com/go/trace v0.1.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect + github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect + github.com/Microsoft/go-winio v0.5.0 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/VividCortex/ewma v1.1.1 // indirect + github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527 // indirect + github.com/aws/aws-sdk-go v1.35.24 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/census-instrumentation/opencensus-proto v0.2.1 // indirect + github.com/cespare/xxhash/v2 v2.1.1 // indirect + 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/cpuguy83/go-md2man/v2 v2.0.0 // 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/docker-credential-helpers v0.6.3 // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/evanphx/json-patch v4.9.0+incompatible // indirect + github.com/fatih/color v1.10.0 // indirect + github.com/fogleman/gg v1.3.0 // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/go-fonts/liberation v0.2.0 // indirect + github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81 // indirect + github.com/go-logr/logr v1.0.0 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-pdf/fpdf v0.5.0 // 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-20200121045136-8c9f03a8e57e // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // 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.1.0 // indirect + github.com/googleapis/gnostic v0.4.1 // indirect + github.com/gookit/color v1.4.2 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.2.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + 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/json-iterator/go v1.1.11 // indirect + github.com/klauspost/compress v1.13.0 // indirect + github.com/magiconair/properties v1.8.5 // indirect + github.com/mattn/go-colorable v0.1.8 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/miekg/dns v1.1.35 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.0 // indirect + github.com/mitchellh/mapstructure v1.4.2 // 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-20201216013528-df9cb8a40635 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/opencontainers/image-spec v1.0.1 // indirect + github.com/opencontainers/runc v1.0.0-rc95 // indirect + github.com/pelletier/go-toml v1.9.4 // indirect + github.com/prometheus/client_golang v1.7.1 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.10.0 // indirect + github.com/prometheus/procfs v0.6.0 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/spf13/afero v1.6.0 // indirect + github.com/spf13/cast v1.4.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/subosito/gotenv v1.2.0 // indirect + github.com/tklauser/go-sysconf v0.3.9 // indirect + github.com/tklauser/numcpus v0.3.0 // indirect + github.com/ulikunitz/xz v0.5.8 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + go.opentelemetry.io/otel/metric v0.17.0 // indirect + go.uber.org/atomic v1.7.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + go.uber.org/zap v1.17.0 // indirect + golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect + golang.org/x/net v0.0.0-20210525063256-abc453219eb5 // indirect + golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 // indirect + google.golang.org/grpc v1.40.0 // indirect + google.golang.org/protobuf v1.27.1 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.63.2 // indirect + k8s.io/cluster-bootstrap v0.0.0 // indirect + k8s.io/component-base v0.21.2 // indirect + k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 // indirect + k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect + sigs.k8s.io/yaml v1.2.0 // indirect +) + replace ( git.apache.org/thrift.git => github.com/apache/thrift v0.0.0-20180902110319-2566ecd5d999 github.com/briandowns/spinner => github.com/alonyb/spinner v1.12.7 diff --git a/go.sum b/go.sum index bca11cfce877..75885840707c 100644 --- a/go.sum +++ b/go.sum @@ -24,17 +24,28 @@ cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.88.0 h1:MZ2cf9Elnv1wqccq8ooKO2MqHQLc+ChCp/+QWObCpxg= -cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.92.1/go.mod h1:cMc7asehN84LBi1JGTHo4n8wuaGuNAZ7lR7b1YNJBrE= +cloud.google.com/go v0.92.2/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.92.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1 h1:DwuSvDZ1pTYGbXo8yOJevCTr3BoBlE+OVkHAKiYQUXc= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/container v0.1.0 h1:TcvimswG10seya10bbp4Ai4aGJuzUnhSuoOcaPu9UNI= +cloud.google.com/go/container v0.1.0/go.mod h1:1rrp90HFUViXnpvafHiTaaAxNscrHiFgfUCEiEHBlEk= 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= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= +cloud.google.com/go/monitoring v0.1.0 h1:vssDZ792skH6AWCDH1OogKfs/FzgEVTB/yUAzfgBR24= +cloud.google.com/go/monitoring v0.1.0/go.mod h1:Hpm3XfzJv+UTiXzCG5Ffp0wijzHTC7Cv4eR7o3x/fEE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -44,8 +55,10 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.15.0 h1:Ljj+ZXVEhCr/1+4ZhvtteN1ND7UUsNTlduGclLh8GO0= -cloud.google.com/go/storage v1.15.0/go.mod h1:mjjQMoxxyGH7Jr8K5qrx6N2O0AHsczI61sMNn03GIZI= +cloud.google.com/go/storage v1.16.1 h1:sMEIc4wxvoY3NXG7Rn9iP7jb/2buJgWR1vNXCR/UPfs= +cloud.google.com/go/storage v1.16.1/go.mod h1:LaNorbty3ehnU3rEjXSNV/NRgQA0O8Y+uh6bPe5UOk4= +cloud.google.com/go/trace v0.1.0 h1:nUGUK79FOkN0UGUXhBmVBkbu1PYsHe0YyFSPLOD9Npg= +cloud.google.com/go/trace v0.1.0/go.mod h1:wxEwsoeRVPbeSkt7ZC9nWCgmoKQRAoySN7XHW2AmI7g= contrib.go.opencensus.io/exporter/stackdriver v0.12.1 h1:Dll2uFfOVI3fa8UzsHyP6z0M6fEc9ZTAMo+Y3z282Xg= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= @@ -117,8 +130,9 @@ github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmx github.com/VividCortex/godaemon v1.0.0 h1:aHYrScWvgaSOdAoYCdObWXLm+e1rldP9Pwb1ZvuZkQw= github.com/VividCortex/godaemon v1.0.0/go.mod h1:hBWe/72KbGt/lb95E+Sh9ersdYbB57Dt6CG66S1YPno= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527 h1:NImof/JkF93OVWZY+PINgl6fPtQyF6f+hNUtZ0QZA1c= +github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -133,6 +147,7 @@ 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-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= @@ -163,6 +178,7 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= @@ -389,6 +405,7 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -398,8 +415,9 @@ github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzP github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= @@ -412,9 +430,11 @@ github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0 h1:5/Tv1Ek/QCr20C6ZOz15vw3g7GELYL98KWr8Hgo+3vk= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1 h1:wBrPaMkrXFBW3qXpXAjiKljdVUMxn9bX2ia3XjPHoik= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0 h1:jAkAWJP4S+OsrPLZM4/eC9iW7CtHy+HBXrEwZXWo5VM= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -422,14 +442,16 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07 h1:OTlfMvwR1rLyf9goVmXfuS5AJn80+Vmj4rTf4n46SOs= github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81 h1:6zl3BbBhdnMkpSj2YY30qV3gDcVBGtFgVsV3+/i+mKQ= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.0.0 h1:kH951GinvFVaQgy/ki/B3YYmQtRpExGigSJg6O8z5jo= +github.com/go-logr/logr v1.0.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= @@ -474,6 +496,8 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-pdf/fpdf v0.5.0 h1:GHpcYsiDV2hdo77VTOuTF9k1sN8F8IY7NjnCo9x+NPY= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= @@ -576,7 +600,9 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210804190019-f964ff605595/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/slowjam v1.0.0 h1:dA9flW4oGTJcSy8FpEvdq8JKwPFVgqYwMmjhqlb2L+s= @@ -588,8 +614,9 @@ github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0 h1:6DWmvNpomjL1+3liNSZbVns3zsYzzCjm6pRBO1tLeso= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3 h1:eHv/jVY/JNop1xg2J9cBb4EzyMpWZoNCP1BslSAIkOI= @@ -597,7 +624,6 @@ github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c2 github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -615,23 +641,28 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.5.7 h1:HBLsom8eGHLxj78ta+/MVSyct8KWG4B4z6lhBA4vJcg= -github.com/hashicorp/go-getter v1.5.7/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-getter v1.5.8 h1:qx5CZXxXz5YFpALPkbf/F1iZZoRE+f6T1i/AWw/Zkic= +github.com/hashicorp/go-getter v1.5.8/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -651,8 +682,11 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/heketi/heketi v10.2.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= @@ -694,9 +728,7 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c h1:3UvYABOQRhJAApj9MdCN+Ydv841ETSoy6xLzdmmr/9A= github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= @@ -781,15 +813,18 @@ github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24 h1:uYuGXJBAi1u github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24/go.mod h1:M1qoD/MqPgTZIk0EWKB38wE28ACRfVcn+cU08jyArI0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -805,6 +840,7 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyex github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= @@ -812,6 +848,7 @@ github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -825,8 +862,9 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14 h1:XGy4iMfaG4r1uZKZQmEPSYSH0Nj5JJuKgPNUhWGQ08E= github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14/go.mod h1:aBcAEoy5u01cPAYvosR85gzSrMZ0TVVnkPytOQN+9z8= @@ -925,14 +963,15 @@ github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/phpdave11/gofpdf v1.4.2 h1:KPKiIbfwbvC/wOncwhrpRdXVj2CZTCFlw4wnoyjtHfQ= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pkg/browser v0.0.0-20160118053552-9302be274faa h1:od00Tr1U7+cLVtc+RNFmR53spHUF98Ziu33S8UIQnt0= github.com/pkg/browser v0.0.0-20160118053552-9302be274faa/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -946,6 +985,7 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -1001,8 +1041,10 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sayboras/dockerclient v1.0.0 h1:awHcxOzTP07Gl1SJAhkTCTagyJwgA6f/Az/Z4xMP2yg= github.com/sayboras/dockerclient v1.0.0/go.mod h1:mUmEoqt0b+uQg57s006FsvL4mybi+N5wINLDBGtaPTY= @@ -1010,8 +1052,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil/v3 v3.21.7 h1:PnTqQamUjwEDSgn+nBGu0qSDV/CfvyiR/gwTH3i7HTU= -github.com/shirou/gopsutil/v3 v3.21.7/go.mod h1:RGl11Y7XMTQPmHh8F0ayC6haKNBgH4PXMJuTAcMOlz4= +github.com/shirou/gopsutil/v3 v3.21.8 h1:nKct+uP0TV8DjjNiHanKf8SAuub+GNsbrOtM9Nl9biA= +github.com/shirou/gopsutil/v3 v3.21.8/go.mod h1:YWp/H8Qs5fVmf17v7JNZzA0mPJ+mS2e9JdiUF9LlKzQ= 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.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= @@ -1023,10 +1065,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1035,8 +1075,9 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= @@ -1054,8 +1095,9 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/storageos/go-api v2.2.0+incompatible/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1079,10 +1121,10 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cb github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tklauser/go-sysconf v0.3.7 h1:HT7h4+536gjqeq1ZIJPgOl1rg1XFatQGVZWp7Py53eg= -github.com/tklauser/go-sysconf v0.3.7/go.mod h1:JZIdXh4RmBvZDBZ41ld2bGxRV3n4daiiqA3skYhAoQ4= -github.com/tklauser/numcpus v0.2.3 h1:nQ0QYpiritP6ViFhrKYsiv6VVxOpum2Gks5GhnJbS/8= -github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E= +github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -1189,14 +1231,16 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1223,8 +1267,10 @@ golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030 h1:lP9pYkih3DUSC641giIXa2XqfTIbbbRr0w2EOTA7wHA= golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1236,7 +1282,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -1252,8 +1297,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.0 h1:UG21uOlmZabA4fW5i7ZX6bjw1xELEGg/ZLgZq9auk/Q= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +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/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= @@ -1326,10 +1371,11 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1377,10 +1423,12 @@ golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1432,16 +1480,19 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/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-20210908233432-aa78b53d3365 h1:6wSTsvPddg9gc/mVEEyk9oOAoxn+bT4Z9q1zx+4RwA4= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/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-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1486,6 +1537,7 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1532,7 +1584,6 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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= @@ -1542,13 +1593,15 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3 h1:DnoIG+QAMaF5NvxnGe/oKsgKcAc6PcUyl8q0VetfQ8s= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0 h1:3sEo36Uopv1/SA/dMFFaxXoL5XyikJ9Sf2Vll/k6+2E= gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.0 h1:ymLukg4XJlQnYUJCp+coQq5M7BsUJFk6XQE4HPflwdw= +gonum.org/v1/plot v0.10.0/go.mod h1:JWIHJ7U20drSQb/aDpTetJzfC1KlAPldJLpkSy88dvQ= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1574,12 +1627,15 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.45.0/go.mod h1:ISLIJCedJolbZvDfAk+Ctuq5hf+aJ33WgtUsfyFoLXA= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.52.0 h1:m5FLEd6dp5CU1F0tMWyqDi2XjchviIz8ntzOSz7w8As= -google.golang.org/api v0.52.0/go.mod h1:Him/adpjt0sxtkWViy0b6xyKW/SD71CwdJ7HqJo7SrU= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0 h1:4t9zuDlHLcIx0ZEhmXEeFVCRsiOgpgn2QOH9N0MNjPI= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= 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= @@ -1635,16 +1691,22 @@ google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f h1:YORWxaStkWBnWgELOHTmDrqNlFXuVGEbhwbB5iK94bQ= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 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= @@ -1672,8 +1734,10 @@ google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 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= @@ -1707,8 +1771,9 @@ gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKW gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= @@ -1774,8 +1839,8 @@ 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.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.10.0 h1:R2HDMDJsHVTHA2n4RjwbeYXdOcBymXdX/JRb1v0VGhE= -k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.20.0 h1:tlyxlSvd63k7axjhuchckaRJm+a92z5GSOrTOQY5sHw= +k8s.io/klog/v2 v2.20.0/go.mod h1:Gm8eSIfQN6457haJuPaMxZw4wyP5k+ykPFlrhQDvhvw= k8s.io/kube-aggregator v0.21.2/go.mod h1:7NgmUXJziySAJ7GxMRBBwcJay7MLUoxms31fw/ICpYk= k8s.io/kube-controller-manager v0.21.2/go.mod h1:gu0rV2UWy1k05E3kZxJFQE1F7RR1PZlq83+9J+lWlno= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= @@ -1801,6 +1866,7 @@ modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03 modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/hack/boilerplate/boilerplate.go b/hack/boilerplate/boilerplate.go index 3bd06b4da2a4..bb7e411bd40f 100644 --- a/hack/boilerplate/boilerplate.go +++ b/hack/boilerplate/boilerplate.go @@ -35,7 +35,7 @@ var ( skippedPaths = regexp.MustCompile(`Godeps|third_party|_gopath|_output|\.git|cluster/env.sh|vendor|test/e2e/generated/bindata.go|site/themes/docsy|test/integration/testdata`) windowdNewLine = regexp.MustCompile(`\r`) txtExtension = regexp.MustCompile(`\.txt`) - goBuildTag = regexp.MustCompile(`(?m)^(// \+build.*\n)+\n`) + goBuildTag = regexp.MustCompile(`(?m)^(//go:build.*\n// \+build.*\n)+\n`) shebang = regexp.MustCompile(`(?m)^(#!.*\n)\n*`) copyright = regexp.MustCompile(`Copyright YEAR`) copyrightReal = regexp.MustCompile(`Copyright \d{4}`) diff --git a/hack/jenkins/build/minikube_build_upload_latest.sh b/hack/jenkins/build/minikube_build_upload_latest.sh index b6b50cc86ce7..91ec72589bac 100755 --- a/hack/jenkins/build/minikube_build_upload_latest.sh +++ b/hack/jenkins/build/minikube_build_upload_latest.sh @@ -22,8 +22,7 @@ set -eux -o pipefail readonly bucket="minikube/latest" # Make sure the right golang version is installed based on Makefile -WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') -./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local +./hack/jenkins/installers/check_install_golang.sh /usr/local declare -rx GOPATH=/var/lib/jenkins/go diff --git a/hack/jenkins/build_iso.sh b/hack/jenkins/build_iso.sh index 73ded6d388ae..792281e4026e 100755 --- a/hack/jenkins/build_iso.sh +++ b/hack/jenkins/build_iso.sh @@ -24,6 +24,9 @@ set -x -o pipefail # Make sure gh is installed and configured ./hack/jenkins/installers/check_install_gh.sh +# Make sure golang is installed and configured +./hack/jenkins/installers/check_install_golang.sh "/usr/local" + # Make sure all required packages are installed sudo apt-get update sudo apt-get -y install build-essential unzip rsync bc python2 p7zip-full diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh index 2c795da101c7..34edd0b1ba71 100755 --- a/hack/jenkins/common.sh +++ b/hack/jenkins/common.sh @@ -84,14 +84,14 @@ fi # We need pstree for the restart cronjobs if [ "$(uname)" != "Darwin" ]; then - sudo apt-get -y install lsof psmisc + sudo apt-get -y install lsof psmisc dnsutils else brew install pstree coreutils pidof ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout || true fi # installing golang so we could do go get for gopogh -./installers/check_install_golang.sh "1.16.7" "/usr/local" || true +./installers/check_install_golang.sh "/usr/local" || true # install docker and kubectl if not present sudo ARCH="$ARCH" ./installers/check_install_docker.sh || true diff --git a/hack/jenkins/installers/check_install_github_release.sh b/hack/jenkins/installers/check_install_github_release.sh new file mode 100755 index 000000000000..b03398c818c8 --- /dev/null +++ b/hack/jenkins/installers/check_install_github_release.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Copyright 2021 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 -eux -o pipefail + +echo "Installing latest version of github-release" +go install github.com/github-release/github-release@latest diff --git a/hack/jenkins/installers/check_install_golang.sh b/hack/jenkins/installers/check_install_golang.sh index 4ee97d5b1c24..e47055364b59 100755 --- a/hack/jenkins/installers/check_install_golang.sh +++ b/hack/jenkins/installers/check_install_golang.sh @@ -16,14 +16,14 @@ set -eux -o pipefail -if (($# < 2)); then - echo "ERROR: given ! ($#) number of parameters but expect 2." - echo "USAGE: ./check_install_golang.sh VERSION_TO_INSTALL INSTALL_PATH" +if (($# < 1)); then + echo "ERROR: given ! ($#) parameters but expected 1." + echo "USAGE: ./check_install_golang.sh INSTALL_PATH" exit 1 fi -VERSION_TO_INSTALL=${1} -INSTALL_PATH=${2} +VERSION_TO_INSTALL=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') +INSTALL_PATH=${1} function current_arch() { case $(arch) in @@ -51,7 +51,7 @@ function check_and_install_golang() { fi # golang has been installed and check its version - if [[ $(go version) =~ (([0-9]+)\.([0-9]+).([0-9]+).([\.0-9]*)) ]]; then + if [[ $(go version | cut -d' ' -f 3) =~ go(([0-9]+)\.([0-9]+).([0-9]+)*) ]]; then HOST_VERSION=${BASH_REMATCH[1]} if [ $HOST_VERSION = $VERSION_TO_INSTALL ]; then echo "go version on the host looks good : $HOST_VERSION" diff --git a/hack/jenkins/kicbase_auto_build.sh b/hack/jenkins/kicbase_auto_build.sh index 4a05018dfc35..57536132a109 100755 --- a/hack/jenkins/kicbase_auto_build.sh +++ b/hack/jenkins/kicbase_auto_build.sh @@ -24,6 +24,9 @@ docker login -u ${DOCKERHUB_USER} -p ${DOCKERHUB_PASS} # Make sure gh is installed and configured ./hack/jenkins/installers/check_install_gh.sh +# Make sure golang is installed and configured +./hack/jenkins/installers/check_install_golang.sh "/usr/local" || true + # Let's make sure we have the newest kicbase reference curl -L https://github.com/kubernetes/minikube/raw/master/pkg/drivers/kic/types.go --output types-head.go # kicbase tags are of the form VERSION-TIMESTAMP-PR, so this grep finds that TIMESTAMP in the middle diff --git a/hack/jenkins/linux_integration_tests_docker.sh b/hack/jenkins/linux_integration_tests_docker.sh index d769d969c51e..6e85d4d13305 100755 --- a/hack/jenkins/linux_integration_tests_docker.sh +++ b/hack/jenkins/linux_integration_tests_docker.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # 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. +# access_token: The Github API access token. Injected by the Jenkins credential provider. set -e diff --git a/hack/jenkins/minikube_cross_build_and_upload.sh b/hack/jenkins/minikube_cross_build_and_upload.sh index 94750f69968b..8d317497c492 100755 --- a/hack/jenkins/minikube_cross_build_and_upload.sh +++ b/hack/jenkins/minikube_cross_build_and_upload.sh @@ -26,8 +26,7 @@ set -eux -o pipefail readonly bucket="minikube-builds" # Make sure the right golang version is installed based on Makefile -WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') -./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local +./hack/jenkins/installers/check_install_golang.sh /usr/local declare -rx BUILD_IN_DOCKER=y @@ -43,6 +42,7 @@ docker rm $(docker ps -aq) || true make -j 16 \ all \ minikube-darwin-arm64 \ + out/mkcmp \ out/minikube_${DEB_VER}_amd64.deb \ out/minikube_${DEB_VER}_arm64.deb \ out/docker-machine-driver-kvm2_$(make deb_version_base).deb \ diff --git a/hack/jenkins/prbot.sh b/hack/jenkins/prbot.sh index 0f68772e9b81..92230c8de776 100644 --- a/hack/jenkins/prbot.sh +++ b/hack/jenkins/prbot.sh @@ -17,30 +17,34 @@ set -x -o pipefail # Only run this on PRs if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then - exit 0 + exit 0 fi -# Make sure docker is installed and configured +# Make sure docker is installed and configured #./installers/check_install_docker.sh -# Make sure gh is installed and configured -./installers/check_install_gh.sh +# Make sure gh is installed and configured +./installers/check_install_gh.sh -# Make sure go is installed and configured -./installers/check_install_golang.sh "1.16" "/usr/local" || true +# Make sure go is installed and configured +./installers/check_install_golang.sh "/usr/local" || true -# Grab latest code -git clone https://github.com/kubernetes/minikube.git -cd minikube +# Grab latest code +git clone https://github.com/kubernetes/minikube.git +cd minikube -# Build minikube binary and mkcmp binary -make out/minikube out/mkcmp +# Grab the PR's version of mkcmp, so it's easier to test changes +gsutil cp "gs://minikube-builds/${MINIKUBE_LOCATION}/mkcmp" . +chmod +x ./mkcmp + +# Build minikube binary +make out/minikube # Make sure there aren't any old minikube clusters laying around out/minikube delete --all -# Run mkcmp -out/mkcmp out/minikube pr://${MINIKUBE_LOCATION} | tee mkcmp.log +# Run mkcmp +./mkcmp out/minikube pr://${MINIKUBE_LOCATION} | tee mkcmp.log if [ $? -gt 0 ]; then # Comment that mkcmp failed gh pr comment ${MINIKUBE_LOCATION} --body "timing minikube failed, please try again" diff --git a/hack/jenkins/preload_generation.sh b/hack/jenkins/preload_generation.sh index 66e2ba112543..b019d6f6e12a 100644 --- a/hack/jenkins/preload_generation.sh +++ b/hack/jenkins/preload_generation.sh @@ -21,8 +21,7 @@ set -eux -o pipefail # Make sure the right golang version is installed based on Makefile -WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') -./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local +./hack/jenkins/installers/check_install_golang.sh /usr/local make upload-preloaded-images-tar make clean diff --git a/hack/jenkins/release_github_page.sh b/hack/jenkins/release_github_page.sh index 472682054f3c..9bf7f646a2b6 100755 --- a/hack/jenkins/release_github_page.sh +++ b/hack/jenkins/release_github_page.sh @@ -35,6 +35,11 @@ readonly GITHUB_ORGANIZATION="kubernetes" readonly GITHUB_REPO="minikube" readonly PROJECT_NAME="${GITHUB_REPO}" +# installing golang to install github-release +./hack/jenkins/installers/check_install_golang.sh "/usr/local" +# installing latest version of github-release +#./hack/jenkins/installers/check_install_github_release.sh + RELEASE_FLAGS="" if ! [[ ${VERSION_BUILD} =~ ^[0-9]+$ ]]; then RELEASE_FLAGS="-p" # Pre-release diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index e47a49a52e71..891ed6f6f5f2 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -85,7 +85,11 @@ awk -F, 'NR>1 { | sort -g -t, -k2,2 \ >> "$TMP_FAILED_RATES" -FAILED_RATES_LINES=$(wc -l < "$TMP_FAILED_RATES") +# Filter out arm64, macOS and windows tests until they're more stable +TMP_FAILED_RATES_FILTERED=$(mktemp) +grep -v "arm64\|macOS\|crio" "$TMP_FAILED_RATES" > "$TMP_FAILED_RATES_FILTERED" + +FAILED_RATES_LINES=$(wc -l < "$TMP_FAILED_RATES_FILTERED") if [[ "$FAILED_RATES_LINES" -eq 0 ]]; then echo "No failed tests! Aborting without commenting..." 1>&2 exit 0 @@ -102,7 +106,7 @@ TEST_GOPOGH_LINK_FORMAT='https://storage.googleapis.com/minikube-builds/logs/'${ # 1) Get the first $MAX_REPORTED_TESTS lines. # 2) Print a row in the table with the environment, test name, flake rate, and a link to the flake chart for that test. # 3) Append these rows to file $TMP_COMMENT. -head -n "$MAX_REPORTED_TESTS" "$TMP_FAILED_RATES" \ +head -n "$MAX_REPORTED_TESTS" "$TMP_FAILED_RATES_FILTERED" \ | awk '-F[:,]' '{ if ($3 != "n/a") { rate_text = sprintf("%3$s ([chart]('$TEST_CHART_LINK_FORMAT'))", $1, $2, $3) diff --git a/hack/preload-images/generate.go b/hack/preload-images/generate.go index 88ac9024635a..25e98d2b7794 100644 --- a/hack/preload-images/generate.go +++ b/hack/preload-images/generate.go @@ -93,7 +93,7 @@ func generateTarball(kubernetesVersion, containerRuntime, tarballFilename string if err != nil { return errors.Wrap(err, "failed create new runtime") } - if err := cr.Enable(true, false); err != nil { + if err := cr.Enable(true, false, false); err != nil { return errors.Wrap(err, "enable container runtime") } diff --git a/hack/release_notes.sh b/hack/release_notes.sh index ef316f8ed339..a0cdc0f60102 100755 --- a/hack/release_notes.sh +++ b/hack/release_notes.sh @@ -74,6 +74,3 @@ if [[ "$recent" != *"beta"* ]]; then echo "" echo "Check out our [contributions leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/$recent/) for this release!" fi - -echo "" -echo "Don't forget to run `make update-leaderboard` & `make time-to-k8s-benchmark`!" diff --git a/hack/update/golang_version/update_golang_version.go b/hack/update/golang_version/update_golang_version.go index 4978e46b2dc1..d66f1c890d28 100644 --- a/hack/update/golang_version/update_golang_version.go +++ b/hack/update/golang_version/update_golang_version.go @@ -101,7 +101,7 @@ var ( `GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`, }, }, - ".github/workflows/pr_verified.yaml": { + ".github/workflows/functional_verified.yml": { Replace: map[string]string{ `GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`, }, @@ -111,15 +111,11 @@ var ( `(?m)^go .*`: `go {{.StableVersionMM}}`, }, }, - "hack/jenkins/common.sh": { - Replace: map[string]string{ - `\.\/installers\/check_install_golang\.sh \".*\" \"\/usr\/local\" .*`: `./installers/check_install_golang.sh "{{.StableVersion}}" "/usr/local" || true`, - }, - }, "Makefile": { Replace: map[string]string{ // searching for 1.* so it does NOT match "KVM_GO_VERSION ?= $(GO_VERSION:.0=)" in the Makefile - `GO_VERSION \?= 1.*`: `GO_VERSION ?= {{.StableVersion}}`, + `GO_VERSION \?= 1.*`: `GO_VERSION ?= {{.StableVersion}}`, + `GO_K8S_VERSION_PREFIX \?= v1.*`: `GO_K8S_VERSION_PREFIX ?= {{.K8SVersion}}`, }, }, } @@ -134,6 +130,8 @@ var ( type Data struct { StableVersion string `json:"stableVersion"` StableVersionMM string `json:"stableVersionMM"` // go.mod wants go version in . format + K8SVersion string `json:"k8sVersion"` // as of v1.23.0 Kubernetes uses k8s version in golang image name because: https://github.com/kubernetes/kubernetes/pull/103692#issuecomment-908659826 + } func main() { @@ -142,30 +140,33 @@ func main() { defer cancel() // get Golang stable version - stable, stableMM, err := goVersions() + stable, stableMM, k8sVersion, err := goVersions() if err != nil || stable == "" || stableMM == "" { klog.Fatalf("Unable to get Golang stable version: %v", err) } - data := Data{StableVersion: stable, StableVersionMM: stableMM} + data := Data{StableVersion: stable, StableVersionMM: stableMM, K8SVersion: k8sVersion} klog.Infof("Golang stable version: %s", data.StableVersion) update.Apply(ctx, schema, data, prBranchPrefix, prTitle, prIssue) } // goVersion returns Golang stable version. -func goVersions() (stable, stableMM string, err error) { +func goVersions() (stable, stableMM, k8sVersion string, err error) { // will update to the same image that kubernetes project uses resp, err := http.Get("https://raw.githubusercontent.com/kubernetes/kubernetes/master/build/build-image/cross/VERSION") if err != nil { - return "", "", err + return "", "", "", err } body, err := ioutil.ReadAll(resp.Body) if err != nil { - return "", "", err + return "", "", "", err } - stable = strings.TrimPrefix(string(body), "v") - stable = strings.Split(stable, "-")[0] + // example response: v1.23.0-go1.17-buster.0 + stable = string(body) + k8sVersion = strings.Split(stable, "-")[0] + stable = strings.Split(stable, "-")[1] + stable = strings.Replace(stable, "go", "", 1) mmp := strings.SplitN(stable, ".", 3) stableMM = strings.Join(mmp[0:2], ".") // . version - return stable, stableMM, nil + return stable, stableMM, k8sVersion, nil } diff --git a/hack/update/gopogh_version/update_gopogh_version.go b/hack/update/gopogh_version/update_gopogh_version.go index 0edad7d24249..6bce9d08c5ff 100644 --- a/hack/update/gopogh_version/update_gopogh_version.go +++ b/hack/update/gopogh_version/update_gopogh_version.go @@ -53,22 +53,12 @@ var ( `(?U)https://github.com/medyagh/gopogh/releases/download/.*/gopogh`: `https://github.com/medyagh/gopogh/releases/download/{{.StableVersion}}/gopogh`, }, }, - ".github/workflows/pr_verified.yaml": { + ".github/workflows/functional_verified.yml": { Replace: map[string]string{ `(?U)https://github.com/medyagh/gopogh/releases/download/.*/gopogh`: `https://github.com/medyagh/gopogh/releases/download/{{.StableVersion}}/gopogh`, }, }, - "hack/jenkins/windows_integration_test_docker.ps1": { - Replace: map[string]string{ - `(?U)https://github.com/medyagh/gopogh/releases/download/.*/gopogh`: `https://github.com/medyagh/gopogh/releases/download/{{.StableVersion}}/gopogh`, - }, - }, - "hack/jenkins/windows_integration_test_hyperv.ps1": { - Replace: map[string]string{ - `(?U)https://github.com/medyagh/gopogh/releases/download/.*/gopogh`: `https://github.com/medyagh/gopogh/releases/download/{{.StableVersion}}/gopogh`, - }, - }, - "hack/jenkins/windows_integration_test_virtualbox.ps1": { + "hack/jenkins/common.ps1": { Replace: map[string]string{ `(?U)https://github.com/medyagh/gopogh/releases/download/.*/gopogh`: `https://github.com/medyagh/gopogh/releases/download/{{.StableVersion}}/gopogh`, }, diff --git a/hack/update_contributions.sh b/hack/update_contributions.sh index 6cd89b908f5c..854395348729 100755 --- a/hack/update_contributions.sh +++ b/hack/update_contributions.sh @@ -38,18 +38,20 @@ git pull https://github.com/kubernetes/minikube.git master --tags tags_to_generate=${1:-1} -# 1) Get tags. -# 2) Filter out beta tags. -# 3) Parse tag name into its version numbers. -# 4) Sort by ascending version numbers. -# 5) Reform tag name from version numbers. -# 6) Pair up current and previous tags. Format: (previous tag, current tag) -# 7) Format command to get tag dates. -# 8) Execute command to get dates of previous and current tag. Format: (current tag, prev date, current date) -# 9) Add negative line numbers to each tag. Format: (negative index, current tag, prev date, current date) +# 1) Fetch latest tags (https://github.com/kubernetes/minikube/issues/12561). +# 2) Get tags. +# 3) Filter out beta tags. +# 4) Parse tag name into its version numbers. +# 5) Sort by ascending version numbers. +# 6) Reform tag name from version numbers. +# 7) Pair up current and previous tags. Format: (previous tag, current tag) +# 8) Format command to get tag dates. +# 9) Execute command to get dates of previous and current tag. Format: (current tag, prev date, current date) +# 10) Add negative line numbers to each tag. Format: (negative index, current tag, prev date, current date) # - Negative line numbers are used since entries are sorted in descending order. -# 10) Take most recent $tags_to_generate tags. +# 11) Take most recent $tags_to_generate tags. tags_with_range=$( + git fetch --tags -f \ git --no-pager tag \ | grep -v -e "beta" \ | sed -r "s/v([0-9]*)\.([0-9]*)\.([0-9]*)/\1 \2 \3/" \ diff --git a/installers/windows/minikube.nsi b/installers/windows/minikube.nsi index 03fe6d5220c0..941037b8a808 100644 --- a/installers/windows/minikube.nsi +++ b/installers/windows/minikube.nsi @@ -142,11 +142,11 @@ Section "Install" WriteRegStr HKLM "${UNINSTALLDIR}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "${UNINSTALLDIR}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "${UNINSTALLDIR}" "DisplayIcon" "$\"$INSTDIR\logo.ico$\"" - WriteRegStr HKLM "${UNINSTALLDIR}" "Publisher" "$\"${COMPANYNAME}$\"" - WriteRegStr HKLM "${UNINSTALLDIR}" "HelpLink" "$\"${HELPURL}$\"" - WriteRegStr HKLM "${UNINSTALLDIR}" "URLUpdateInfo" "$\"${UPDATEURL}$\"" - WriteRegStr HKLM "${UNINSTALLDIR}" "URLInfoAbout" "$\"${ABOUTURL}$\"" - WriteRegStr HKLM "${UNINSTALLDIR}" "DisplayVersion" "$\"${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}$\"" + WriteRegStr HKLM "${UNINSTALLDIR}" "Publisher" "${COMPANYNAME}" + WriteRegStr HKLM "${UNINSTALLDIR}" "HelpLink" "${HELPURL}" + WriteRegStr HKLM "${UNINSTALLDIR}" "URLUpdateInfo" "${UPDATEURL}" + WriteRegStr HKLM "${UNINSTALLDIR}" "URLInfoAbout" "${ABOUTURL}" + WriteRegStr HKLM "${UNINSTALLDIR}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}" WriteRegDWORD HKLM "${UNINSTALLDIR}" "VersionMajor" ${VERSIONMAJOR} WriteRegDWORD HKLM "${UNINSTALLDIR}" "VersionMinor" ${VERSIONMINOR} diff --git a/pkg/addons/addons.go b/pkg/addons/addons.go index 3f1bb4568d55..5580cf198a8f 100644 --- a/pkg/addons/addons.go +++ b/pkg/addons/addons.go @@ -18,6 +18,7 @@ package addons import ( "fmt" + "os/exec" "path" "runtime" "sort" @@ -56,6 +57,9 @@ var Force = false // Currently only used for gcp-auth var Refresh = false +// ErrSkipThisAddon is a special error that tells us to not error out, but to also not mark the addon as enabled +var ErrSkipThisAddon = errors.New("skipping this addon") + // RunCallbacks runs all actions associated to an addon, but does not set it (thread-safe) func RunCallbacks(cc *config.ClusterConfig, name string, value string) error { klog.Infof("Setting %s=%s in profile %q", name, value, cc.Name) @@ -66,11 +70,17 @@ func RunCallbacks(cc *config.ClusterConfig, name string, value string) error { // Run any additional validations for this property if err := run(cc, name, value, a.validations); err != nil { + if errors.Is(err, ErrSkipThisAddon) { + return err + } return errors.Wrap(err, "running validations") } // Run any callbacks for this property if err := run(cc, name, value, a.callbacks); err != nil { + if errors.Is(err, ErrSkipThisAddon) { + return err + } return errors.Wrap(err, "running callbacks") } return nil @@ -93,6 +103,9 @@ func SetAndSave(profile string, name string, value string) error { } if err := RunCallbacks(cc, name, value); err != nil { + if errors.Is(err, ErrSkipThisAddon) { + return err + } return errors.Wrap(err, "run callbacks") } @@ -106,15 +119,18 @@ func SetAndSave(profile string, name string, value string) error { // Runs all the validation or callback functions and collects errors func run(cc *config.ClusterConfig, name string, value string, fns []setFn) error { - var errors []error + var errs []error for _, fn := range fns { err := fn(cc, name, value) if err != nil { - errors = append(errors, err) + if errors.Is(err, ErrSkipThisAddon) { + return ErrSkipThisAddon + } + errs = append(errs, err) } } - if len(errors) > 0 { - return fmt.Errorf("%v", errors) + if len(errs) > 0 { + return fmt.Errorf("%v", errs) } return nil } @@ -152,6 +168,56 @@ func EnableOrDisableAddon(cc *config.ClusterConfig, name string, val string) err } } + api, err := machine.NewAPIClient() + if err != nil { + return errors.Wrap(err, "machine client") + } + defer api.Close() + + cp, err := config.PrimaryControlPlane(cc) + if err != nil { + exit.Error(reason.GuestCpConfig, "Error getting primary control plane", err) + } + + // Persist images even if the machine is running so starting gets the correct images. + images, customRegistries, err := assets.SelectAndPersistImages(addon, cc) + if err != nil { + exit.Error(reason.HostSaveProfile, "Failed to persist images", err) + } + + mName := config.MachineName(*cc, cp) + host, err := machine.LoadHost(api, mName) + if err != nil || !machine.IsRunning(api, mName) { + klog.Warningf("%q is not running, setting %s=%v and skipping enablement (err=%v)", mName, addon.Name(), enable, err) + return nil + } + + runner, err := machine.CommandRunner(host) + if err != nil { + return errors.Wrap(err, "command runner") + } + + bail, err := addonSpecificChecks(cc, name, enable, runner) + if err != nil { + return err + } + if bail { + return nil + } + + var networkInfo assets.NetworkInfo + if len(cc.Nodes) >= 1 { + networkInfo.ControlPlaneNodeIP = cc.Nodes[0].IP + networkInfo.ControlPlaneNodePort = cc.Nodes[0].Port + } else { + out.WarningT("At least needs control plane nodes to enable addon") + } + + data := assets.GenerateTemplateData(addon, cc.KubernetesConfig, networkInfo, images, customRegistries) + return enableOrDisableAddonInternal(cc, addon, runner, data, enable) +} + +func addonSpecificChecks(cc *config.ClusterConfig, name string, enable bool, runner command.Runner) (bool, error) { // to match both ingress and ingress-dns addons if strings.HasPrefix(name, "ingress") && enable { if driver.IsKIC(cc.Driver) { @@ -163,7 +229,7 @@ func EnableOrDisableAddon(cc *config.ClusterConfig, name string, val string) err } } if err := supportLegacyIngress(cc); err != nil { - return err + return false, err } } @@ -178,64 +244,36 @@ func EnableOrDisableAddon(cc *config.ClusterConfig, name string, val string) err } } - api, err := machine.NewAPIClient() - if err != nil { - return errors.Wrap(err, "machine client") - } - defer api.Close() - - cp, err := config.PrimaryControlPlane(cc) - if err != nil { - exit.Error(reason.GuestCpConfig, "Error getting primary control plane", err) - } - - // Persist images even if the machine is running so starting gets the correct images. - images, customRegistries, err := assets.SelectAndPersistImages(addon, cc) - if err != nil { - exit.Error(reason.HostSaveProfile, "Failed to persist images", err) - } - - mName := config.MachineName(*cc, cp) - host, err := machine.LoadHost(api, mName) - if err != nil || !machine.IsRunning(api, mName) { - klog.Warningf("%q is not running, setting %s=%v and skipping enablement (err=%v)", mName, addon.Name(), enable, err) - return nil - } - if name == "registry" { if driver.NeedsPortForward(cc.Driver) { port, err := oci.ForwardedPort(cc.Driver, cc.Name, constants.RegistryAddonPort) if err != nil { - return errors.Wrap(err, "registry port") + return false, errors.Wrap(err, "registry port") } if enable { out.Boxed(`Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000`, out.V{"driver": cc.Driver, "port": port}) } out.Styled(style.Documentation, `For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}`, out.V{"driver": cc.Driver}) } - } - - runner, err := machine.CommandRunner(host) - if err != nil { - return errors.Wrap(err, "command runner") + return false, nil } if name == "auto-pause" && !enable { // needs to be disabled before deleting the service file in the internal disable if err := sysinit.New(runner).DisableNow("auto-pause"); err != nil { klog.ErrorS(err, "failed to disable", "service", "auto-pause") } + return false, nil } - var networkInfo assets.NetworkInfo - if len(cc.Nodes) >= 1 { - networkInfo.ControlPlaneNodeIP = cc.Nodes[0].IP - networkInfo.ControlPlaneNodePort = cc.Nodes[0].Port - } else { - out.WarningT("At least needs control plane nodes to enable addon") + // If the gcp-auth credentials haven't been mounted in, don't start the pods + if name == "gcp-auth" { + rr, err := runner.RunCmd(exec.Command("cat", credentialsPath)) + if err != nil || rr.Stdout.String() == "" { + return true, nil + } } - data := assets.GenerateTemplateData(addon, cc.KubernetesConfig, networkInfo, images, customRegistries) - return enableOrDisableAddonInternal(cc, addon, runner, data, enable) + return false, nil } func isAddonAlreadySet(cc *config.ClusterConfig, addon *assets.Addon, enable bool) bool { @@ -411,7 +449,7 @@ func Start(wg *sync.WaitGroup, cc *config.ClusterConfig, toEnable map[string]boo awg.Add(1) go func(name string) { err := RunCallbacks(cc, name, "true") - if err != nil { + if err != nil && !errors.Is(err, ErrSkipThisAddon) { out.WarningT("Enabling '{{.name}}' returned an error: {{.error}}", out.V{"name": name, "error": err}) } else { enabledAddons = append(enabledAddons, name) diff --git a/pkg/addons/addons_gcpauth.go b/pkg/addons/addons_gcpauth.go index acf98af15bc9..2172ae19c414 100644 --- a/pkg/addons/addons_gcpauth.go +++ b/pkg/addons/addons_gcpauth.go @@ -20,8 +20,10 @@ import ( "bytes" "context" "fmt" + "io/ioutil" "os" "os/exec" + "path" "strconv" "strings" "time" @@ -70,8 +72,17 @@ func enableAddonGCPAuth(cfg *config.ClusterConfig) error { // Grab credentials from where GCP would normally look ctx := context.Background() creds, err := google.FindDefaultCredentials(ctx) - if err != nil || creds.JSON == nil { - exit.Message(reason.InternalCredsNotFound, "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.") + if err != nil { + if detect.IsCloudShell() { + if c := os.Getenv("CLOUDSDK_CONFIG"); c != "" { + f, err := ioutil.ReadFile(path.Join(c, "application_default_credentials.json")) + if err == nil { + creds, _ = google.CredentialsFromJSON(ctx, f) + } + } + } else { + exit.Message(reason.InternalCredsNotFound, "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.") + } } // Create a registry secret in every namespace we can find @@ -82,8 +93,14 @@ func enableAddonGCPAuth(cfg *config.ClusterConfig) error { } // If the env var is explicitly set, even in GCE, then defer to the user and continue - if !Force && detect.IsOnGCE() && os.Getenv("GOOGLE_APPLICATION_CREDENTUALS") == "" { - exit.Message(reason.InternalCredsNotNeeded, "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.") + if !Force && detect.IsOnGCE() && os.Getenv("GOOGLE_APPLICATION_CREDENTIALS") == "" { + out.WarningT("It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.") + return nil + } + + if creds.JSON == nil { + out.WarningT("You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.") + return nil } // Actually copy the creds over @@ -122,19 +139,23 @@ or set the GOOGLE_CLOUD_PROJECT environment variable.`) } func createPullSecret(cc *config.ClusterConfig, creds *google.Credentials) error { - client, err := service.K8s.GetCoreClient(cc.Name) - if err != nil { - return err - } - - namespaces, err := client.Namespaces().List(context.TODO(), metav1.ListOptions{}) - if err != nil { - return err + if creds == nil { + return errors.New("no credentials, skipping creating pull secret") } token, err := creds.TokenSource.Token() // Only try to add secret if Token was found if err == nil { + client, err := service.K8s.GetCoreClient(cc.Name) + if err != nil { + return err + } + + namespaces, err := client.Namespaces().List(context.TODO(), metav1.ListOptions{}) + if err != nil { + return err + } + dockercfg := "" registries := append(gcr_config.DefaultGCRRegistries[:], gcr_config.DefaultARRegistries[:]...) for _, reg := range registries { @@ -148,19 +169,20 @@ func createPullSecret(cc *config.ClusterConfig, creds *google.Credentials) error } for _, n := range namespaces.Items { + if skipNamespace(n.Name) { + continue + } secrets := client.Secrets(n.Name) exists := false - if !Refresh { - secList, err := secrets.List(context.TODO(), metav1.ListOptions{}) - if err != nil { - return err - } - for _, s := range secList.Items { - if s.Name == secretName { - exists = true - break - } + secList, err := secrets.List(context.TODO(), metav1.ListOptions{}) + if err != nil { + return err + } + for _, s := range secList.Items { + if s.Name == secretName { + exists = true + break } } @@ -237,7 +259,7 @@ func refreshExistingPods(cc *config.ClusterConfig) error { } for _, n := range namespaces.Items { // Ignore kube-system and gcp-auth namespaces - if n.Name == metav1.NamespaceSystem || n.Name == namespaceName { + if skipNamespace(n.Name) { continue } @@ -307,11 +329,33 @@ func disableAddonGCPAuth(cfg *config.ClusterConfig) error { // No need to check for an error here, if the secret doesn't exist, no harm done. for _, n := range namespaces.Items { + if skipNamespace(n.Name) { + continue + } secrets := client.Secrets(n.Name) err := secrets.Delete(context.TODO(), secretName, metav1.DeleteOptions{}) if err != nil { klog.Infof("error deleting secret: %v", err) } + + serviceaccounts := client.ServiceAccounts(n.Name) + salist, err := serviceaccounts.List(context.TODO(), metav1.ListOptions{}) + if err != nil { + klog.Infof("error getting service accounts: %v", err) + return err + } + for _, sa := range salist.Items { + for i, ps := range sa.ImagePullSecrets { + if ps.Name == secretName { + sa.ImagePullSecrets = append(sa.ImagePullSecrets[:i], sa.ImagePullSecrets[i+1:]...) + _, err := serviceaccounts.Update(context.TODO(), &sa, metav1.UpdateOptions{}) + if err != nil { + return err + } + break + } + } + } } return nil @@ -322,6 +366,13 @@ func verifyGCPAuthAddon(cc *config.ClusterConfig, name string, val string) error if err != nil { return errors.Wrapf(err, "parsing bool: %s", name) } + + // If we're in GCE and didn't actually start the gcp-auth pods, don't check for them. + // We also don't want to actually set the addon as enabled, so just exit completely. + if enable && !Force && detect.IsOnGCE() && os.Getenv("GOOGLE_APPLICATION_CREDENTIALS") == "" { + return ErrSkipThisAddon + } + err = verifyAddonStatusInternal(cc, name, val, "gcp-auth") if err != nil { return err @@ -344,3 +395,7 @@ func verifyGCPAuthAddon(cc *config.ClusterConfig, name string, val string) error return err } + +func skipNamespace(name string) bool { + return name == metav1.NamespaceSystem || name == namespaceName +} diff --git a/pkg/drivers/hyperkit/driver.go b/pkg/drivers/hyperkit/driver.go index d074b490177f..3c908d6c75df 100644 --- a/pkg/drivers/hyperkit/driver.go +++ b/pkg/drivers/hyperkit/driver.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/drivers/hyperkit/driver_test.go b/pkg/drivers/hyperkit/driver_test.go index 22d4ddbd39c0..40cbb6bdd0fd 100644 --- a/pkg/drivers/hyperkit/driver_test.go +++ b/pkg/drivers/hyperkit/driver_test.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/drivers/hyperkit/network.go b/pkg/drivers/hyperkit/network.go index 2f5c46bfcbd1..445948c84755 100644 --- a/pkg/drivers/hyperkit/network.go +++ b/pkg/drivers/hyperkit/network.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/drivers/hyperkit/network_test.go b/pkg/drivers/hyperkit/network_test.go index c8b6d1283a4b..4c6b27ac1f30 100644 --- a/pkg/drivers/hyperkit/network_test.go +++ b/pkg/drivers/hyperkit/network_test.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/drivers/hyperkit/vmnet.go b/pkg/drivers/hyperkit/vmnet.go index fb1a7d02421a..8e3509f398df 100644 --- a/pkg/drivers/hyperkit/vmnet.go +++ b/pkg/drivers/hyperkit/vmnet.go @@ -1,3 +1,4 @@ +//go:build darwin && cgo // +build darwin,cgo /* diff --git a/pkg/drivers/hyperkit/vmnet_stub.go b/pkg/drivers/hyperkit/vmnet_stub.go index 6a9f93d7608f..ef4578d63471 100644 --- a/pkg/drivers/hyperkit/vmnet_stub.go +++ b/pkg/drivers/hyperkit/vmnet_stub.go @@ -1,3 +1,4 @@ +//go:build darwin && !cgo // +build darwin,!cgo /* diff --git a/pkg/drivers/kic/oci/cgroups_linux.go b/pkg/drivers/kic/oci/cgroups_linux.go index c56251fa18d8..3a2bb3c573a3 100644 --- a/pkg/drivers/kic/oci/cgroups_linux.go +++ b/pkg/drivers/kic/oci/cgroups_linux.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* diff --git a/pkg/drivers/kic/oci/cgroups_other.go b/pkg/drivers/kic/oci/cgroups_other.go index 7d91d8d2c345..1f856054f55f 100644 --- a/pkg/drivers/kic/oci/cgroups_other.go +++ b/pkg/drivers/kic/oci/cgroups_other.go @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux /* diff --git a/pkg/drivers/kic/oci/network.go b/pkg/drivers/kic/oci/network.go index b8c34533404b..a1cff1762f25 100644 --- a/pkg/drivers/kic/oci/network.go +++ b/pkg/drivers/kic/oci/network.go @@ -34,6 +34,33 @@ import ( // RoutableHostIPFromInside returns the ip/dns of the host that container lives on // is routable from inside the container func RoutableHostIPFromInside(ociBin string, clusterName string, containerName string) (net.IP, error) { + si, err := CachedDaemonInfo(ociBin) + if err != nil { + return nil, err + } + if si.Rootless { + if IsExternalDaemonHost(ociBin) { + return nil, fmt.Errorf("function RoutableHostIPFromInside is not implemented for external rootless daemons") + // TODO: parse DaemonHost() + } + addrs, err := net.InterfaceAddrs() + if err != nil { + return nil, err + } + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPAddr: + ip = v.IP + case *net.IPNet: + ip = v.IP + } + if ip != nil && !ip.IsLoopback() { + return ip, nil + } + } + return nil, fmt.Errorf("could not detect host IP, tried %v", addrs) + } if ociBin == Docker { if runtime.GOOS == "linux" { info, err := containerNetworkInspect(ociBin, clusterName) diff --git a/pkg/drivers/kic/oci/oci.go b/pkg/drivers/kic/oci/oci.go index 258c62c860fb..cacb16a9cc82 100644 --- a/pkg/drivers/kic/oci/oci.go +++ b/pkg/drivers/kic/oci/oci.go @@ -162,6 +162,9 @@ func CreateContainerNode(p CreateParams) error { // including some ones docker would otherwise do by default. // for now this is what we want. in the future we may revisit this. "--privileged", + // enable /dev/fuse explicitly for fuse-overlayfs + // (Rootless Docker does not automatically mount /dev/fuse with --privileged) + "--device", "/dev/fuse", "--security-opt", "seccomp=unconfined", // ignore seccomp "--tmpfs", "/tmp", // various things depend on working /tmp "--tmpfs", "/run", // systemd wants a writable /run diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go index c0af45335624..6c116840c8c5 100644 --- a/pkg/drivers/kic/types.go +++ b/pkg/drivers/kic/types.go @@ -24,13 +24,13 @@ import ( const ( // Version is the current version of kic - Version = "v0.0.25-1628619379-12032" + Version = "v0.0.27" // SHA of the kic base image - baseImageSHA = "937faef407987cbd8b3cb0a90c6c5dfd664817d5377be0b77a4ecbf0f9f9c1b6" + baseImageSHA = "89b4738ee74ba28684676e176752277f0db46f57d27f0e08c3feec89311e22de" // 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 ( diff --git a/pkg/drivers/kvm/disks.go b/pkg/drivers/kvm/disks.go new file mode 100644 index 000000000000..dc684c0170aa --- /dev/null +++ b/pkg/drivers/kvm/disks.go @@ -0,0 +1,81 @@ +//go:build linux +// +build linux + +/* +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 kvm + +import ( + "bytes" + "fmt" + "os" + "text/template" + + "github.com/docker/machine/libmachine/log" + "github.com/pkg/errors" + "k8s.io/minikube/pkg/drivers" + "k8s.io/minikube/pkg/util" +) + +// extraDisksTmpl ExtraDisks XML Template +const extraDisksTmpl = ` + + + + + +` + +// ExtraDisks holds the extra disks configuration +type ExtraDisks struct { + DiskPath string + DiskLogicalName string +} + +// getExtraDiskXML returns the XML that can be added to the libvirt domain XML +// for additional disks +func getExtraDiskXML(diskpath string, logicalName string) (string, error) { + var extraDisk ExtraDisks + extraDisk.DiskLogicalName = logicalName + extraDisk.DiskPath = diskpath + tmpl := template.Must(template.New("").Parse(extraDisksTmpl)) + var extraDisksXML bytes.Buffer + if err := tmpl.Execute(&extraDisksXML, extraDisk); err != nil { + return "", fmt.Errorf("couldn't generate extra disks XML: %v", err) + } + return extraDisksXML.String(), nil +} + +// createExtraDisks creates the extra disk files +func createExtraDisk(d *Driver, index int) (string, error) { + diskPath := drivers.ExtraDiskPath(d.BaseDriver, index) + log.Infof("Creating raw disk image: %s of size %v", diskPath, d.DiskSize) + + if _, err := os.Stat(diskPath); os.IsNotExist(err) { + file, err := os.OpenFile(diskPath, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0644) + if err != nil { + return "", errors.Wrap(err, "open") + } + defer file.Close() + + if err := file.Truncate(util.ConvertMBToBytes(d.DiskSize)); err != nil { + return "", errors.Wrap(err, "truncate") + } + } + return diskPath, nil + +} diff --git a/pkg/drivers/kvm/domain.go b/pkg/drivers/kvm/domain.go index a19428cdf9ee..59be23761401 100644 --- a/pkg/drivers/kvm/domain.go +++ b/pkg/drivers/kvm/domain.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* diff --git a/pkg/drivers/kvm/domain_definition_arm64.go b/pkg/drivers/kvm/domain_definition_arm64.go index 02575813fe2e..676fa5b733d0 100644 --- a/pkg/drivers/kvm/domain_definition_arm64.go +++ b/pkg/drivers/kvm/domain_definition_arm64.go @@ -1,3 +1,4 @@ +//go:build linux && arm64 // +build linux,arm64 /* @@ -77,6 +78,9 @@ const domainTmpl = ` {{if .GPU}} {{.DevicesXML}} {{end}} + {{if gt .ExtraDisks 0}} + {{.ExtraDisksXML}} + {{end}} ` diff --git a/pkg/drivers/kvm/domain_definition_x86.go b/pkg/drivers/kvm/domain_definition_x86.go index 2e2627e53c90..e10fc0c44194 100644 --- a/pkg/drivers/kvm/domain_definition_x86.go +++ b/pkg/drivers/kvm/domain_definition_x86.go @@ -1,3 +1,4 @@ +//go:build linux && amd64 // +build linux,amd64 /* @@ -75,6 +76,9 @@ const domainTmpl = ` {{if .GPU}} {{.DevicesXML}} {{end}} + {{if gt .ExtraDisks 0}} + {{.ExtraDisksXML}} + {{end}} ` diff --git a/pkg/drivers/kvm/gpu.go b/pkg/drivers/kvm/gpu.go index 2e2376f4942e..534c0d94d49e 100644 --- a/pkg/drivers/kvm/gpu.go +++ b/pkg/drivers/kvm/gpu.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* diff --git a/pkg/drivers/kvm/kvm.go b/pkg/drivers/kvm/kvm.go index 87345505ae4b..886e40152991 100644 --- a/pkg/drivers/kvm/kvm.go +++ b/pkg/drivers/kvm/kvm.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* @@ -88,6 +89,12 @@ type Driver struct { // NUMA XML NUMANodeXML string + + // Extra Disks + ExtraDisks int + + // Extra Disks XML + ExtraDisksXML []string } const ( @@ -352,6 +359,26 @@ func (d *Driver) Create() (err error) { return errors.Wrap(err, "error creating disk") } + if d.ExtraDisks > 20 { + // Limiting the number of disks to 20 arbitrarily. If more disks are + // needed, the logical name generation has to changed to create them if + // the form hdaa, hdab, etc + return errors.Wrap(err, "cannot create more than 20 extra disks") + } + for i := 0; i < d.ExtraDisks; i++ { + diskpath, err := createExtraDisk(d, i) + if err != nil { + return errors.Wrap(err, "creating extra disks") + } + // Starting the logical names for the extra disks from hdd as the cdrom device is set to hdc. + // TODO: Enhance the domain template to use variable for the logical name of the main disk and the cdrom disk. + extraDisksXML, err := getExtraDiskXML(diskpath, fmt.Sprintf("hd%v", string(rune('d'+i)))) + if err != nil { + return errors.Wrap(err, "creating extraDisk XML") + } + d.ExtraDisksXML = append(d.ExtraDisksXML, extraDisksXML) + } + if err := ensureDirPermissions(store); err != nil { log.Errorf("unable to ensure permissions on %s: %v", store, err) } diff --git a/pkg/drivers/kvm/network.go b/pkg/drivers/kvm/network.go index 1fdebd17f2de..0723948228d5 100644 --- a/pkg/drivers/kvm/network.go +++ b/pkg/drivers/kvm/network.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index 3987104f71f1..5afc4cb000d4 100755 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -134,8 +134,8 @@ var Addons = map[string]*Addon{ MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-secret.yaml", vmpath.GuestAddonsDir, "dashboard-secret.yaml", "0640"), MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-svc.yaml", vmpath.GuestAddonsDir, "dashboard-svc.yaml", "0640"), }, false, "dashboard", "kubernetes", map[string]string{ - "Dashboard": "kubernetesui/dashboard:v2.1.0@sha256:7f80b5ba141bead69c4fee8661464857af300d7d7ed0274cf7beecedc00322e6", - "MetricsScraper": "kubernetesui/metrics-scraper:v1.0.4@sha256:555981a24f184420f3be0c79d4efb6c948a85cfce84034f85a563f4151a81cbf", + "Dashboard": "kubernetesui/dashboard:v2.3.1@sha256:ec27f462cf1946220f5a9ace416a84a57c18f98c777876a8054405d1428cc92e", + "MetricsScraper": "kubernetesui/metrics-scraper:v1.0.7@sha256:36d5b3f60e1a144cc5ada820910535074bdf5cf73fb70d1ff1681537eef4e172", }, nil), "default-storageclass": NewAddon([]*BinAsset{ MustBinAsset(addons.DefaultStorageClassAssets, @@ -467,9 +467,11 @@ var Addons = map[string]*Addon{ "helm-tiller-svc.yaml", "0640"), }, false, "helm-tiller", "", map[string]string{ - "Tiller": "kubernetes-helm/tiller:v2.16.12@sha256:6003775d503546087266eda39418d221f9afb5ccfe35f637c32a1161619a3f9c", + "Tiller": "helm/tiller:v2.16.12@sha256:6003775d503546087266eda39418d221f9afb5ccfe35f637c32a1161619a3f9c", }, map[string]string{ - "Tiller": "gcr.io", + // GCR is deprecated in helm + // https://github.com/helm/helm/issues/10004#issuecomment-894478908 + "Tiller": "ghcr.io", }), "ingress-dns": NewAddon([]*BinAsset{ MustBinAsset(addons.IngressDNSAssets, @@ -478,8 +480,10 @@ var Addons = map[string]*Addon{ "ingress-dns-pod.yaml", "0640"), }, false, "ingress-dns", "", map[string]string{ - "IngressDNS": "cryptexlabs/minikube-ingress-dns:0.3.0@sha256:e252d2a4c704027342b303cc563e95d2e71d2a0f1404f55d676390e28d5093ab", - }, nil), + "IngressDNS": "k8s-minikube/minikube-ingress-dns:0.0.1@sha256:69dc3c878c2e49ad85b70fdf9e8e6e87a1f961f42c8029e0912bebfa828ade46", + }, map[string]string{ + "IngressDNS": "gcr.io", + }), "metallb": NewAddon([]*BinAsset{ MustBinAsset(addons.MetallbAssets, "metallb/metallb.yaml.tmpl", @@ -719,7 +723,7 @@ func overrideDefaults(defaultMap, overrideMap map[string]string) map[string]stri // SelectAndPersistImages selects which images to use based on addon default images, previously persisted images, and newly requested images - which are then persisted for future enables. func SelectAndPersistImages(addon *Addon, cc *config.ClusterConfig) (images, customRegistries map[string]string, err error) { - addonDefaultImages := addon.Images + addonDefaultImages := fixAddonImages(cc.KubernetesConfig.ImageRepository, addon.Images) if addonDefaultImages == nil { addonDefaultImages = make(map[string]string) } @@ -774,6 +778,23 @@ func SelectAndPersistImages(addon *Addon, cc *config.ClusterConfig) (images, cus return images, customRegistries, err } +// fixes addon image names according to image repository used +func fixAddonImages(repo string, images map[string]string) map[string]string { + if repo == "registry.cn-hangzhou.aliyuncs.com/google_containers" { + // for aliyun registry must strip namespace from image name, e.g. + // registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5 will not work + // registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5 does work + newImages := make(map[string]string) + for name, image := range images { + image = strings.TrimPrefix(image, "k8s-minikube/") + image = strings.TrimPrefix(image, "kubernetesui/") + newImages[name] = image + } + return newImages + } + return images +} + // GenerateTemplateData generates template data for template assets func GenerateTemplateData(addon *Addon, cfg config.KubernetesConfig, netInfo NetworkInfo, images, customRegistries map[string]string) interface{} { diff --git a/pkg/minikube/bootstrapper/bootstrapper.go b/pkg/minikube/bootstrapper/bootstrapper.go index 4d18749ccd23..4f9d9d0d7134 100644 --- a/pkg/minikube/bootstrapper/bootstrapper.go +++ b/pkg/minikube/bootstrapper/bootstrapper.go @@ -44,7 +44,7 @@ type Bootstrapper interface { GenerateToken(config.ClusterConfig) (string, error) // LogCommands returns a map of log type to a command which will display that log. LogCommands(config.ClusterConfig, LogOptions) map[string]string - SetupCerts(config.KubernetesConfig, config.Node) error + SetupCerts(config.ClusterConfig, config.Node) error GetAPIServerStatus(string, int) (string, error) } diff --git a/pkg/minikube/bootstrapper/bsutil/ktmpl/kubelet.go b/pkg/minikube/bootstrapper/bsutil/ktmpl/kubelet.go index 3c6f7fffda33..9e97d1aa827f 100644 --- a/pkg/minikube/bootstrapper/bsutil/ktmpl/kubelet.go +++ b/pkg/minikube/bootstrapper/bsutil/ktmpl/kubelet.go @@ -20,7 +20,7 @@ import "text/template" // KubeletSystemdTemplate hosts the override kubelet flags, written to kubeletSystemdConfFile var KubeletSystemdTemplate = template.Must(template.New("kubeletSystemdTemplate").Parse(`[Unit] -{{if or (eq .ContainerRuntime "cri-o") (eq .ContainerRuntime "cri")}}Wants=crio.service{{else if eq .ContainerRuntime "containerd"}}Wants=containerd.service{{else}}Wants=docker.socket{{end}} +{{if or (eq .ContainerRuntime "cri-o") (eq .ContainerRuntime "crio")}}Wants=crio.service{{else if eq .ContainerRuntime "containerd"}}Wants=containerd.service{{else}}Wants=docker.socket{{end}} [Service] ExecStart= diff --git a/pkg/minikube/bootstrapper/bsutil/kubeadm.go b/pkg/minikube/bootstrapper/bsutil/kubeadm.go index 746584b7d672..a77aba5981f5 100644 --- a/pkg/minikube/bootstrapper/bsutil/kubeadm.go +++ b/pkg/minikube/bootstrapper/bsutil/kubeadm.go @@ -183,7 +183,7 @@ var KubeadmExtraConfigOpts = []string{ // InvokeKubeadm returns the invocation command for Kubeadm func InvokeKubeadm(version string) string { - return fmt.Sprintf("sudo env PATH=%s:$PATH kubeadm", binRoot(version)) + return fmt.Sprintf("sudo env PATH=\"%s:$PATH\" kubeadm", binRoot(version)) } // EtcdDataDir is where etcd data is stored. diff --git a/pkg/minikube/bootstrapper/certs.go b/pkg/minikube/bootstrapper/certs.go index 3f5cd9897687..ff843bea5bb9 100644 --- a/pkg/minikube/bootstrapper/certs.go +++ b/pkg/minikube/bootstrapper/certs.go @@ -18,6 +18,7 @@ package bootstrapper import ( "crypto/sha1" + "crypto/x509" "encoding/pem" "fmt" "io/ioutil" @@ -28,6 +29,7 @@ import ( "path/filepath" "sort" "strings" + "time" "github.com/otiai10/copy" "github.com/pkg/errors" @@ -42,21 +44,22 @@ import ( "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/kubeconfig" "k8s.io/minikube/pkg/minikube/localpath" + "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/vmpath" "k8s.io/minikube/pkg/util" ) // SetupCerts gets the generated credentials required to talk to the APIServer. -func SetupCerts(cmd command.Runner, k8s config.KubernetesConfig, n config.Node) error { - localPath := localpath.Profile(k8s.ClusterName) +func SetupCerts(cmd command.Runner, k8s config.ClusterConfig, n config.Node) error { + localPath := localpath.Profile(k8s.KubernetesConfig.ClusterName) klog.Infof("Setting up %s for IP: %s\n", localPath, n.IP) - ccs, err := generateSharedCACerts() + ccs, regen, err := generateSharedCACerts() if err != nil { return errors.Wrap(err, "shared CA certs") } - xfer, err := generateProfileCerts(k8s, n, ccs) + xfer, err := generateProfileCerts(k8s, n, ccs, regen) if err != nil { return errors.Wrap(err, "profile certs") } @@ -148,7 +151,8 @@ type CACerts struct { } // generateSharedCACerts generates CA certs shared among profiles, but only if missing -func generateSharedCACerts() (CACerts, error) { +func generateSharedCACerts() (CACerts, bool, error) { + regenProfileCerts := false globalPath := localpath.MiniPath() cc := CACerts{ caCert: localpath.CACert(), @@ -175,28 +179,30 @@ func generateSharedCACerts() (CACerts, error) { } for _, ca := range caCertSpecs { - if canRead(ca.certPath) && canRead(ca.keyPath) { + if isValid(ca.certPath, ca.keyPath) { klog.Infof("skipping %s CA generation: %s", ca.subject, ca.keyPath) continue } + regenProfileCerts = true klog.Infof("generating %s CA: %s", ca.subject, ca.keyPath) if err := util.GenerateCACert(ca.certPath, ca.keyPath, ca.subject); err != nil { - return cc, errors.Wrap(err, "generate ca cert") + return cc, false, errors.Wrap(err, "generate ca cert") } } - return cc, nil + return cc, regenProfileCerts, nil } // generateProfileCerts generates profile certs for a profile -func generateProfileCerts(k8s config.KubernetesConfig, n config.Node, ccs CACerts) ([]string, error) { +func generateProfileCerts(cfg config.ClusterConfig, n config.Node, ccs CACerts, regen bool) ([]string, error) { // Only generate these certs for the api server if !n.ControlPlane { return []string{}, nil } + k8s := cfg.KubernetesConfig profilePath := localpath.Profile(k8s.ClusterName) serviceIP, err := util.GetServiceClusterIP(k8s.ServiceCIDR) @@ -289,16 +295,23 @@ func generateProfileCerts(k8s config.KubernetesConfig, n config.Node, ccs CACert kp = kp + "." + spec.hash } - if canRead(cp) && canRead(kp) { + if !regen && isValid(cp, kp) { klog.Infof("skipping %s signed cert generation: %s", spec.subject, kp) continue } klog.Infof("generating %s signed cert: %s", spec.subject, kp) + if canRead(cp) { + os.Remove(cp) + } + if canRead(kp) { + os.Remove(kp) + } err := util.GenerateSignedCert( cp, kp, spec.subject, spec.ips, spec.alternateNames, spec.caCertPath, spec.caKeyPath, + cfg.CertExpiration, ) if err != nil { return xfer, errors.Wrapf(err, "generate signed cert for %q", spec.subject) @@ -478,3 +491,45 @@ func canRead(path string) bool { defer f.Close() return true } + +// isValid checks a cert/key path and makes sure it's still valid +// if a cert is expired or otherwise invalid, it will be deleted +func isValid(certPath, keyPath string) bool { + if !canRead(keyPath) { + return false + } + + certFile, err := os.ReadFile(certPath) + if err != nil { + klog.Infof("failed to read cert file %s: %v", certPath, err) + os.Remove(certPath) + os.Remove(keyPath) + return false + } + + certData, _ := pem.Decode(certFile) + if certData == nil { + klog.Infof("failed to decode cert file %s", certPath) + os.Remove(certPath) + os.Remove(keyPath) + return false + } + + cert, err := x509.ParseCertificate(certData.Bytes) + if err != nil { + klog.Infof("failed to parse cert file %s: %v\n", certPath, err) + os.Remove(certPath) + os.Remove(keyPath) + return false + } + + if cert.NotAfter.Before(time.Now()) { + out.WarningT("Certificate {{.certPath}} has expired. Generating a new one...", out.V{"certPath": filepath.Base(certPath)}) + klog.Infof("cert expired %s: expiration: %s, now: %s", certPath, cert.NotAfter, time.Now()) + os.Remove(certPath) + os.Remove(keyPath) + return false + } + + return true +} diff --git a/pkg/minikube/bootstrapper/certs_test.go b/pkg/minikube/bootstrapper/certs_test.go index 4956284dc8a5..b0c4e255d1ac 100644 --- a/pkg/minikube/bootstrapper/certs_test.go +++ b/pkg/minikube/bootstrapper/certs_test.go @@ -32,10 +32,13 @@ func TestSetupCerts(t *testing.T) { tempDir := tests.MakeTempDir() defer tests.RemoveTempDir(tempDir) - k8s := config.KubernetesConfig{ - APIServerName: constants.APIServerName, - DNSDomain: constants.ClusterDNSDomain, - ServiceCIDR: constants.DefaultServiceCIDR, + k8s := config.ClusterConfig{ + CertExpiration: constants.DefaultCertExpiration, + KubernetesConfig: config.KubernetesConfig{ + APIServerName: constants.APIServerName, + DNSDomain: constants.ClusterDNSDomain, + ServiceCIDR: constants.DefaultServiceCIDR, + }, } if err := os.Mkdir(filepath.Join(tempDir, "certs"), 0777); err != nil { diff --git a/pkg/minikube/bootstrapper/images/images.go b/pkg/minikube/bootstrapper/images/images.go index f967fa07c1d1..a7cb37a833e0 100644 --- a/pkg/minikube/bootstrapper/images/images.go +++ b/pkg/minikube/bootstrapper/images/images.go @@ -125,7 +125,7 @@ func dashboardFrontend(repo string) string { repo = "docker.io" } // See 'kubernetes-dashboard' in deploy/addons/dashboard/dashboard-dp.yaml - return path.Join(repo, "kubernetesui", "dashboard:v2.1.0") + return path.Join(repo, "kubernetesui", "dashboard:v2.3.1") } // dashboardMetrics returns the image used for the dashboard metrics scraper @@ -134,7 +134,7 @@ func dashboardMetrics(repo string) string { repo = "docker.io" } // See 'dashboard-metrics-scraper' in deploy/addons/dashboard/dashboard-dp.yaml - return path.Join(repo, "kubernetesui", "metrics-scraper:v1.0.4") + return path.Join(repo, "kubernetesui", "metrics-scraper:v1.0.7") } // KindNet returns the image used for kindnet diff --git a/pkg/minikube/bootstrapper/images/images_test.go b/pkg/minikube/bootstrapper/images/images_test.go index e2bed3f86fc8..b5553323680c 100644 --- a/pkg/minikube/bootstrapper/images/images_test.go +++ b/pkg/minikube/bootstrapper/images/images_test.go @@ -94,8 +94,8 @@ k8s.gcr.io/coredns/coredns:v1.8.4 func TestAuxiliary(t *testing.T) { want := []string{ "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "docker.io/kubernetesui/dashboard:v2.1.0", - "docker.io/kubernetesui/metrics-scraper:v1.0.4", + "docker.io/kubernetesui/dashboard:v2.3.1", + "docker.io/kubernetesui/metrics-scraper:v1.0.7", } got := auxiliary("") if diff := cmp.Diff(want, got); diff != "" { @@ -106,8 +106,8 @@ func TestAuxiliary(t *testing.T) { func TestAuxiliaryMirror(t *testing.T) { want := []string{ "test.mirror/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "test.mirror/kubernetesui/dashboard:v2.1.0", - "test.mirror/kubernetesui/metrics-scraper:v1.0.4", + "test.mirror/kubernetesui/dashboard:v2.3.1", + "test.mirror/kubernetesui/metrics-scraper:v1.0.7", } got := auxiliary("test.mirror") if diff := cmp.Diff(want, got); diff != "" { diff --git a/pkg/minikube/bootstrapper/images/kubeadm_test.go b/pkg/minikube/bootstrapper/images/kubeadm_test.go index 28123215d548..56ddda36daa5 100644 --- a/pkg/minikube/bootstrapper/images/kubeadm_test.go +++ b/pkg/minikube/bootstrapper/images/kubeadm_test.go @@ -43,20 +43,20 @@ func TestKubeadmImages(t *testing.T) { "k8s.gcr.io/etcd:3.4.3-0", "k8s.gcr.io/pause:3.1", "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "docker.io/kubernetesui/dashboard:v2.1.0", - "docker.io/kubernetesui/metrics-scraper:v1.0.4", + "docker.io/kubernetesui/dashboard:v2.3.1", + "docker.io/kubernetesui/metrics-scraper:v1.0.7", }}, - {"v1.16.1", "k8s.gcr.io", false, []string{ - "k8s.gcr.io/kube-proxy:v1.16.1", - "k8s.gcr.io/kube-scheduler:v1.16.1", - "k8s.gcr.io/kube-controller-manager:v1.16.1", - "k8s.gcr.io/kube-apiserver:v1.16.1", - "k8s.gcr.io/coredns:1.6.2", - "k8s.gcr.io/etcd:3.3.15-0", - "k8s.gcr.io/pause:3.1", - "k8s.gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "k8s.gcr.io/kubernetesui/dashboard:v2.1.0", - "k8s.gcr.io/kubernetesui/metrics-scraper:v1.0.4", + {"v1.16.1", "mirror.k8s.io", false, []string{ + "mirror.k8s.io/kube-proxy:v1.16.1", + "mirror.k8s.io/kube-scheduler:v1.16.1", + "mirror.k8s.io/kube-controller-manager:v1.16.1", + "mirror.k8s.io/kube-apiserver:v1.16.1", + "mirror.k8s.io/coredns:1.6.2", + "mirror.k8s.io/etcd:3.3.15-0", + "mirror.k8s.io/pause:3.1", + "mirror.k8s.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), + "mirror.k8s.io/kubernetesui/dashboard:v2.3.1", + "mirror.k8s.io/kubernetesui/metrics-scraper:v1.0.7", }}, {"v1.15.0", "", false, []string{ "k8s.gcr.io/kube-proxy:v1.15.0", @@ -67,8 +67,8 @@ func TestKubeadmImages(t *testing.T) { "k8s.gcr.io/etcd:3.3.10", "k8s.gcr.io/pause:3.1", "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "docker.io/kubernetesui/dashboard:v2.1.0", - "docker.io/kubernetesui/metrics-scraper:v1.0.4", + "docker.io/kubernetesui/dashboard:v2.3.1", + "docker.io/kubernetesui/metrics-scraper:v1.0.7", }}, {"v1.14.0", "", false, []string{ "k8s.gcr.io/kube-proxy:v1.14.0", @@ -79,8 +79,8 @@ func TestKubeadmImages(t *testing.T) { "k8s.gcr.io/etcd:3.3.10", "k8s.gcr.io/pause:3.1", "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "docker.io/kubernetesui/dashboard:v2.1.0", - "docker.io/kubernetesui/metrics-scraper:v1.0.4", + "docker.io/kubernetesui/dashboard:v2.3.1", + "docker.io/kubernetesui/metrics-scraper:v1.0.7", }}, {"v1.13.0", "", false, []string{ "k8s.gcr.io/kube-proxy:v1.13.0", @@ -91,8 +91,8 @@ func TestKubeadmImages(t *testing.T) { "k8s.gcr.io/etcd:3.2.24", "k8s.gcr.io/pause:3.1", "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "docker.io/kubernetesui/dashboard:v2.1.0", - "docker.io/kubernetesui/metrics-scraper:v1.0.4", + "docker.io/kubernetesui/dashboard:v2.3.1", + "docker.io/kubernetesui/metrics-scraper:v1.0.7", }}, {"v1.12.0", "", false, []string{ "k8s.gcr.io/kube-proxy:v1.12.0", @@ -103,8 +103,8 @@ func TestKubeadmImages(t *testing.T) { "k8s.gcr.io/etcd:3.2.24", "k8s.gcr.io/pause:3.1", "gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(), - "docker.io/kubernetesui/dashboard:v2.1.0", - "docker.io/kubernetesui/metrics-scraper:v1.0.4", + "docker.io/kubernetesui/dashboard:v2.3.1", + "docker.io/kubernetesui/metrics-scraper:v1.0.7", }}, {"v1.11.0", "", true, nil}, {"v1.10.0", "", true, nil}, diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index e2990381a166..1b38c0d15eae 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -847,7 +847,7 @@ func (k *Bootstrapper) DeleteCluster(k8s config.KubernetesConfig) error { } // SetupCerts sets up certificates within the cluster. -func (k *Bootstrapper) SetupCerts(k8s config.KubernetesConfig, n config.Node) error { +func (k *Bootstrapper) SetupCerts(k8s config.ClusterConfig, n config.Node) error { return bootstrapper.SetupCerts(k.c, k8s, n) } diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index e9a858a6c2c5..b338e207d957 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -83,7 +83,8 @@ type ClusterConfig struct { ListenAddress string // Only used by the docker and podman driver Network string // only used by docker driver MultiNodeRequested bool - ExtraDisks int // currently only implemented for hyperkit + ExtraDisks int // currently only implemented for hyperkit and kvm2 + CertExpiration time.Duration } // KubernetesConfig contains the parameters used to configure the VM Kubernetes. diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go index 162f9027fc92..2b5c44cd9378 100644 --- a/pkg/minikube/constants/constants.go +++ b/pkg/minikube/constants/constants.go @@ -34,10 +34,10 @@ var ( const ( // DefaultKubernetesVersion is the default Kubernetes version // dont update till #10545 is solved - DefaultKubernetesVersion = "v1.22.1" + DefaultKubernetesVersion = "v1.22.2" // 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.22.2-rc.0" + NewestKubernetesVersion = "v1.22.3-rc.0" // OldestKubernetesVersion is the oldest Kubernetes version to test against OldestKubernetesVersion = "v1.14.0" // DefaultClusterName is the default nane for the k8s cluster @@ -116,6 +116,9 @@ const ( TimeFormat = time.RFC1123 // MaxResources is the value that can be passed into the memory and cpus flags to specify to use maximum resources MaxResources = "max" + + // DefaultCertExpiration is the amount of time in the future a certificate will expire in by default, which is 3 years + DefaultCertExpiration = time.Hour * 24 * 365 * 3 ) var ( diff --git a/pkg/minikube/constants/constants_darwin.go b/pkg/minikube/constants/constants_darwin.go index a10fe2be02bc..f59146093586 100644 --- a/pkg/minikube/constants/constants_darwin.go +++ b/pkg/minikube/constants/constants_darwin.go @@ -1,4 +1,5 @@ -// +build darwin, !gendocs +//go:build (darwin && ignore) || !gendocs +// +build darwin,ignore !gendocs /* Copyright 2016 The Kubernetes Authors All rights reserved. diff --git a/pkg/minikube/constants/constants_freebsd.go b/pkg/minikube/constants/constants_freebsd.go index 77a47a765f9e..c767e4b21e66 100644 --- a/pkg/minikube/constants/constants_freebsd.go +++ b/pkg/minikube/constants/constants_freebsd.go @@ -1,4 +1,5 @@ -// +build linux, !gendocs +//go:build (linux && ignore) || !gendocs +// +build linux,ignore !gendocs /* Copyright 2016 The Kubernetes Authors All rights reserved. diff --git a/pkg/minikube/constants/constants_gendocs.go b/pkg/minikube/constants/constants_gendocs.go index fae58648eba8..faf04f5265ba 100644 --- a/pkg/minikube/constants/constants_gendocs.go +++ b/pkg/minikube/constants/constants_gendocs.go @@ -1,3 +1,4 @@ +//go:build gendocs // +build gendocs /* diff --git a/pkg/minikube/constants/constants_linux.go b/pkg/minikube/constants/constants_linux.go index 77a47a765f9e..c767e4b21e66 100644 --- a/pkg/minikube/constants/constants_linux.go +++ b/pkg/minikube/constants/constants_linux.go @@ -1,4 +1,5 @@ -// +build linux, !gendocs +//go:build (linux && ignore) || !gendocs +// +build linux,ignore !gendocs /* Copyright 2016 The Kubernetes Authors All rights reserved. diff --git a/pkg/minikube/constants/constants_windows.go b/pkg/minikube/constants/constants_windows.go index da58387eb91f..c17278dab527 100644 --- a/pkg/minikube/constants/constants_windows.go +++ b/pkg/minikube/constants/constants_windows.go @@ -1,4 +1,5 @@ -// +build windows, !gendocs +//go:build (windows && ignore) || !gendocs +// +build windows,ignore !gendocs /* Copyright 2016 The Kubernetes Authors All rights reserved. diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index aba79f668f8e..ca50cd9892ef 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -69,6 +69,12 @@ oom_score = 0 [cgroup] path = "" +[proxy_plugins] +# fuse-overlayfs is used for rootless +[proxy_plugins."fuse-overlayfs"] + type = "snapshot" + address = "/run/containerd-fuse-overlayfs.sock" + [plugins] [plugins.cgroups] no_prometheus = false @@ -80,6 +86,7 @@ oom_score = 0 stats_collect_period = 10 enable_tls_streaming = false max_container_log_line_size = 16384 + restrict_oom_score_adj = {{ .RestrictOOMScoreAdj }} [plugins."io.containerd.grpc.v1.cri"] [plugins."io.containerd.grpc.v1.cri".containerd] @@ -90,7 +97,7 @@ oom_score = 0 SystemdCgroup = {{ .SystemdCgroup }} [plugins.cri.containerd] - snapshotter = "overlayfs" + snapshotter = "{{ .Snapshotter }}" [plugins.cri.containerd.default_runtime] runtime_type = "io.containerd.runc.v2" [plugins.cri.containerd.untrusted_workload_runtime] @@ -193,23 +200,31 @@ func (r *Containerd) Available() error { } // generateContainerdConfig sets up /etc/containerd/config.toml -func generateContainerdConfig(cr CommandRunner, imageRepository string, kv semver.Version, forceSystemd bool, insecureRegistry []string) error { +func generateContainerdConfig(cr CommandRunner, imageRepository string, kv semver.Version, forceSystemd bool, insecureRegistry []string, inUserNamespace bool) error { cPath := containerdConfigFile t, err := template.New("containerd.config.toml").Parse(containerdConfigTemplate) if err != nil { return err } pauseImage := images.Pause(kv, imageRepository) + snapshotter := "overlayfs" + if inUserNamespace { + snapshotter = "fuse-overlayfs" + } opts := struct { PodInfraContainerImage string SystemdCgroup bool InsecureRegistry []string CNIConfDir string + RestrictOOMScoreAdj bool + Snapshotter string }{ PodInfraContainerImage: pauseImage, SystemdCgroup: forceSystemd, InsecureRegistry: insecureRegistry, CNIConfDir: cni.ConfDir, + RestrictOOMScoreAdj: inUserNamespace, + Snapshotter: snapshotter, } var b bytes.Buffer if err := t.Execute(&b, opts); err != nil { @@ -223,7 +238,7 @@ func generateContainerdConfig(cr CommandRunner, imageRepository string, kv semve } // Enable idempotently enables containerd on a host -func (r *Containerd) Enable(disOthers, forceSystemd bool) error { +func (r *Containerd) Enable(disOthers, forceSystemd, inUserNamespace bool) error { if disOthers { if err := disableOthers(r, r.Runner); err != nil { klog.Warningf("disableOthers: %v", err) @@ -232,13 +247,19 @@ func (r *Containerd) Enable(disOthers, forceSystemd bool) error { if err := populateCRIConfig(r.Runner, r.SocketPath()); err != nil { return err } - if err := generateContainerdConfig(r.Runner, r.ImageRepository, r.KubernetesVersion, forceSystemd, r.InsecureRegistry); err != nil { + if err := generateContainerdConfig(r.Runner, r.ImageRepository, r.KubernetesVersion, forceSystemd, r.InsecureRegistry, inUserNamespace); err != nil { return err } if err := enableIPForwarding(r.Runner); err != nil { return err } + if inUserNamespace { + if err := r.Init.EnableNow("containerd-fuse-overlayfs"); err != nil { + return err + } + } + // Otherwise, containerd will fail API requests with 'Unimplemented' return r.Init.Restart("containerd") } diff --git a/pkg/minikube/cruntime/crio.go b/pkg/minikube/cruntime/crio.go index 1bca1c5eeb95..258bdebb89cc 100644 --- a/pkg/minikube/cruntime/crio.go +++ b/pkg/minikube/cruntime/crio.go @@ -54,10 +54,9 @@ type CRIO struct { // generateCRIOConfig sets up /etc/crio/crio.conf func generateCRIOConfig(cr CommandRunner, imageRepository string, kv semver.Version) error { - cPath := crioConfigFile pauseImage := images.Pause(kv, imageRepository) - c := exec.Command("/bin/bash", "-c", fmt.Sprintf("sudo sed -e 's|^pause_image = .*$|pause_image = \"%s\"|' -i %s", pauseImage, cPath)) + c := exec.Command("/bin/bash", "-c", fmt.Sprintf("sudo sed -e 's|^pause_image = .*$|pause_image = \"%s\"|' -i %s", pauseImage, crioConfigFile)) if _, err := cr.RunCmd(c); err != nil { return errors.Wrap(err, "generateCRIOConfig.") } @@ -72,6 +71,16 @@ func generateCRIOConfig(cr CommandRunner, imageRepository string, kv semver.Vers return nil } +func (r *CRIO) forceSystemd() error { + // remove `cgroup_manager` since cri-o defaults to `systemd` if nothing set + c := exec.Command("/bin/bash", "-c", fmt.Sprintf("sudo sed -e 's|^cgroup_manager = .*$||' -i %s", crioConfigFile)) + if _, err := r.Runner.RunCmd(c); err != nil { + return errors.Wrap(err, "force systemd") + } + + return nil +} + // Name is a human readable name for CRIO func (r *CRIO) Name() string { return "CRI-O" @@ -139,7 +148,10 @@ func enableIPForwarding(cr CommandRunner) error { } // Enable idempotently enables CRIO on a host -func (r *CRIO) Enable(disOthers, _ bool) error { +func (r *CRIO) Enable(disOthers, forceSystemd, inUserNamespace bool) error { + if inUserNamespace { + return errors.New("inUserNamespace must not be true for cri-o (yet)") + } if disOthers { if err := disableOthers(r, r.Runner); err != nil { klog.Warningf("disableOthers: %v", err) @@ -154,6 +166,11 @@ func (r *CRIO) Enable(disOthers, _ bool) error { if err := enableIPForwarding(r.Runner); err != nil { return err } + if forceSystemd { + if err := r.forceSystemd(); err != nil { + return err + } + } return r.Init.Start("crio") } @@ -277,7 +294,7 @@ func (r *CRIO) CGroupDriver() (string, error) { if err != nil { return "", err } - cgroupManager := "cgroupfs" // default + cgroupManager := "systemd" // default for _, line := range strings.Split(rr.Stdout.String(), "\n") { if strings.HasPrefix(line, "cgroup_manager") { // cgroup_manager = "cgroupfs" diff --git a/pkg/minikube/cruntime/cruntime.go b/pkg/minikube/cruntime/cruntime.go index d736d809ce6b..4d42c65f8579 100644 --- a/pkg/minikube/cruntime/cruntime.go +++ b/pkg/minikube/cruntime/cruntime.go @@ -78,7 +78,7 @@ type Manager interface { // Version retrieves the current version of this runtime Version() (string, error) // Enable idempotently enables this runtime on a host - Enable(bool, bool) error + Enable(bool, bool, bool) error // Disable idempotently disables this runtime on a host Disable() error // Active returns whether or not a runtime is active on a host diff --git a/pkg/minikube/cruntime/cruntime_test.go b/pkg/minikube/cruntime/cruntime_test.go index 3a55059cc4fe..b87212b4a738 100644 --- a/pkg/minikube/cruntime/cruntime_test.go +++ b/pkg/minikube/cruntime/cruntime_test.go @@ -668,7 +668,7 @@ func TestEnable(t *testing.T) { if err != nil { t.Fatalf("New(%s): %v", tc.runtime, err) } - err = cr.Enable(true, false) + err = cr.Enable(true, false, false) if err != nil { t.Errorf("%s disable unexpected error: %v", tc.runtime, err) } diff --git a/pkg/minikube/cruntime/docker.go b/pkg/minikube/cruntime/docker.go index d3de483deee6..30772658122a 100644 --- a/pkg/minikube/cruntime/docker.go +++ b/pkg/minikube/cruntime/docker.go @@ -107,7 +107,10 @@ func (r *Docker) Active() bool { } // Enable idempotently enables Docker on a host -func (r *Docker) Enable(disOthers, forceSystemd bool) error { +func (r *Docker) Enable(disOthers, forceSystemd, inUserNamespace bool) error { + if inUserNamespace { + return errors.New("inUserNamespace must not be true for docker") + } containerdWasActive := r.Init.Active("containerd") if disOthers { diff --git a/pkg/minikube/detect/detect.go b/pkg/minikube/detect/detect.go index 7407f2020207..7e4fce08d35e 100644 --- a/pkg/minikube/detect/detect.go +++ b/pkg/minikube/detect/detect.go @@ -68,8 +68,8 @@ func IsOnGCE() bool { // IsCloudShell determines whether minikube is running inside CloudShell func IsCloudShell() bool { - _, e := os.LookupEnv("CLOUDSHELL_ENVIRONMENT") - return e + e := os.Getenv("CLOUD_SHELL") + return e == "true" } // IsAmd64M1Emulation determines whether amd64 minikube binary is running on M1 mac in emulation mode diff --git a/pkg/minikube/download/iso.go b/pkg/minikube/download/iso.go index ca6f42fc4c13..08f4042ba102 100644 --- a/pkg/minikube/download/iso.go +++ b/pkg/minikube/download/iso.go @@ -40,7 +40,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/12268" + isoBucket := "minikube/iso" return []string{ fmt.Sprintf("https://storage.googleapis.com/%s/minikube-%s.iso", isoBucket, v), fmt.Sprintf("https://github.com/kubernetes/minikube/releases/download/%s/minikube-%s.iso", v, v), diff --git a/pkg/minikube/download/preload.go b/pkg/minikube/download/preload.go index 428f595e98e9..2141bfd027d5 100644 --- a/pkg/minikube/download/preload.go +++ b/pkg/minikube/download/preload.go @@ -43,7 +43,7 @@ const ( // PreloadVersion is the current version of the preloaded tarball // // NOTE: You may need to bump this version up when upgrading auxiliary docker images - PreloadVersion = "v12" + PreloadVersion = "v13" // PreloadBucket is the name of the GCS bucket where preloaded volume tarballs exist PreloadBucket = "minikube-preloaded-volume-tarballs" ) diff --git a/pkg/minikube/driver/driver.go b/pkg/minikube/driver/driver.go index 6481ff632f78..3a76001a00a6 100644 --- a/pkg/minikube/driver/driver.go +++ b/pkg/minikube/driver/driver.go @@ -185,7 +185,15 @@ func NeedsPortForward(name string) bool { return true } // Docker for Desktop - return runtime.GOOS == "darwin" || runtime.GOOS == "windows" || detect.IsMicrosoftWSL() + if runtime.GOOS == "darwin" || runtime.GOOS == "windows" || detect.IsMicrosoftWSL() { + return true + } + + si, err := oci.CachedDaemonInfo(name) + if err != nil { + panic(err) + } + return si.Rootless } // HasResourceLimits returns true if driver can set resource limits such as memory size or CPU count. diff --git a/pkg/minikube/driver/driver_darwin.go b/pkg/minikube/driver/driver_darwin.go index b29222459ef5..9153e9e79d1b 100644 --- a/pkg/minikube/driver/driver_darwin.go +++ b/pkg/minikube/driver/driver_darwin.go @@ -27,6 +27,7 @@ var supportedDrivers = func() []string { // on darwin/arm64 only docker and ssh are supported yet return []string{ Docker, + Podman, SSH, } } @@ -37,6 +38,7 @@ var supportedDrivers = func() []string { HyperKit, VMware, Docker, + Podman, SSH, } }() diff --git a/pkg/minikube/driver/driver_windows.go b/pkg/minikube/driver/driver_windows.go index 1ebc9d5f1d62..8352366ae29b 100644 --- a/pkg/minikube/driver/driver_windows.go +++ b/pkg/minikube/driver/driver_windows.go @@ -33,6 +33,7 @@ var supportedDrivers = []string{ HyperV, VMware, Docker, + Podman, SSH, } diff --git a/pkg/minikube/image/image.go b/pkg/minikube/image/image.go index 2bbcf919cbf3..e376530d1029 100644 --- a/pkg/minikube/image/image.go +++ b/pkg/minikube/image/image.go @@ -155,11 +155,15 @@ func retrieveImage(ref name.Reference, imgName string) (v1.Image, string, error) } } if useRemote { + ref, canonicalName, err := fixRemoteImageName(ref, imgName) + if err != nil { + return nil, "", err + } img, err = retrieveRemote(ref, defaultPlatform) if err == nil { img, err = fixPlatform(ref, img, defaultPlatform) if err == nil { - return img, canonicalName(ref), nil + return img, canonicalName, nil } } } @@ -317,3 +321,23 @@ func normalizeTagName(image string) string { } return base + ":" + tag } + +func fixRemoteImageName(ref name.Reference, imgName string) (name.Reference, string, error) { + const aliyunMirror = "registry.cn-hangzhou.aliyuncs.com/google_containers/" + if strings.HasPrefix(imgName, aliyunMirror) { + // for aliyun registry must strip namespace from image name, e.g. + // registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 will not work + // registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0 does work + image := strings.TrimPrefix(imgName, aliyunMirror) + image = strings.TrimPrefix(image, "k8s-minikube/") + image = strings.TrimPrefix(image, "kubernetesui/") + image = strings.TrimPrefix(image, "coredns/") + image = strings.ReplaceAll(image, "coredns:v", "coredns:") + remoteRef, err := name.ParseReference(aliyunMirror+image, name.WeakValidation) + if err != nil { + return nil, "", err + } + return remoteRef, canonicalName(ref), nil + } + return ref, canonicalName(ref), nil +} diff --git a/pkg/minikube/machine/build_images.go b/pkg/minikube/machine/build_images.go index 3b7e4e82bbcf..637c15b5edd9 100644 --- a/pkg/minikube/machine/build_images.go +++ b/pkg/minikube/machine/build_images.go @@ -40,7 +40,7 @@ import ( var buildRoot = path.Join(vmpath.GuestPersistentDir, "build") // BuildImage builds image to all profiles -func BuildImage(path string, file string, tag string, push bool, env []string, opt []string, profiles []*config.Profile) error { +func BuildImage(path string, file string, tag string, push bool, env []string, opt []string, profiles []*config.Profile, allNodes bool, nodeName string) error { api, err := NewAPIClient() if err != nil { return errors.Wrap(err, "api") @@ -70,9 +70,23 @@ func BuildImage(path string, file string, tag string, push bool, env []string, o continue } + cp, err := config.PrimaryControlPlane(p.Config) + if err != nil { + return err + } + for _, n := range c.Nodes { m := config.MachineName(*c, n) + if !allNodes { + // build images on the primary control plane node by default + if nodeName == "" && n != cp { + continue + } else if nodeName != n.Name && nodeName != m { + continue + } + } + status, err := Status(api, m) if err != nil { klog.Warningf("error getting status for %s: %v", m, err) diff --git a/pkg/minikube/machine/cache_images.go b/pkg/minikube/machine/cache_images.go index 24928a925663..cedcc62db9a1 100644 --- a/pkg/minikube/machine/cache_images.go +++ b/pkg/minikube/machine/cache_images.go @@ -40,6 +40,7 @@ import ( "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/image" "k8s.io/minikube/pkg/minikube/localpath" + "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/vmpath" ) @@ -652,6 +653,7 @@ func RemoveImages(images []string, profile *config.Profile) error { if err != nil { failed = append(failed, m) klog.Warningf("Failed to remove images for profile %s %v", pName, err.Error()) + out.WarningT("Failed to remove images for profile {{.pName}} {{.error}}", out.V{"pName": pName, "error": err.Error()}) continue } succeeded = append(succeeded, m) diff --git a/pkg/minikube/node/cache.go b/pkg/minikube/node/cache.go index f68df47142a0..42a965412224 100644 --- a/pkg/minikube/node/cache.go +++ b/pkg/minikube/node/cache.go @@ -19,6 +19,7 @@ package node import ( "fmt" "os" + "path" "runtime" "strings" @@ -120,7 +121,7 @@ func beginDownloadKicBaseImage(g *errgroup.Group, cc *config.ClusterConfig, down g.Go(func() error { baseImg := cc.KicBaseImage if baseImg == kic.BaseImage && len(cc.KubernetesConfig.ImageRepository) != 0 { - baseImg = strings.Replace(baseImg, "gcr.io", cc.KubernetesConfig.ImageRepository, 1) + baseImg = updateKicImageRepo(baseImg, cc.KubernetesConfig.ImageRepository) cc.KicBaseImage = baseImg } var finalImg string @@ -255,3 +256,14 @@ func imagesInConfigFile() ([]string, error) { } return []string{}, nil } + +func updateKicImageRepo(imgName string, repo string) string { + image := strings.TrimPrefix(imgName, "gcr.io/") + if repo == "registry.cn-hangzhou.aliyuncs.com/google_containers" { + // for aliyun registry must strip namespace from image name, e.g. + // registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-minikube/kicbase:v0.0.25 will not work + // registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.25 does work + image = strings.TrimPrefix(image, "k8s-minikube/") + } + return path.Join(repo, image) +} diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go index 1361c67ebb06..5df290c478b4 100644 --- a/pkg/minikube/node/start.go +++ b/pkg/minikube/node/start.go @@ -156,7 +156,7 @@ func Start(starter Starter, apiServer bool) (*kubeconfig.Settings, error) { return nil, errors.Wrap(err, "Failed to get bootstrapper") } - if err = bs.SetupCerts(starter.Cfg.KubernetesConfig, *starter.Node); err != nil { + if err = bs.SetupCerts(*starter.Cfg, *starter.Node); err != nil { return nil, errors.Wrap(err, "setting up certs") } @@ -349,7 +349,8 @@ func configureRuntimes(runner cruntime.CommandRunner, cc config.ClusterConfig, k } } - err = cr.Enable(disableOthers, forceSystemd()) + inUserNamespace := strings.Contains(cc.KubernetesConfig.FeatureGates, "KubeletInUserNamespace=true") + err = cr.Enable(disableOthers, forceSystemd(), inUserNamespace) if err != nil { exit.Error(reason.RuntimeEnable, "Failed to enable container runtime", err) } @@ -444,7 +445,7 @@ func setupKubeAdm(mAPI libmachine.API, cfg config.ClusterConfig, n config.Node, exit.Error(reason.KubernetesInstallFailed, "Failed to update cluster", err) } - if err := bs.SetupCerts(cfg.KubernetesConfig, n); err != nil { + if err := bs.SetupCerts(cfg, n); err != nil { exit.Error(reason.GuestCert, "Failed to setup certs", err) } diff --git a/pkg/minikube/out/out.go b/pkg/minikube/out/out.go index 4706f9a7063a..01dd5318de26 100644 --- a/pkg/minikube/out/out.go +++ b/pkg/minikube/out/out.go @@ -33,9 +33,9 @@ import ( "github.com/Delta456/box-cli-maker/v2" "github.com/briandowns/spinner" "github.com/mattn/go-isatty" + "github.com/spf13/pflag" "k8s.io/klog/v2" - "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/out/register" "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/translate" @@ -381,14 +381,6 @@ func displayError(msg string, err error) { } func latestLogFilePath() (string, error) { - if len(os.Args) < 2 { - return "", fmt.Errorf("unable to detect command") - } - cmd := os.Args[1] - if cmd == "start" { - return localpath.LastStartLog(), nil - } - tmpdir := os.TempDir() files, err := ioutil.ReadDir(tmpdir) if err != nil { @@ -411,16 +403,32 @@ func latestLogFilePath() (string, error) { return fullPath, nil } +func command() (string, error) { + if len(pflag.Args()) < 1 { + return "", fmt.Errorf("unable to detect command") + } + + return pflag.Arg(0), nil +} + func displayGitHubIssueMessage() { - logPath, err := latestLogFilePath() + cmd, err := command() if err != nil { - klog.Warningf("failed to diplay GitHub issue message: %v", err) + klog.Warningf("failed to get command: %v", err) } msg := Sprintf(style.Sad, "If the above advice does not help, please let us know:") msg += Sprintf(style.URL, "https://github.com/kubernetes/minikube/issues/new/choose\n") - msg += Sprintf(style.Empty, "Please attach the following file to the GitHub issue:") - msg += Sprintf(style.Empty, "- {{.logPath}}", V{"logPath": logPath}) + msg += Sprintf(style.Empty, "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.") + + if cmd != "start" { + logPath, err := latestLogFilePath() + if err != nil { + klog.Warningf("failed to get latest log file path: %v", err) + } + msg += Sprintf(style.Empty, "Please also attach the following file to the GitHub issue:") + msg += Sprintf(style.Empty, "- {{.logPath}}", V{"logPath": logPath}) + } BoxedErr(msg) } diff --git a/pkg/minikube/out/out_test.go b/pkg/minikube/out/out_test.go index ea0f729c8acd..acaf13ac409c 100644 --- a/pkg/minikube/out/out_test.go +++ b/pkg/minikube/out/out_test.go @@ -21,11 +21,12 @@ import ( "os" "path/filepath" "strconv" + "strings" "testing" "github.com/Delta456/box-cli-maker/v2" + "github.com/spf13/pflag" - "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/tests" "k8s.io/minikube/pkg/minikube/translate" @@ -130,37 +131,96 @@ func createLogFile() (string, error) { return f.Name(), nil } -func TestLatestLogPath(t *testing.T) { - filename, err := createLogFile() +func TestLatestLogFilePath(t *testing.T) { + want, err := createLogFile() if err != nil { t.Fatal(err) } - defer os.Remove(filename) + defer os.Remove(want) + got, err := latestLogFilePath() + if err != nil { + t.Errorf("latestLogFilePath() failed with error = %v", err) + } + if got != want { + t.Errorf("latestLogFilePath() = %q; wanted %q", got, want) + } +} + +func TestCommand(t *testing.T) { testCases := []struct { - args []string - want string + args []string + want string + shouldError bool }{ { []string{"minikube", "start"}, - localpath.LastStartLog(), + "start", + false, + }, + { + []string{"minikube", "--profile", "profile1", "start"}, + "start", + false, }, { - []string{"minikube", "status"}, - filename, + []string{"minikube"}, + "", + true, }, } + pflag.String("profile", "", "") + for _, tt := range testCases { oldArgs := os.Args defer func() { os.Args = oldArgs }() os.Args = tt.args - got, err := latestLogFilePath() - if err != nil { - t.Fatalf("os.Args = %s; latestLogFilePath() failed with error = %v", tt.args, err) + pflag.Parse() + got, err := command() + if err == nil && tt.shouldError { + t.Errorf("os.Args = %s; command() did not fail but was expected to", tt.args) + } + if err != nil && !tt.shouldError { + t.Errorf("os.Args = %s; command() failed with error = %v", tt.args, err) } if got != tt.want { - t.Errorf("os.Args = %s; latestLogFilePath() = %q; wanted %q", tt.args, got, tt.want) + t.Errorf("os.Args = %s; command() = %q; wanted %q", tt.args, got, tt.want) + } + } +} + +func TestDisplayGitHubIssueMessage(t *testing.T) { + testCases := []struct { + args []string + shouldContainMessage bool + }{ + { + []string{"minikube", "start"}, + false, + }, + { + []string{"minikube", "delete"}, + true, + }, + } + + msg := "Please also attach the following file to the GitHub issue:" + + for _, tt := range testCases { + oldArgs := os.Args + defer func() { os.Args = oldArgs }() + os.Args = tt.args + pflag.Parse() + f := tests.NewFakeFile() + SetErrFile(f) + displayGitHubIssueMessage() + output := f.String() + if strings.Contains(output, msg) && !tt.shouldContainMessage { + t.Errorf("os.Args = %s; displayGitHubIssueMessage() output = %q; did not expect it to contain = %q", tt.args, output, msg) + } + if !strings.Contains(output, msg) && tt.shouldContainMessage { + t.Errorf("os.Args = %s; displayGitHubIssueMessage() output = %q; expected to contain = %q", tt.args, output, msg) } } } diff --git a/pkg/minikube/perf/logs_test.go b/pkg/minikube/perf/logs_test.go index 65b2eae52fd9..31a8d8c9022a 100644 --- a/pkg/minikube/perf/logs_test.go +++ b/pkg/minikube/perf/logs_test.go @@ -1,3 +1,4 @@ +//go:build linux || darwin // +build linux darwin /* diff --git a/pkg/minikube/perf/start.go b/pkg/minikube/perf/start.go index 4678726a546a..508fa80d07d3 100644 --- a/pkg/minikube/perf/start.go +++ b/pkg/minikube/perf/start.go @@ -74,7 +74,7 @@ func collectResults(ctx context.Context, binaries []*Binary, driver string, runt return nil, errors.Wrapf(err, "timing run %d with %s", run, binary.Name()) } rm.addResult(binary, "start", *r) - if !skipIngress(driver, runtime) { + if !skipIngress(driver) { r, err = timeEnableIngress(ctx, binary) if err != nil { return nil, errors.Wrapf(err, "timing run %d with %s", run, binary.Name()) @@ -136,8 +136,8 @@ func timeEnableIngress(ctx context.Context, binary *Binary) (*result, error) { } // Ingress doesn't currently work on MacOS with the docker driver -func skipIngress(driver string, cruntime string) bool { - return (runtime.GOOS == "darwin" && driver == "docker") || cruntime == "containerd" +func skipIngress(driver string) bool { + return (runtime.GOOS == "darwin" && driver == "docker") } // We only want to run the tests if: diff --git a/pkg/minikube/registry/drvs/docker/docker.go b/pkg/minikube/registry/drvs/docker/docker.go index a7aaea2ac89f..cc6bb558b8e4 100644 --- a/pkg/minikube/registry/drvs/docker/docker.go +++ b/pkg/minikube/registry/drvs/docker/docker.go @@ -146,14 +146,7 @@ func status() (retState registry.State) { return suggestFix("info", -1, serr, fmt.Errorf("docker info error: %s", serr)) } - if si.Rootless { - return registry.State{ - Reason: "PROVIDER_DOCKER_ROOTLESS", - Error: errors.New("rootless Docker not supported yet"), - Installed: true, - Healthy: false, - Doc: "https://github.com/kubernetes/minikube/issues/10836"} - } + // TODO: validate cgroup v2 delegation when si.Rootless is true return checkNeedsImprovement() } diff --git a/pkg/minikube/registry/drvs/hyperkit/hyperkit.go b/pkg/minikube/registry/drvs/hyperkit/hyperkit.go index 2f5fea101b25..3ac958c72e80 100644 --- a/pkg/minikube/registry/drvs/hyperkit/hyperkit.go +++ b/pkg/minikube/registry/drvs/hyperkit/hyperkit.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/minikube/registry/drvs/hyperkit/hyperkit_test.go b/pkg/minikube/registry/drvs/hyperkit/hyperkit_test.go index 4e89276f9462..da59599c7b1a 100644 --- a/pkg/minikube/registry/drvs/hyperkit/hyperkit_test.go +++ b/pkg/minikube/registry/drvs/hyperkit/hyperkit_test.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/minikube/registry/drvs/hyperv/hyperv.go b/pkg/minikube/registry/drvs/hyperv/hyperv.go index f8ce19f98fbf..f711c6c92bb5 100644 --- a/pkg/minikube/registry/drvs/hyperv/hyperv.go +++ b/pkg/minikube/registry/drvs/hyperv/hyperv.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows /* diff --git a/pkg/minikube/registry/drvs/hyperv/powershell.go b/pkg/minikube/registry/drvs/hyperv/powershell.go index e54e1686dd4e..10809aabb6ca 100644 --- a/pkg/minikube/registry/drvs/hyperv/powershell.go +++ b/pkg/minikube/registry/drvs/hyperv/powershell.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows /* diff --git a/pkg/minikube/registry/drvs/hyperv/vswitch.go b/pkg/minikube/registry/drvs/hyperv/vswitch.go index 012b169025c6..726a4c1a4d10 100644 --- a/pkg/minikube/registry/drvs/hyperv/vswitch.go +++ b/pkg/minikube/registry/drvs/hyperv/vswitch.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows /* diff --git a/pkg/minikube/registry/drvs/kvm2/kvm2.go b/pkg/minikube/registry/drvs/kvm2/kvm2.go index 619873b4d02a..7e071616f697 100644 --- a/pkg/minikube/registry/drvs/kvm2/kvm2.go +++ b/pkg/minikube/registry/drvs/kvm2/kvm2.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* @@ -70,6 +71,7 @@ type kvmDriver struct { Hidden bool ConnectionURI string NUMANodeCount int + ExtraDisks int } func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) { @@ -92,6 +94,7 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) { Hidden: cc.KVMHidden, ConnectionURI: cc.KVMQemuURI, NUMANodeCount: cc.KVMNUMACount, + ExtraDisks: cc.ExtraDisks, }, nil } diff --git a/pkg/minikube/registry/drvs/none/none.go b/pkg/minikube/registry/drvs/none/none.go index e2fcf11b0691..4bef620f089b 100644 --- a/pkg/minikube/registry/drvs/none/none.go +++ b/pkg/minikube/registry/drvs/none/none.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux /* diff --git a/pkg/minikube/registry/drvs/parallels/parallels.go b/pkg/minikube/registry/drvs/parallels/parallels.go index a9b22ae36ab1..728da968b665 100644 --- a/pkg/minikube/registry/drvs/parallels/parallels.go +++ b/pkg/minikube/registry/drvs/parallels/parallels.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/minikube/registry/drvs/vmwarefusion/vmwarefusion.go b/pkg/minikube/registry/drvs/vmwarefusion/vmwarefusion.go index d2197f077845..7c7e6304d528 100644 --- a/pkg/minikube/registry/drvs/vmwarefusion/vmwarefusion.go +++ b/pkg/minikube/registry/drvs/vmwarefusion/vmwarefusion.go @@ -1,3 +1,4 @@ +//go:build darwin // +build darwin /* diff --git a/pkg/minikube/schedule/daemonize_unix.go b/pkg/minikube/schedule/daemonize_unix.go index 96777a178b54..7c38e80ddb3a 100644 --- a/pkg/minikube/schedule/daemonize_unix.go +++ b/pkg/minikube/schedule/daemonize_unix.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows /* diff --git a/pkg/minikube/schedule/daemonize_windows.go b/pkg/minikube/schedule/daemonize_windows.go index d4660f6897dc..4b21455ba9f8 100644 --- a/pkg/minikube/schedule/daemonize_windows.go +++ b/pkg/minikube/schedule/daemonize_windows.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows /* diff --git a/pkg/minikube/tunnel/route_darwin_test.go b/pkg/minikube/tunnel/route_darwin_test.go index 5d6c421b444c..b2cc6370d03e 100644 --- a/pkg/minikube/tunnel/route_darwin_test.go +++ b/pkg/minikube/tunnel/route_darwin_test.go @@ -1,3 +1,4 @@ +//go:build darwin && integration // +build darwin,integration /* diff --git a/pkg/minikube/tunnel/route_linux_test.go b/pkg/minikube/tunnel/route_linux_test.go index 52f549fa8a8b..549aef04a9e9 100644 --- a/pkg/minikube/tunnel/route_linux_test.go +++ b/pkg/minikube/tunnel/route_linux_test.go @@ -1,3 +1,4 @@ +//go:build linux && integration // +build linux,integration /* diff --git a/pkg/minikube/tunnel/route_windows_test.go b/pkg/minikube/tunnel/route_windows_test.go index b95d96cd8482..10e99d5a71f8 100644 --- a/pkg/minikube/tunnel/route_windows_test.go +++ b/pkg/minikube/tunnel/route_windows_test.go @@ -1,3 +1,4 @@ +//go:build windows && integration // +build windows,integration /* diff --git a/pkg/util/crypto.go b/pkg/util/crypto.go index 7fc6a0137361..5222957390cf 100644 --- a/pkg/util/crypto.go +++ b/pkg/util/crypto.go @@ -65,7 +65,7 @@ func GenerateCACert(certPath, keyPath string, name string) error { // Any parent directories of the certPath or keyPath will be created as needed with file mode 0755. // GenerateSignedCert generates a signed certificate and key -func GenerateSignedCert(certPath, keyPath, cn string, ips []net.IP, alternateDNS []string, signerCertPath, signerKeyPath string) error { +func GenerateSignedCert(certPath, keyPath, cn string, ips []net.IP, alternateDNS []string, signerCertPath, signerKeyPath string, expiration time.Duration) error { klog.Infof("Generating cert %s with IP's: %s", certPath, ips) signerCertBytes, err := ioutil.ReadFile(signerCertPath) if err != nil { @@ -99,7 +99,7 @@ func GenerateSignedCert(certPath, keyPath, cn string, ips []net.IP, alternateDNS Organization: []string{"system:masters"}, }, NotBefore: time.Now().Add(time.Hour * -24), - NotAfter: time.Now().Add(time.Hour * 24 * 365), + NotAfter: time.Now().Add(expiration), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, diff --git a/pkg/util/crypto_test.go b/pkg/util/crypto_test.go index adb9fdae043a..b6db86436808 100644 --- a/pkg/util/crypto_test.go +++ b/pkg/util/crypto_test.go @@ -140,7 +140,7 @@ func TestGenerateSignedCert(t *testing.T) { t.Run(test.description, func(t *testing.T) { err := GenerateSignedCert( certPath, keyPath, "minikube", ips, alternateDNS, test.signerCertPath, - test.signerKeyPath, + test.signerKeyPath, constants.DefaultCertExpiration, ) if err != nil && !test.err { t.Errorf("GenerateSignedCert() error = %v", err) diff --git a/site/content/en/docs/_index.md b/site/content/en/docs/_index.md index 7930785c06b2..d67c8933ce89 100644 --- a/site/content/en/docs/_index.md +++ b/site/content/en/docs/_index.md @@ -11,7 +11,7 @@ minikube quickly sets up a local Kubernetes cluster on macOS, Linux, and Windows ![Screenshot](/images/screenshot.png) -🎉 Latest Release: v1.22.0 - Jul 07, 2021 ([changelog](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md)) +🎉 Latest Release: v1.23.2 - Sep 21, 2021 ([changelog](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md)) ## Highlights diff --git a/site/content/en/docs/benchmarks/timeToK8s/v1.23.0.md b/site/content/en/docs/benchmarks/timeToK8s/v1.23.0.md new file mode 100644 index 000000000000..069af2f44920 --- /dev/null +++ b/site/content/en/docs/benchmarks/timeToK8s/v1.23.0.md @@ -0,0 +1,7 @@ +--- +title: "v1.23.0 Benchmark" +linkTitle: "v1.23.0 Benchmark" +weight: -20210903 +--- + +![time-to-k8s](/images/benchmarks/timeToK8s/v1.23.0.png) diff --git a/site/content/en/docs/benchmarks/timeToK8s/v1.23.1.md b/site/content/en/docs/benchmarks/timeToK8s/v1.23.1.md new file mode 100644 index 000000000000..987bc09fdd67 --- /dev/null +++ b/site/content/en/docs/benchmarks/timeToK8s/v1.23.1.md @@ -0,0 +1,7 @@ +--- +title: "v1.23.1 Benchmark" +linkTitle: "v1.23.1 Benchmark" +weight: -20210917 +--- + +![time-to-k8s](/images/benchmarks/timeToK8s/v1.23.1.png) diff --git a/site/content/en/docs/benchmarks/timeToK8s/v1.23.2.md b/site/content/en/docs/benchmarks/timeToK8s/v1.23.2.md new file mode 100644 index 000000000000..efc20eda4755 --- /dev/null +++ b/site/content/en/docs/benchmarks/timeToK8s/v1.23.2.md @@ -0,0 +1,7 @@ +--- +title: "v1.23.2 Benchmark" +linkTitle: "v1.23.2 Benchmark" +weight: -20210922 +--- + +![time-to-k8s](/images/benchmarks/timeToK8s/v1.23.2.png) diff --git a/site/content/en/docs/commands/image.md b/site/content/en/docs/commands/image.md index 09df6a14c43b..ccee3713f918 100644 --- a/site/content/en/docs/commands/image.md +++ b/site/content/en/docs/commands/image.md @@ -56,9 +56,11 @@ minikube image build . ### Options ``` + --all Build image on all nodes. --build-env stringArray Environment variables to pass to the build. (format: key=value) --build-opt stringArray Specify arbitrary flags to pass to the build. (format: key=value) -f, --file string Path to the Dockerfile to use (optional) + -n, --node string The node to build on. Defaults to the primary control plane. --push Push the new image (requires tag) -t, --tag string Tag to apply to the new image (optional) ``` diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md index 704501ff245e..bcccd4091e4b 100644 --- a/site/content/en/docs/commands/start.md +++ b/site/content/en/docs/commands/start.md @@ -26,8 +26,9 @@ 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.25-1628619379-12032@sha256:937faef407987cbd8b3cb0a90c6c5dfd664817d5377be0b77a4ecbf0f9f9c1b6") + --base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase:v0.0.27@sha256:89b4738ee74ba28684676e176752277f0db46f57d27f0e08c3feec89311e22de") --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) --cni string CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto) --container-runtime string The container runtime to be used (docker, cri-o, containerd). (default "docker") --cpus string Number of CPUs allocated to Kubernetes. Use "max" to use the maximum number of CPUs. (default "2") @@ -48,7 +49,7 @@ minikube start [flags] The key should be '.' separated, and the first part before the dot is the component to apply the configuration to. Valid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler Valid kubeadm parameters: ignore-preflight-errors, dry-run, kubeconfig, kubeconfig-dir, node-name, cri-socket, experimental-upload-certs, certificate-key, rootfs, skip-phases, pod-network-cidr - --extra-disks int Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver) + --extra-disks int Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers) --feature-gates string A set of key=value pairs that describe feature gates for alpha/experimental features. --force Force minikube to perform possibly dangerous operations --force-systemd If set, force the container runtime to use systemd as cgroup manager. Defaults to false. @@ -65,9 +66,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/12268/minikube-v1.22.0-1628974786-12268.iso,https://github.com/kubernetes/minikube/releases/download/v1.22.0-1628974786-12268/minikube-v1.22.0-1628974786-12268.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.22.0-1628974786-12268.iso]) + --iso-url strings Locations to fetch the minikube ISO from. (default [https://storage.googleapis.com/minikube/iso/minikube-v1.23.1.iso,https://github.com/kubernetes/minikube/releases/download/v1.23.1/minikube-v1.23.1.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.23.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.22.1, 'latest' for v1.22.2-rc.0). Defaults to 'stable'. + --kubernetes-version string The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.22.2, 'latest' for v1.22.3-rc.0). 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") diff --git a/site/content/en/docs/contrib/leaderboard/v1.22.0.html b/site/content/en/docs/contrib/leaderboard/v1.22.0.html index 4055e04a32d9..4a89ff27b2a3 100644 --- a/site/content/en/docs/contrib/leaderboard/v1.22.0.html +++ b/site/content/en/docs/contrib/leaderboard/v1.22.0.html @@ -6,6 +6,7 @@ kubernetes/minikube - Leaderboard + @@ -188,9 +189,9 @@

Most Demanding

["sharifelgamal", 16, "16"], ["ilya-zuyev", 8, "8"], ["spowelljr", 7, "7"], - ["prezha", 0, "0"], - ["tharun208", 0, "0"], ["afbjorklund", 0, "0"], + ["tharun208", 0, "0"], + ["prezha", 0, "0"], ]); @@ -236,11 +237,11 @@

Most Active

["jeffmaury", 4, "4"], ["afbjorklund", 3, "3"], ["dinever", 2, "2"], - ["MaximeKjaer", 1, "1"], - ["RA489", 1, "1"], - ["sharmarajdaksh", 1, "1"], ["vishjain", 1, "1"], - ["daehyeok", 1, "1"], + ["zhangdb-git", 1, "1"], + ["sharmarajdaksh", 1, "1"], + ["felipecrescencio", 1, "1"], + ["JacekDuszenko", 1, "1"], ["dongjoon-hyun", 1, "1"], ]); @@ -288,7 +289,7 @@

Big Movers

["MaximeKjaer", 30, "30"], ["JacekDuszenko", 6, "6"], ["felipecrescencio", 4, "4"], - ["RA489", 2, "2"], + ["zhangdb-git", 2, "2"], ]); @@ -372,21 +373,21 @@

Most Active

function drawcomments() { var data = new google.visualization.arrayToDataTable([ [{label:'',type:'string'},{label: '# of comments', type: 'number'}, { role: 'annotation' }], - ["afbjorklund", 36, "36"], - ["sharifelgamal", 22, "22"], - ["medyagh", 22, "22"], - ["spowelljr", 7, "7"], - ["vishjain", 6, "6"], - ["andriyDev", 5, "5"], + ["afbjorklund", 30, "30"], + ["sharifelgamal", 17, "17"], + ["medyagh", 14, "14"], + ["vishjain", 5, "5"], ["JacekDuszenko", 5, "5"], - ["mahalrs", 4, "4"], - ["RA489", 4, "4"], ["mathieuruellan", 4, "4"], - ["rajdevworks", 3, "3"], - ["secmobi", 2, "2"], - ["andrewmiron", 2, "2"], + ["spowelljr", 4, "4"], + ["mahalrs", 3, "3"], ["totore86", 2, "2"], + ["J-Curragh", 2, "2"], ["ilya-zuyev", 2, "2"], + ["andriyDev", 2, "2"], + ["andrewmiron", 2, "2"], + ["secmobi", 2, "2"], + ["dinever", 1, "1"], ]); @@ -419,21 +420,21 @@

Most Helpful

function drawcommentWords() { var data = new google.visualization.arrayToDataTable([ [{label:'',type:'string'},{label: '# of words (excludes authored)', type: 'number'}, { role: 'annotation' }], - ["afbjorklund", 2050, "2050"], - ["medyagh", 897, "897"], - ["spowelljr", 444, "444"], + ["afbjorklund", 1519, "1519"], + ["medyagh", 676, "676"], ["alexio777", 357, "357"], - ["prezha", 314, "314"], + ["spowelljr", 271, "271"], ["annopohjala", 249, "249"], - ["sharifelgamal", 245, "245"], ["andrewmiron", 225, "225"], ["secmobi", 221, "221"], ["J-Curragh", 207, "207"], - ["vmorris", 174, "174"], + ["sharifelgamal", 186, "186"], ["Srikrishnabh", 139, "139"], ["totore86", 127, "127"], ["cscotti", 115, "115"], ["gongpengjun", 106, "106"], + ["vmorris", 101, "101"], + ["mathieuruellan", 94, "94"], ]); diff --git a/site/content/en/docs/contrib/leaderboard/v1.23.0.html b/site/content/en/docs/contrib/leaderboard/v1.23.0.html new file mode 100644 index 000000000000..a1c5c98a8bbb --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.23.0.html @@ -0,0 +1,512 @@ +--- +title: "v1.23.0 - 2021-09-03" +linkTitle: "v1.23.0 - 2021-09-03" +weight: -99 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-07-07 — 2021-09-03
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.23.2.html b/site/content/en/docs/contrib/leaderboard/v1.23.2.html new file mode 100644 index 000000000000..7950883300fa --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.23.2.html @@ -0,0 +1,434 @@ +--- +title: "v1.23.2 - 2021-09-21" +linkTitle: "v1.23.2 - 2021-09-21" +weight: -101 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-09-17 — 2021-09-21
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md index 119eef71edac..b33a96a8eced 100644 --- a/site/content/en/docs/contrib/tests.en.md +++ b/site/content/en/docs/contrib/tests.en.md @@ -42,6 +42,11 @@ tests the GCP Auth addon with either phony or real credentials and makes sure th ## TestCertOptions makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters +## TestCertExpiration +makes sure minikube can start after its profile certs have expired. +It does this by configuring minikube certs to expire after 3 minutes, then waiting 3 minutes, then starting again. +It also makes sure minikube prints a cert expiration warning to the user. + ## TestDockerFlags makes sure the --docker-env and --docker-opt parameters are respected @@ -54,6 +59,9 @@ makes sure the --force-systemd flag worked with the docker container runtime #### validateContainerdSystemd makes sure the --force-systemd flag worked with the containerd container runtime +#### validateCrioSystemd +makes sure the --force-systemd flag worked with the cri-o container runtime + ## TestForceSystemdEnv makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the --force-systemd flag @@ -75,26 +83,8 @@ are functionality tests which can safely share a profile in parallel #### validateNodeLabels checks if minikube cluster is created with correct kubernetes's node label -#### validateLoadImage -makes sure that `minikube image load` works as expected - -#### validateLoadImageFromFile -makes sure that `minikube image load` works from a local file - -#### validateRemoveImage -makes sures that `minikube image rm` works as expected - -#### validateSaveImage -makes sure that `minikube image save` works as expected - -#### validateSaveImageToFile -makes sure that `minikube image save` works to a local file - -#### validateBuildImage -makes sures that `minikube image build` works as expected - -#### validateListImages -makes sures that `minikube image ls` works as expected +#### validateImageCommands +runs tests on all the `minikube image` commands, ex. `minikube image load`, `minikube image list`, etc. #### validateDockerEnv check functionality of minikube after evaluating docker-env @@ -338,10 +328,6 @@ makes sure no left over left after deleting a profile such as containers or volu #### validateStatus makes sure paused clusters show up in minikube status correctly -## TestDebPackageInstall -TestPackageInstall tests installation of .deb packages with minikube itself and with kvm2 driver -on various debian/ubuntu docker images - ## TestPreload verifies the preload tarballs get pulled in properly by minikube diff --git a/site/content/en/docs/drivers/docker.md b/site/content/en/docs/drivers/docker.md index 1300cd086715..4dad78879b96 100644 --- a/site/content/en/docs/drivers/docker.md +++ b/site/content/en/docs/drivers/docker.md @@ -21,7 +21,6 @@ The Docker driver allows you to install Kubernetes into an existing Docker insta - The following Docker runtime security options are currently *unsupported and will not work* with the Docker driver (see [#9607](https://github.com/kubernetes/minikube/issues/9607)): - [userns-remap](https://docs.docker.com/engine/security/userns-remap/) - - [rootless](https://docs.docker.com/engine/security/rootless/) - On macOS, containers might get hung and require a restart of Docker for Desktop. See [docker/for-mac#1835](https://github.com/docker/for-mac/issues/1835) diff --git a/site/content/en/docs/drivers/includes/docker_usage.inc b/site/content/en/docs/drivers/includes/docker_usage.inc index 8b1fd6c694ad..63d50ca323cc 100644 --- a/site/content/en/docs/drivers/includes/docker_usage.inc +++ b/site/content/en/docs/drivers/includes/docker_usage.inc @@ -16,3 +16,24 @@ To make docker the default driver: minikube config set driver docker ``` +## Rootless Docker +### Requirements +- Docker 20.10 or higher, see https://rootlesscontaine.rs/getting-started/docker/ +- Cgroup v2 delegation, see https://rootlesscontaine.rs/getting-started/common/cgroup2/ + +### Usage + +Start a cluster using the rootless docker driver: + +```shell +dockerd-rootless-setuptool.sh install -f +docker context use rootless + +minikube start --driver=docker --container-runtime=containerd +``` + +The `--container-runtime` flag must be currently set to "containerd". + +The restrictions of rootless `kind` apply to minikube with rootless docker as well. + +See https://kind.sigs.k8s.io/docs/user/rootless/ . diff --git a/site/content/en/docs/drivers/podman.md b/site/content/en/docs/drivers/podman.md index be670dfc57ed..96f7f27ec459 100644 --- a/site/content/en/docs/drivers/podman.md +++ b/site/content/en/docs/drivers/podman.md @@ -11,14 +11,13 @@ The podman driver is an alternative container runtime to the [Docker]({{< ref "/ ## Requirements -- Linux operating system - Install [podman](https://podman.io/getting-started/installation.html) {{% readfile file="/docs/drivers/includes/podman_usage.inc" %}} ## Known Issues -- Podman requirements passwordless running of sudo. If you run into an error about sudo, do the following: +- On Linux, Podman requires passwordless running of sudo. If you run into an error about sudo, do the following: ```shell $ sudo visudo @@ -35,6 +34,15 @@ Be sure this text is *after* `#includedir /etc/sudoers.d`. To confirm it worked, sudo -k -n podman version ``` +- On all other operating systems, make sure to create and start the virtual machine that is needed for Podman. + +```shell +podman machine init --cpus 2 --memory 2048 --disk-size 20 +podman machine start +podman system connection default podman-machine-default-root +podman info +``` + ## Troubleshooting - Run `minikube start --alsologtostderr -v=7` to debug errors and crashes diff --git a/site/content/en/docs/handbook/addons/gcp-auth.md b/site/content/en/docs/handbook/addons/gcp-auth.md index 46f71bbe1d04..21b6d2fe62af 100644 --- a/site/content/en/docs/handbook/addons/gcp-auth.md +++ b/site/content/en/docs/handbook/addons/gcp-auth.md @@ -5,9 +5,16 @@ weight: 1 date: 2020-07-15 --- -## Tutorial -If you have a containerized GCP app with a Kubernetes yaml, you can automatically add your credentials to all your deployed pods dynamically with this minikube addon. You just need to have a credentials file, which can be generated with `gcloud auth application-default login`. If you already have a json credentials file you want specify, use the GOOGLE_APPLICATION_CREDENTIALS environment variable. +The gcp-auth addon automatically and dynamically configures pods to use your credentials, allowing applications to access Google Cloud services as if they were running within Google Cloud. + +The addon normally uses the [Google Application Default Credentials](https://google.aip.dev/auth/4110) as configured with `gcloud auth application-default login`. If you already have a json credentials file you want specify, such as to use a service account, set the GOOGLE_APPLICATION_CREDENTIALS environment variable to point to that file. + +The addon normally uses the default gcloud project as configured with `gcloud config set project `. If you want to use a different project, set the `GOOGLE_CLOUD_PROJECT` environment variable to the desired project. + +The pods are configured with the `GOOGLE_APPLICATION_DEFAULTS` environment variable is set, which is automatically used by GCP client libraries, and the `GOOGLE_CLOUD_PROJECT` environment variable is set, as are several other historical environment variables. The addon also configures [registry pull secrets](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) to allow the cluster to access container images hosted in your project's [Artifact Registry](https://cloud.google.com/artifact-registry) and [Google Container Registry](https://cloud.google.com/container-registry). + +## Tutorial - Start a cluster: @@ -90,4 +97,4 @@ If you had already deployed pods to your minikube cluster before enabling the gc 1. If you use a Deployment to deploy your pods, just delete the existing pods with `kubectl delete pod `. The deployment will then automatically recreate the pod and it will have the correct credentials. -2. minikube can delete and recreate your pods for you, by running `minikube addons enable gcp-auth --refresh`. It does not matter if you have already enabled the addon or not. \ No newline at end of file +2. minikube can delete and recreate your pods for you, by running `minikube addons enable gcp-auth --refresh`. It does not matter if you have already enabled the addon or not. diff --git a/site/content/en/docs/handbook/addons/ingress-dns.md b/site/content/en/docs/handbook/addons/ingress-dns.md index 5c59e10eda9d..1b10204dfacf 100644 --- a/site/content/en/docs/handbook/addons/ingress-dns.md +++ b/site/content/en/docs/handbook/addons/ingress-dns.md @@ -101,8 +101,15 @@ systemctl restart NetworkManager.service Also see `dns=` in [NetworkManager.conf](https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html). #### Windows +Open `Powershell` as Administrator and execute the following +```sh +Add-DnsClientNrptRule -Namespace ".test" -NameServers "$(minikube ip)" +``` -TODO +The following will remove any matching rules, before creating one. This is helpful if your minikube has a new ip +```sh +Get-DnsClientNrptRule | Where-Object {$_.Namespace -eq '.test'} | Remove-DnsClientNrptRule -Force; Add-DnsClientNrptRule -Namespace ".test" -NameServers "$(minikube ip)" +``` ## Testing diff --git a/site/content/en/docs/handbook/pushing.md b/site/content/en/docs/handbook/pushing.md index 753ffe96efa7..ac075dbcba2a 100644 --- a/site/content/en/docs/handbook/pushing.md +++ b/site/content/en/docs/handbook/pushing.md @@ -31,14 +31,14 @@ Here is a comparison table to help you choose: | Method | Supported Runtimes | Performance | Load | Build | |--- |--- |--- |--- |--- |--- |--- | -| [docker-env command](/docs/handbook/pushing/#1pushing-directly-to-the-in-cluster-docker-daemon-docker-env) | only docker | good | yes | yes | -| [podman-env command](/docs/handbook/pushing/#3-pushing-directly-to-in-cluster-crio-podman-env) | only cri-o | good | yes | yes | -| [ctr/buildctl command](/docs/handbook/pushing/#6-pushing-directly-to-in-cluster-containerd-buildkitd) | only containerd | good | yes | yes | -| [image load command](/docs/handbook/pushing/#7-loading-directly-to-in-cluster-container-runtime) | all | ok | yes | no | -| [image build command](/docs/handbook/pushing/#8-building-images-to-in-cluster-container-runtime) | all | ok | no | yes | +| [docker-env command](/docs/handbook/pushing/#1-pushing-directly-to-the-in-cluster-docker-daemon-docker-env) | only docker | good | yes | yes | | [cache command](/docs/handbook/pushing/#2-push-images-using-cache-command) | all | ok | yes | no | +| [podman-env command](/docs/handbook/pushing/#3-pushing-directly-to-in-cluster-cri-o-podman-env) | only cri-o | good | yes | yes | | [registry addon](/docs/handbook/pushing/#4-pushing-to-an-in-cluster-using-registry-addon) | all | ok | yes | no | | [minikube ssh](/docs/handbook/pushing/#5-building-images-inside-of-minikube-using-ssh) | all | best | yes\* | yes\* | +| [ctr/buildctl command](/docs/handbook/pushing/#6-pushing-directly-to-in-cluster-containerd-buildkitd) | only containerd | good | yes | yes | +| [image load command](/docs/handbook/pushing/#7-loading-directly-to-in-cluster-container-runtime) | all | ok | yes | no | +| [image build command](/docs/handbook/pushing/#8-building-images-to-in-cluster-container-runtime) | all | ok | no | yes | * note1 : the default container-runtime on minikube is 'docker'. * note2 : 'none' driver (bare metal) does not need pushing image to the cluster, as any image on your system is already available to the kubernetes. diff --git a/site/content/en/docs/start/_index.md b/site/content/en/docs/start/_index.md index 59174dd807e2..69baefb7fcff 100644 --- a/site/content/en/docs/start/_index.md +++ b/site/content/en/docs/start/_index.md @@ -425,20 +425,19 @@ choco install minikube {{% quiz_instruction id="/Windows/x86-64/Stable/.exe download" %}} 1. Download the [latest release](https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe).
- Or if you have `curl` installed, use this command: - ```shell - curl -Lo minikube.exe https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe - New-Item -Path "c:\" -Name "minikube" -ItemType "directory" -Force - Move-Item .\minikube.exe c:\minikube\minikube.exe -Force + Or if using `PowerShell`, use this command: + ```powershell + New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force + Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing ``` 2. Add the binary in to your `PATH`.
_Make sure to run PowerShell as Administrator._ - ```shell - $oldpath=[Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) - if($oldpath -notlike "*;C:\minikube*"){` - [Environment]::SetEnvironmentVariable("Path", $oldpath+";C:\minikube", [EnvironmentVariableTarget]::Machine)` + ```powershell + $oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine) + if ($oldPath.Split(';') -inotcontains 'C:\minikube'){ ` + [Environment]::SetEnvironmentVariable('Path', $('{0};C:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine) ` } ``` _If you used a CLI to perform the installation, you will need to close that CLI and open a new one before proceeding._ @@ -447,22 +446,22 @@ choco install minikube {{% quiz_instruction id="/Windows/x86-64/Beta/.exe download" %}} 1. Download the latest beta release.
- Or if you have `curl` installed, use this command: - ```shell - $r='https://api.github.com/repos/kubernetes/minikube/releases' - $u=curl -s $r | Select-String -Pattern 'http.*download/v.*beta.*/minikube-windows-amd64.exe' | Select Matches -First 1 - curl -Lo minikube.exe $u.Matches.Value - New-Item -Path "c:\" -Name "minikube" -ItemType "directory" -Force - Move-Item .\minikube.exe c:\minikube\minikube.exe -Force + Or if using `PowerShell`, use this command: + ```powershell + New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force + $response = Invoke-WebRequest -Uri 'https://api.github.com/repos/kubernetes/minikube/releases' -UseBasicParsing + $json = $response.Content | ConvertFrom-Json + $item = ($json | ?{ $_.prerelease -eq $true })[0].assets | ?{ $_.name -eq 'minikube-windows-amd64.exe' } + Invoke-WebRequest -Uri $item.browser_download_url -OutFile 'c:\minikube\minikube.exe' -UseBasicParsing ``` 2. Add the binary in to your `PATH`.
_Make sure to run PowerShell as Administrator._ - ```shell - $oldpath=[Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) - if($oldpath -notlike "*;C:\minikube*"){` - [Environment]::SetEnvironmentVariable("Path", $oldpath+";C:\minikube", [EnvironmentVariableTarget]::Machine)` + ```powershell + $oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine) + if ($oldPath.Split(';') -inotcontains 'C:\minikube'){ ` + [Environment]::SetEnvironmentVariable('Path', $('{0};C:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine) ` } ``` _If you used a CLI to perform the installation, you will need to close that CLI and open a new one before proceeding._ @@ -501,11 +500,15 @@ If you already have kubectl installed, you can now use it to access your shiny n kubectl get po -A ``` -Alternatively, minikube can download the appropriate version of kubectl, if you don't mind the double-dashes in the command-line: +Alternatively, minikube can download the appropriate version of kubectl and you should be able to use it like this: ```shell minikube kubectl -- get po -A ``` +You can also make your life easier by adding the following to your shell config: +```shell +alias kubectl="minikube kubectl --" +``` Initially, some services such as the storage-provisioner, may not yet be in a Running state. This is a normal condition during cluster bring-up, and will resolve itself momentarily. For additional insight into your cluster state, minikube bundles the Kubernetes Dashboard, allowing you to get easily acclimated to your new environment: diff --git a/site/static/images/benchmarks/timeToK8s/v1.23.0.png b/site/static/images/benchmarks/timeToK8s/v1.23.0.png new file mode 100644 index 000000000000..ba9e8ab2e600 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.23.0.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.23.1.png b/site/static/images/benchmarks/timeToK8s/v1.23.1.png new file mode 100644 index 000000000000..e3d2fb55dc82 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.23.1.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.23.2.png b/site/static/images/benchmarks/timeToK8s/v1.23.2.png new file mode 100644 index 000000000000..5800a51cfdfb Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.23.2.png differ diff --git a/test/integration/aaa_download_only_test.go b/test/integration/aaa_download_only_test.go index 0037c98bd629..fca29ccb170c 100644 --- a/test/integration/aaa_download_only_test.go +++ b/test/integration/aaa_download_only_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/aab_offline_test.go b/test/integration/aab_offline_test.go index 2b2f29eae2ba..e9f2dbb219e0 100644 --- a/test/integration/aab_offline_test.go +++ b/test/integration/aab_offline_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/addons_test.go b/test/integration/addons_test.go index df3f02823d50..e8730ac07892 100644 --- a/test/integration/addons_test.go +++ b/test/integration/addons_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* @@ -68,7 +69,7 @@ func TestAddons(t *testing.T) { args := append([]string{"start", "-p", profile, "--wait=true", "--memory=4000", "--alsologtostderr", "--addons=registry", "--addons=metrics-server", "--addons=olm", "--addons=volumesnapshots", "--addons=csi-hostpath-driver"}, StartArgs()...) if !NoneDriver() { // none driver does not support ingress - args = append(args, "--addons=ingress") + args = append(args, "--addons=ingress", "--addons=ingress-dns") } if !arm64Platform() { args = append(args, "--addons=helm-tiller") @@ -86,10 +87,10 @@ func TestAddons(t *testing.T) { if detect.IsOnGCE() { args = []string{"-p", profile, "addons", "enable", "gcp-auth"} rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err == nil { - t.Errorf("Expected error but didn't get one. command %v, output %v", rr.Command(), rr.Output()) + if err != nil { + t.Errorf("%s failed: %v", rr.Command(), err) } else { - if !strings.Contains(rr.Output(), "It seems that you are running in GCE") { + if !detect.IsCloudShell() && !strings.Contains(rr.Output(), "It seems that you are running in GCE") { t.Errorf("Unexpected error message: %v", rr.Output()) } else { // ok, use force here since we are in GCE @@ -120,7 +121,6 @@ func TestAddons(t *testing.T) { {"HelmTiller", validateHelmTillerAddon}, {"Olm", validateOlmAddon}, {"CSI", validateCSIDriverAndSnapshots}, - {"GCPAuth", validateGCPAuthAddon}, } for _, tc := range tests { tc := tc @@ -134,6 +134,25 @@ func TestAddons(t *testing.T) { } }) + // Run other tests after to avoid collision + t.Run("serial", func(t *testing.T) { + tests := []struct { + name string + validator validateFunc + }{ + {"GCPAuth", validateGCPAuthAddon}, + } + for _, tc := range tests { + tc := tc + if ctx.Err() == context.DeadlineExceeded { + t.Fatalf("Unable to run more tests (deadline exceeded)") + } + t.Run(tc.name, func(t *testing.T) { + tc.validator(ctx, t, profile) + }) + } + }) + t.Run("StoppedEnableDisable", func(t *testing.T) { // Assert that disable/enable works offline rr, err := Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile)) @@ -155,7 +174,7 @@ func TestAddons(t *testing.T) { func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) if NoneDriver() { - t.Skipf("skipping: ingress not supported ") + t.Skipf("skipping: ingress not supported") } client, err := kapi.Client(profile) @@ -167,7 +186,7 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { // Error from server (InternalError): Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": dial tcp 10.107.218.58:443: i/o timeout // Error from server (InternalError): Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": context deadline exceeded if _, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "wait", "--for=condition=ready", "--namespace=ingress-nginx", "pod", "--selector=app.kubernetes.io/component=controller", "--timeout=90s")); err != nil { - t.Fatalf("failed waititing for ingress-nginx-controller : %v", err) + t.Fatalf("failed waiting for ingress-nginx-controller : %v", err) } // create networking.k8s.io/v1 ingress @@ -191,7 +210,7 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { t.Errorf("failed to kubectl replace nginx-pod-svc. args %q. %v", rr.Command(), err) } - if _, err := PodWait(ctx, t, profile, "default", "run=nginx", Minutes(4)); err != nil { + if _, err := PodWait(ctx, t, profile, "default", "run=nginx", Minutes(8)); err != nil { t.Fatalf("failed waiting for ngnix pod: %v", err) } if err := kapi.WaitForService(client, "default", "nginx", true, time.Millisecond*500, Minutes(10)); err != nil { @@ -203,19 +222,11 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { // check if the ingress can route nginx app with networking.k8s.io/v1 ingress checkv1Ingress := func() error { - var rr *RunResult - var err error - if NoneDriver() { // just run curl directly on the none driver - rr, err = Run(t, exec.CommandContext(ctx, "curl", "-s", addr, "-H", "'Host: nginx.example.com'")) - if err != nil { - return err - } - } else { - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("curl -s %s -H 'Host: nginx.example.com'", addr))) - if err != nil { - return err - } + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("curl -s %s -H 'Host: nginx.example.com'", addr))) + if err != nil { + return err } + stderr := rr.Stderr.String() if rr.Stderr.String() != "" { t.Logf("debug: unexpected stderr for %v:\n%s", rr.Command(), stderr) @@ -230,6 +241,36 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { t.Errorf("failed to get expected response from %s within minikube: %v", addr, err) } + if NeedsPortForward() { + t.Skip("skipping ingress DNS test for any combination that needs port forwarding") + } + + // check the ingress-dns addon here as well + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, "ingress-dns-example.yaml"))) + if err != nil { + t.Errorf("failed to kubectl replace ingress-dns-example. args %q. %v", rr.Command(), err) + } + + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ip")) + if err != nil { + t.Errorf("failed to retrieve minikube ip. args %q : %v", rr.Command(), err) + } + ip := strings.TrimSuffix(rr.Stdout.String(), "\n") + + rr, err = Run(t, exec.CommandContext(ctx, "nslookup", "hello-john.test", ip)) + if err != nil { + t.Errorf("failed to nslookup hello-john.test host. args %q : %v", rr.Command(), err) + } + // nslookup should include info about the hello-john.test host, including minikube's ip + if !strings.Contains(rr.Stdout.String(), ip) { + t.Errorf("unexpected output from nslookup. stdout: %v\nstderr: %v", rr.Stdout.String(), rr.Stderr.String()) + } + + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "ingress-dns", "--alsologtostderr", "-v=1")) + if err != nil { + t.Errorf("failed to disable ingress-dns addon. args %q : %v", rr.Command(), err) + } + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "ingress", "--alsologtostderr", "-v=1")) if err != nil { t.Errorf("failed to disable ingress addon. args %q : %v", rr.Command(), err) @@ -389,10 +430,10 @@ func validateHelmTillerAddon(ctx context.Context, t *testing.T, profile string) } want := "Server: &version.Version" - // Test from inside the cluster (`helm version` use pod.list permission. we use tiller serviceaccount in kube-system to list pod) + // Test from inside the cluster (`helm version` use pod.list permission.) checkHelmTiller := func() error { - rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "run", "--rm", "helm-test", "--restart=Never", "--image=alpine/helm:2.16.3", "-it", "--namespace=kube-system", "--serviceaccount=tiller", "--", "version")) + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "run", "--rm", "helm-test", "--restart=Never", "--image=alpine/helm:2.16.3", "-it", "--namespace=kube-system", "--", "version")) if err != nil { return err } @@ -663,8 +704,15 @@ func validateGCPAuthAddon(ctx context.Context, t *testing.T, profile string) { } } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "gcp-auth", "--alsologtostderr", "-v=1")) - if err != nil { - t.Errorf("failed disabling gcp-auth addon. arg %q.s %v", rr.Command(), err) + disableGCPAuth := func() error { + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "gcp-auth", "--alsologtostderr", "-v=1")) + if err != nil { + return err + } + return nil + } + + if err := retry.Expo(disableGCPAuth, Minutes(2), Minutes(10), 5); err != nil { + t.Errorf("failed to disable GCP auth addon: %v", err) } } diff --git a/test/integration/cert_options_test.go b/test/integration/cert_options_test.go index 6353eac8797b..3ff990b98c22 100644 --- a/test/integration/cert_options_test.go +++ b/test/integration/cert_options_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* @@ -23,6 +24,7 @@ import ( "os/exec" "strings" "testing" + "time" ) // TestCertOptions makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters @@ -36,7 +38,6 @@ func TestCertOptions(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) defer CleanupWithLogs(t, profile, cancel) - // Use the most verbose logging for the simplest test. If it fails, something is very wrong. args := append([]string{"start", "-p", profile, "--memory=2048", "--apiserver-ips=127.0.0.1", "--apiserver-ips=192.168.15.15", "--apiserver-names=localhost", "--apiserver-names=www.google.com", "--apiserver-port=8555"}, StartArgs()...) // We can safely override --apiserver-name with @@ -79,3 +80,32 @@ func TestCertOptions(t *testing.T) { } } + +// TestCertExpiration makes sure minikube can start after its profile certs have expired. +// It does this by configuring minikube certs to expire after 3 minutes, then waiting 3 minutes, then starting again. +// It also makes sure minikube prints a cert expiration warning to the user. +func TestCertExpiration(t *testing.T) { + MaybeParallel(t) + + profile := UniqueProfileName("cert-expiration") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) + defer CleanupWithLogs(t, profile, cancel) + + args := append([]string{"start", "-p", profile, "--memory=2048", "--cert-expiration=3m"}, StartArgs()...) + + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("failed to start minikube with args: %q : %v", rr.Command(), err) + } + + // Now wait 3 minutes for the certs to expire and make sure minikube starts properly + time.Sleep(time.Minute * 3) + args = append([]string{"start", "-p", profile, "--memory=2048", "--cert-expiration=8760h"}, StartArgs()...) + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("failed to start minikube after cert expiration: %q : %v", rr.Command(), err) + } + if !strings.Contains(rr.Output(), "expired") { + t.Errorf("minikube start output did not warn about expired certs: %v", rr.Output()) + } +} diff --git a/test/integration/docker_test.go b/test/integration/docker_test.go index c7db90f6c29d..4b7667690267 100644 --- a/test/integration/docker_test.go +++ b/test/integration/docker_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* @@ -93,6 +94,8 @@ func TestForceSystemdFlag(t *testing.T) { validateDockerSystemd(ctx, t, profile) case "containerd": validateContainerdSystemd(ctx, t, profile) + case "crio": + validateCrioSystemd(ctx, t, profile) } } @@ -112,13 +115,25 @@ func validateDockerSystemd(ctx context.Context, t *testing.T, profile string) { func validateContainerdSystemd(ctx context.Context, t *testing.T, profile string) { rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "cat /etc/containerd/config.toml")) if err != nil { - t.Errorf("failed to get docker cgroup driver. args %q: %v", rr.Command(), err) + t.Errorf("failed to get containerd cgroup driver. args %q: %v", rr.Command(), err) } if !strings.Contains(rr.Output(), "SystemdCgroup = true") { t.Fatalf("expected systemd cgroup driver, got: %v", rr.Output()) } } +// validateCrioSystemd makes sure the --force-systemd flag worked with the cri-o container runtime +func validateCrioSystemd(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "cat /etc/crio/crio.conf")) + if err != nil { + t.Errorf("failed to get cri-o cgroup driver. args %q: %v", rr.Command(), err) + } + // cri-o defaults to `systemd` if `cgroup_manager` not set, so we remove `cgroup_manager` on force + if strings.Contains(rr.Output(), "cgroup_manager = ") { + t.Fatalf("expected systemd cgroup driver, got: %v", rr.Output()) + } +} + // TestForceSystemdEnv makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the --force-systemd flag func TestForceSystemdEnv(t *testing.T) { if NoneDriver() { diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index 6333e5eace6c..95b0c1de0ed6 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/functional_test.go b/test/integration/functional_test.go index 0e011303726c..997095b199af 100644 --- a/test/integration/functional_test.go +++ b/test/integration/functional_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* @@ -54,6 +55,8 @@ import ( "golang.org/x/build/kubernetes/api" ) +const addonResizer = "gcr.io/google-containers/addon-resizer" + // validateFunc are for subtests that share a single setup type validateFunc func(context.Context, *testing.T, string) @@ -150,13 +153,7 @@ func TestFunctional(t *testing.T) { {"DockerEnv", validateDockerEnv}, {"PodmanEnv", validatePodmanEnv}, {"NodeLabels", validateNodeLabels}, - {"LoadImage", validateLoadImage}, - {"SaveImage", validateSaveImage}, - {"RemoveImage", validateRemoveImage}, - {"LoadImageFromFile", validateLoadImageFromFile}, - {"SaveImageToFile", validateSaveImageToFile}, - {"BuildImage", validateBuildImage}, - {"ListImages", validateListImages}, + {"ImageCommands", validateImageCommands}, {"NonActiveRuntimeDisabled", validateNotActiveRuntimeDisabled}, {"Version", validateVersionCmd}, } @@ -180,16 +177,14 @@ func cleanupUnwantedImages(ctx context.Context, t *testing.T, profile string) { if err != nil { t.Skipf("docker is not installed, cannot delete docker images") } else { - t.Run("delete busybox image", func(t *testing.T) { - newImage := fmt.Sprintf("docker.io/library/busybox:load-%s", profile) - rr, err := Run(t, exec.CommandContext(ctx, "docker", "rmi", "-f", newImage)) - if err != nil { - t.Logf("failed to remove image busybox from docker images. args %q: %v", rr.Command(), err) - } - newImage = fmt.Sprintf("docker.io/library/busybox:remove-%s", profile) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "rmi", "-f", newImage)) - if err != nil { - t.Logf("failed to remove image busybox from docker images. args %q: %v", rr.Command(), err) + t.Run("delete addon-resizer images", func(t *testing.T) { + tags := []string{"1.8.8", profile} + for _, tag := range tags { + image := fmt.Sprintf("%s:%s", addonResizer, tag) + rr, err := Run(t, exec.CommandContext(ctx, "docker", "rmi", "-f", image)) + if err != nil { + t.Logf("failed to remove image %q from docker images. args %q: %v", image, rr.Command(), err) + } } }) t.Run("delete my-image image", func(t *testing.T) { @@ -226,331 +221,157 @@ func validateNodeLabels(ctx context.Context, t *testing.T, profile string) { } } -// validateLoadImage makes sure that `minikube image load` works as expected -func validateLoadImage(ctx context.Context, t *testing.T, profile string) { +// validateImageCommands runs tests on all the `minikube image` commands, ex. `minikube image load`, `minikube image list`, etc. +func validateImageCommands(ctx context.Context, t *testing.T, profile string) { if NoneDriver() { - t.Skip("load image not available on none driver") + t.Skip("image commands are not available on the none driver") } if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "busybox:1.33" - rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) + t.Skip("skipping on darwin github action runners, as this test requires a running docker daemon") } - // tag busybox - newImage := fmt.Sprintf("docker.io/library/busybox:load-%s", profile) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", busyboxImage, newImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } + t.Run("ImageList", func(t *testing.T) { + MaybeParallel(t) - // try to load the new image into minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", "--daemon", newImage)) - if err != nil { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "ls")) + if err != nil { + t.Fatalf("listing image with minikube: %v\n%s", err, rr.Output()) + } + if rr.Stdout.Len() > 0 { + t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) + } + if rr.Stderr.Len() > 0 { + t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) + } - // make sure the image was correctly loaded - rr, err = inspectImage(ctx, t, profile, newImage) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), fmt.Sprintf("busybox:load-%s", profile)) { - t.Fatalf("expected %s to be loaded into minikube but the image is not there", newImage) - } + list := rr.Output() + for _, theImage := range []string{"k8s.gcr.io/pause", "docker.io/kubernetesui/dashboard"} { + if !strings.Contains(list, theImage) { + t.Fatalf("expected %s to be listed with minikube but the image is not there", theImage) + } + } + }) -} + t.Run("ImageBuild", func(t *testing.T) { + MaybeParallel(t) -// validateLoadImageFromFile makes sure that `minikube image load` works from a local file -func validateLoadImageFromFile(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("load image not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "busybox:1.31" - rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) - } + newImage := fmt.Sprintf("localhost/my-image:%s", profile) - tag := fmt.Sprintf("load-from-file-%s", profile) - taggedImage := fmt.Sprintf("docker.io/library/busybox:%s", tag) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", busyboxImage, taggedImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } + // try to build the new image with minikube + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "build", "-t", newImage, filepath.Join(*testdataDir, "build"))) + if err != nil { + t.Fatalf("building image with minikube: %v\n%s", err, rr.Output()) + } + if rr.Stdout.Len() > 0 { + t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) + } + if rr.Stderr.Len() > 0 { + t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) + } - // save image to file - imageFile := "busybox-load.tar" - rr, err = Run(t, exec.CommandContext(ctx, "docker", "save", "-o", imageFile, taggedImage)) - if err != nil { - t.Fatalf("failed to save image to file: %v\n%s", err, rr.Output()) - } + checkImageExists(ctx, t, profile, newImage) + }) + + taggedImage := fmt.Sprintf("%s:%s", addonResizer, profile) + imageFile := "addon-resizer-save.tar" + var imagePath string defer os.Remove(imageFile) - // try to load the new image into minikube - imagePath, err := filepath.Abs(imageFile) - if err != nil { - t.Fatalf("failed to get absolute path of file %q: %v", imageFile, err) - } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", imagePath)) - if err != nil || rr.Stderr.String() != "" { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } + t.Run("Setup", func(t *testing.T) { + var err error + imagePath, err = filepath.Abs(imageFile) + if err != nil { + t.Fatalf("failed to get absolute path of file %q: %v", imageFile, err) + } - // make sure the image was correctly loaded - rr, err = listImages(ctx, t, profile) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), tag) { - t.Fatalf("expected %s to be loaded into minikube but the image is not there: %v", taggedImage, rr.Output()) - } -} + pulledImage := fmt.Sprintf("%s:%s", addonResizer, "1.8.8") + rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", pulledImage)) + if err != nil { + t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) + } -// validateRemoveImage makes sures that `minikube image rm` works as expected -func validateRemoveImage(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("load image not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) + rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", pulledImage, taggedImage)) + if err != nil { + t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) + } + }) - // pull busybox - busyboxImage := "busybox:1.32" - rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) - } + t.Run("ImageLoadDaemon", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", "--daemon", taggedImage)) + if err != nil { + t.Fatalf("loading image into minikube from daemon: %v\n%s", err, rr.Output()) + } - // tag busybox - newImage := fmt.Sprintf("docker.io/library/busybox:remove-%s", profile) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", busyboxImage, newImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } + checkImageExists(ctx, t, profile, taggedImage) + }) - // try to load the image into minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", newImage)) - if err != nil { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } + t.Run("ImageSaveToFile", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "save", taggedImage, imagePath)) + if err != nil { + t.Fatalf("saving image from minikube to file: %v\n%s", err, rr.Output()) + } - // try to remove the image from minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "rm", newImage)) - if err != nil { - t.Fatalf("removing image from minikube: %v\n%s", err, rr.Output()) - } + if _, err := os.Stat(imagePath); err != nil { + t.Fatalf("expected %q to exist after `image save`, but doesn't exist", imagePath) + } + }) - // make sure the image was removed - rr, err = listImages(ctx, t, profile) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if strings.Contains(rr.Output(), fmt.Sprintf("busybox:remove-%s", profile)) { - t.Fatalf("expected %s to be removed from minikube but the image is there", newImage) - } + t.Run("ImageRemove", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "rm", taggedImage)) + if err != nil { + t.Fatalf("removing image from minikube: %v\n%s", err, rr.Output()) + } -} + // make sure the image was removed + rr, err = listImages(ctx, t, profile) + if err != nil { + t.Fatalf("listing images: %v\n%s", err, rr.Output()) + } + if strings.Contains(rr.Output(), taggedImage) { + t.Fatalf("expected %q to be removed from minikube but still exists", taggedImage) + } + }) -// validateSaveImage makes sure that `minikube image save` works as expected -func validateSaveImage(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("load image not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "docker.io/library/busybox:1.29" - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) - } + t.Run("ImageLoadFromFile", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", imagePath)) + if err != nil || rr.Stderr.String() != "" { + t.Fatalf("loading image into minikube from file: %v\n%s", err, rr.Output()) + } - // tag busybox - name := "busybox" - tag := fmt.Sprintf("save-%s", profile) - newImage := fmt.Sprintf("docker.io/library/%s:%s", name, tag) - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "tag", busyboxImage, newImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } + checkImageExists(ctx, t, profile, taggedImage) + }) - // try to save the new image from minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "save", "--daemon", newImage)) - if err != nil { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } + t.Run("ImageSaveDaemon", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, "docker", "rmi", taggedImage)) + if err != nil { + t.Fatalf("failed to remove image from docker: %v\n%s", err, rr.Output()) + } - // make sure the image was correctly loaded - rr, err = Run(t, exec.CommandContext(ctx, "docker", "images", name)) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), fmt.Sprintf("save-%s", profile)) { - t.Fatalf("expected %s to be loaded into minikube but the image is not there", newImage) - } + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "save", "--daemon", taggedImage)) + if err != nil { + t.Fatalf("saving image from minikube to daemon: %v\n%s", err, rr.Output()) + } + rr, err = Run(t, exec.CommandContext(ctx, "docker", "image", "inspect", taggedImage)) + if err != nil { + t.Fatalf("expected image to be loaded into Docker, but image was not found: %v\n%s", err, rr.Output()) + } + }) } -// validateSaveImageToFile makes sure that `minikube image save` works to a local file -func validateSaveImageToFile(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("save image not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "docker.io/library/busybox:1.30" - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) - } - - name := "busybox" - tag := fmt.Sprintf("save-to-file-%s", profile) - taggedImage := fmt.Sprintf("docker.io/library/%s:%s", name, tag) - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "tag", busyboxImage, taggedImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } - - // try to save the new image from minikube - imageFile := "busybox-save.tar" - imagePath, err := filepath.Abs(imageFile) - if err != nil { - t.Fatalf("failed to get absolute path of file %q: %v", imageFile, err) - } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "save", taggedImage, imagePath)) - if err != nil { - t.Fatalf("saving image from minikube: %v\n%s", err, rr.Output()) - } - - // load image from file - rr, err = Run(t, exec.CommandContext(ctx, "docker", "load", "-i", imagePath)) - if err != nil { - t.Fatalf("failed to load image to file: %v\n%s", err, rr.Output()) - } - defer os.Remove(imageFile) - +func checkImageExists(ctx context.Context, t *testing.T, profile string, image string) { // make sure the image was correctly loaded - rr, err = Run(t, exec.CommandContext(ctx, "docker", "images", name)) + rr, err := listImages(ctx, t, profile) if err != nil { t.Fatalf("listing images: %v\n%s", err, rr.Output()) } - if !strings.Contains(rr.Output(), tag) { - t.Fatalf("expected %s to be loaded but the image is not there", taggedImage) - } - -} - -func inspectImage(ctx context.Context, t *testing.T, profile string, image string) (*RunResult, error) { - var cmd *exec.Cmd - if ContainerRuntime() == "docker" { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "docker", "image", "inspect", image) - } else { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "sudo", "crictl", "inspecti", image) - } - rr, err := Run(t, cmd) - if err != nil { - return rr, err + if !strings.Contains(rr.Output(), image) { + t.Fatalf("expected %q to be loaded into minikube but the image is not there", image) } - return rr, nil } func listImages(ctx context.Context, t *testing.T, profile string) (*RunResult, error) { - var cmd *exec.Cmd - if ContainerRuntime() == "docker" { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "docker", "images") - } else { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "sudo", "crictl", "images") - } - rr, err := Run(t, cmd) - if err != nil { - return rr, err - } - return rr, nil -} - -// validateBuildImage makes sures that `minikube image build` works as expected -func validateBuildImage(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("image build not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - - newImage := fmt.Sprintf("localhost/my-image:%s", profile) - - // try to build the new image with minikube - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "build", "-t", newImage, filepath.Join(*testdataDir, "build"))) - if err != nil { - t.Fatalf("building image with minikube: %v\n%s", err, rr.Output()) - } - if rr.Stdout.Len() > 0 { - t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) - } - if rr.Stderr.Len() > 0 { - t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) - } - - // make sure the image was correctly built - rr, err = inspectImage(ctx, t, profile, newImage) - if err != nil { - ll, _ := listImages(ctx, t, profile) - t.Logf("(dbg) images: %s", ll.Output()) - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), newImage) { - t.Fatalf("expected %s to be built with minikube but the image is not there", newImage) - } -} - -// validateListImages makes sures that `minikube image ls` works as expected -func validateListImages(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("list images not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - - // try to list the images with minikube - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "ls")) - if err != nil { - t.Fatalf("listing image with minikube: %v\n%s", err, rr.Output()) - } - if rr.Stdout.Len() > 0 { - t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) - } - if rr.Stderr.Len() > 0 { - t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) - } - - list := rr.Output() - for _, theImage := range []string{"k8s.gcr.io/pause", "docker.io/kubernetesui/dashboard"} { - if !strings.Contains(list, theImage) { - t.Fatalf("expected %s to be listed with minikube but the image is not there", theImage) - } - } + return Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "ls")) } // check functionality of minikube after evaluating docker-env @@ -2137,7 +1958,7 @@ func validateVersionCmd(ctx context.Context, t *testing.T, profile string) { t.Errorf("error version: %v", err) } got := rr.Stdout.String() - for _, c := range []string{"buildctl", "commit", "containerd", "crictl", "crio", "ctr", "docker", "minikubeVersion", "podman", "run"} { + for _, c := range []string{"buildctl", "commit", "containerd", "crictl", "crio", "ctr", "docker", "minikubeVersion", "podman", "run", "crun"} { if !strings.Contains(got, c) { t.Errorf("expected to see %q in the minikube version --components but got:\n%s", c, got) } diff --git a/test/integration/functional_test_mount_test.go b/test/integration/functional_test_mount_test.go index d7e8a847091f..039df204170e 100644 --- a/test/integration/functional_test_mount_test.go +++ b/test/integration/functional_test_mount_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/functional_test_pvc_test.go b/test/integration/functional_test_pvc_test.go index 744edadbae98..5b5e015e1531 100644 --- a/test/integration/functional_test_pvc_test.go +++ b/test/integration/functional_test_pvc_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/functional_test_tunnel_test.go b/test/integration/functional_test_tunnel_test.go index 8d7b4fcb38d7..4472408778ca 100644 --- a/test/integration/functional_test_tunnel_test.go +++ b/test/integration/functional_test_tunnel_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/guest_env_test.go b/test/integration/guest_env_test.go index 21f274b4777f..f75f1cd6d754 100644 --- a/test/integration/guest_env_test.go +++ b/test/integration/guest_env_test.go @@ -1,3 +1,4 @@ +//go:build iso // +build iso /* diff --git a/test/integration/gvisor_addon_test.go b/test/integration/gvisor_addon_test.go index 82609843c3e1..5b5e2453d795 100644 --- a/test/integration/gvisor_addon_test.go +++ b/test/integration/gvisor_addon_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/kic_custom_network_test.go b/test/integration/kic_custom_network_test.go index b9e571ff0d0b..b39233653274 100644 --- a/test/integration/kic_custom_network_test.go +++ b/test/integration/kic_custom_network_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/multinode_test.go b/test/integration/multinode_test.go index b1e74c9bb3d4..9a70a7aa2292 100644 --- a/test/integration/multinode_test.go +++ b/test/integration/multinode_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/net_test.go b/test/integration/net_test.go index e3eb1a49d0e4..60dc1cd443f4 100644 --- a/test/integration/net_test.go +++ b/test/integration/net_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/none_test.go b/test/integration/none_test.go index b1219de8cd69..a5e4f96e3c05 100644 --- a/test/integration/none_test.go +++ b/test/integration/none_test.go @@ -1,5 +1,5 @@ -// +build integration -// +build linux +//go:build integration && linux +// +build integration,linux /* Copyright 2019 The Kubernetes Authors All rights reserved. diff --git a/test/integration/pause_test.go b/test/integration/pause_test.go index e4706aaa6fde..b125c7dc4e5c 100644 --- a/test/integration/pause_test.go +++ b/test/integration/pause_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/pkg_install_test.go b/test/integration/pkg_install_test.go deleted file mode 100644 index ca500e41a4ab..000000000000 --- a/test/integration/pkg_install_test.go +++ /dev/null @@ -1,108 +0,0 @@ -// +build integration - -/* -Copyright 2021 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 integration - -import ( - "context" - "fmt" - "os/exec" - "path/filepath" - "runtime" - "testing" -) - -var distros = []string{ - "debian:sid", - "debian:latest", - "debian:10", - "debian:9", - "ubuntu:latest", - "ubuntu:20.10", - "ubuntu:20.04", - "ubuntu:18.04", -} - -var timeout = Minutes(10) - -// TestPackageInstall tests installation of .deb packages with minikube itself and with kvm2 driver -// on various debian/ubuntu docker images -func TestDebPackageInstall(t *testing.T) { - - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - - rr, err := Run(t, exec.CommandContext(ctx, "docker", "version")) - if err != nil || rr.ExitCode != 0 { - t.Skip("docker is not installed") - } - - pkgDir, err := filepath.Abs(filepath.Dir(Target())) - if err != nil { - t.Errorf("failed to get minikube path: %v", err) - } - mkDebs, err := filepath.Glob(fmt.Sprintf("%s/minikube_*_%s.deb", pkgDir, runtime.GOARCH)) - if err != nil { - t.Errorf("failed to find minikube deb in %q: %v", pkgDir, err) - } - kvmDebs, err := filepath.Glob(fmt.Sprintf("%s/docker-machine-driver-kvm2_*_%s.deb", pkgDir, runtime.GOARCH)) - if err != nil { - t.Errorf("failed to find minikube deb in %q: %v", pkgDir, err) - } - - for _, distro := range distros { - distroImg := distro - testName := fmt.Sprintf("install_%s_%s", runtime.GOARCH, distroImg) - t.Run(testName, func(t *testing.T) { - // apt-get update; dpkg -i minikube_${ver}_${arch}.deb - t.Run("minikube", func(t *testing.T) { - for _, mkDeb := range mkDebs { - rr, err := dpkgInstall(ctx, t, distro, mkDeb) - if err != nil || rr.ExitCode != 0 { - t.Errorf("failed to install %q on %q: err=%v, exit=%d", - mkDeb, distroImg, err, rr.ExitCode) - } - } - }) - // apt-get update; apt-get install -y libvirt0; dpkg -i docker-machine-driver-kvm2_${ver}_${arch}.deb - t.Run("kvm2-driver", func(t *testing.T) { - for _, kvmDeb := range kvmDebs { - rr, err := dpkgInstallDriver(ctx, t, distro, kvmDeb) - if err != nil || rr.ExitCode != 0 { - t.Errorf("failed to install %q on %q: err=%v, exit=%d", - kvmDeb, distroImg, err, rr.ExitCode) - } - } - }) - }) - } -} - -func dpkgInstall(ctx context.Context, t *testing.T, image, deb string) (*RunResult, error) { - return Run(t, exec.CommandContext(ctx, - "docker", "run", "--rm", fmt.Sprintf("-v%s:/var/tmp", filepath.Dir(deb)), - image, - "sh", "-c", fmt.Sprintf("apt-get update; dpkg -i /var/tmp/%s", filepath.Base(deb)))) -} - -func dpkgInstallDriver(ctx context.Context, t *testing.T, image, deb string) (*RunResult, error) { - return Run(t, exec.CommandContext(ctx, - "docker", "run", "--rm", fmt.Sprintf("-v%s:/var/tmp", filepath.Dir(deb)), - image, - "sh", "-c", fmt.Sprintf("apt-get update; apt-get install -y libvirt0; dpkg -i /var/tmp/%s", filepath.Base(deb)))) -} diff --git a/test/integration/preload_test.go b/test/integration/preload_test.go index 1a6d0c8836b2..6ce94bfbc569 100644 --- a/test/integration/preload_test.go +++ b/test/integration/preload_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/scheduled_stop_test.go b/test/integration/scheduled_stop_test.go index b01bcca91383..b44a4771175a 100644 --- a/test/integration/scheduled_stop_test.go +++ b/test/integration/scheduled_stop_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* @@ -43,7 +44,7 @@ func TestScheduledStopWindows(t *testing.T) { t.Skip("test only runs on windows") } profile := UniqueProfileName("scheduled-stop") - ctx, cancel := context.WithTimeout(context.Background(), Minutes(5)) + ctx, cancel := context.WithTimeout(context.Background(), Minutes(6)) defer CleanupWithLogs(t, profile, cancel) startMinikube(ctx, t, profile) @@ -64,7 +65,7 @@ func TestScheduledStopWindows(t *testing.T) { stopMinikube(ctx, t, profile, []string{"--schedule", "5s"}) // wait for stop to complete - time.Sleep(15 * time.Second) + time.Sleep(time.Minute) // make sure minikube timetoStop is not present ensureTimeToStopNotPresent(ctx, t, profile) // make sure minikube status is "Stopped" diff --git a/test/integration/skaffold_test.go b/test/integration/skaffold_test.go index f801b6117c92..9a10f93c071c 100644 --- a/test/integration/skaffold_test.go +++ b/test/integration/skaffold_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/start_stop_delete_test.go b/test/integration/start_stop_delete_test.go index c756965d0376..3b00b5d6ed6a 100644 --- a/test/integration/start_stop_delete_test.go +++ b/test/integration/start_stop_delete_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/status_test.go b/test/integration/status_test.go index 3b78642a96c8..924d69e545c5 100644 --- a/test/integration/status_test.go +++ b/test/integration/status_test.go @@ -1,3 +1,4 @@ +//go:build integration // +build integration /* diff --git a/test/integration/testdata/ingress-dns-example.yaml b/test/integration/testdata/ingress-dns-example.yaml new file mode 100644 index 000000000000..a4f7d196ec40 --- /dev/null +++ b/test/integration/testdata/ingress-dns-example.yaml @@ -0,0 +1,87 @@ +# Copyright 2021 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. + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello-world-app + namespace: default +spec: + selector: + matchLabels: + app: hello-world-app + template: + metadata: + labels: + app: hello-world-app + spec: + containers: + - name: hello-world-app + image: gcr.io/google-samples/hello-app:1.0 + ports: + - containerPort: 8080 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: example-ingress + namespace: kube-system +spec: + ingressClassName: nginx + rules: + - host: hello-john.test + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: hello-world-app + port: + number: 80 + - host: hello-jane.test + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: hello-world-app + port: + number: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-world-app + namespace: kube-system +spec: + type: ExternalName + externalName: hello-world-app.default.svc.cluster.local +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-world-app + namespace: default +spec: + ports: + - name: http + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: hello-world-app diff --git a/translations/de.json b/translations/de.json index 79b79eac6fdb..84f72afa84cc 100644 --- a/translations/de.json +++ b/translations/de.json @@ -69,6 +69,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", @@ -79,6 +80,7 @@ "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "", "Cannot use both --output and --format options": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "", @@ -102,6 +104,7 @@ "Connect to LoadBalancer services": "", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", "Consider increasing Docker Desktop's memory size.": "", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", @@ -157,6 +160,7 @@ "Downloading VM boot image ...": "", "Downloading driver {{.driver}}:": "", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", @@ -258,6 +262,7 @@ "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "", "Failed to save dir": "", "Failed to save image": "", @@ -344,7 +349,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Unsichere Docker-Registrys, die an den Docker-Daemon übergeben werden. Der CIDR-Bereich des Standarddienstes wird automatisch hinzugefügt.", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", @@ -407,7 +411,7 @@ "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", "Number of CPUs allocated to the minikube VM": "Anzahl der CPUs, die der minikube-VM zugeordnet sind", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", "One of 'text', 'yaml' or 'json'.": "", @@ -431,7 +435,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "", @@ -446,6 +450,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -621,6 +626,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "Der Überwachungsport des API-Servers", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Der API-Servername, der im generierten Zertifikat für Kubernetes verwendet wird. Damit kann der API-Server von außerhalb des Computers verfügbar gemacht werden.", "The argument to pass the minikube mount command on start": "Das Argument, um den Bereitstellungsbefehl für minikube beim Start zu übergeben", @@ -656,6 +662,7 @@ "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The name of the network plugin": "Der Name des Netzwerk-Plugins", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -793,7 +800,6 @@ "VM driver is one of: %v": "VM-Treiber ist einer von: %v", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "", "Verifying dashboard health ...": "", @@ -822,6 +828,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Möglicherweise müssen Sie die VM \"{{.name}}\" manuell von Ihrem Hypervisor entfernen", @@ -955,6 +962,7 @@ "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", "{{.name}} doesn't have images.": "", "{{.name}} has following images:": "", diff --git a/translations/es.json b/translations/es.json index 1c3db32d9b2a..d4b17ff9c4eb 100644 --- a/translations/es.json +++ b/translations/es.json @@ -70,6 +70,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Plug-in CNI para usar. Opciones validas: auto, bridge, calico, cilium, flannel, kindnet, o ruta a un manifiesto CNI (Por defecto: auto)", @@ -80,6 +81,7 @@ "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "No se pudo encontrar el directorio {{.path}} para montar", "Cannot use both --output and --format options": "No se pueden usar ambas opciones (--output y --path)", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "Comprueba si tienes pods innecesarios corriendo, con el comando 'kubectl get pods -A'", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Comprueba la salida de 'journalctl -xeu kubelet', intenta pasar --extra-config=kubelet.cgroup-driver=systemd a minikube start", "Check that libvirt is setup properly": "Comprueba que libvirt esté configurado correctamente", @@ -103,6 +105,7 @@ "Connect to LoadBalancer services": "Conectar a los servicios LoadBalancer", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Considera crear un cluster con más memoria usando `minikube start --memory CANT_MB`", "Consider increasing Docker Desktop's memory size.": "Considera incrementar la memoria asignada a Docker Desktop", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", @@ -162,6 +165,7 @@ "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "Debido a las limitaciones de red del controlador {{.driver_name}} en {{.os_name}}, el complemento \"{{.addon_name}}\" no está soportado.\nPara usar este complemento, puedes utilizar un controlador basado en vm\n\n\t'minikube start --vm=true'\n\nPara realizar un seguimiento de las actualizaciones de esta función consulte:\nhttps://github.com/kubernetes/minikube/issues/7332", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not supported. Try using a different driver.": "Debido a limitaciones de red del controlador {{.driver_name}}, el complemento \"{{.addon_name}}\" no está soportado. Intenta usar un controlador diferente.", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "ERROR creando el secreto `registry-creds-acr`", "ERROR creating `registry-creds-dpr` secret": "ERROR creando el secreto `registry-creds-dpr`", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ERROR creando el secreto `registry-creds-ecr`: {{.error}}", @@ -264,6 +268,7 @@ "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "", "Failed to save dir": "", "Failed to save image": "", @@ -350,7 +355,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registros de Docker que no son seguros y que se transferirán al daemon de Docker. Se añadirá automáticamente el intervalo CIDR de servicio predeterminado.", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", @@ -413,7 +417,7 @@ "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", "Number of CPUs allocated to the minikube VM": "Número de CPU asignadas a la VM de minikube", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", "One of 'text', 'yaml' or 'json'.": "", @@ -437,7 +441,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "", @@ -452,6 +456,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -627,6 +632,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "El puerto de escucha del apiserver", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "El nombre del apiserver del certificado de Kubernetes generado. Se puede utilizar para que sea posible acceder al apiserver desde fuera de la máquina", "The argument to pass the minikube mount command on start": "El argumento para ejecutar el comando de activación de minikube durante el inicio", @@ -662,6 +668,7 @@ "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The name of the network plugin": "El nombre del complemento de red", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -799,7 +806,6 @@ "VM driver is one of: %v": "El controlador de la VM es uno de los siguientes: %v", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "", "Verifying dashboard health ...": "", @@ -828,6 +834,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Puede que tengas que retirar manualmente la VM \"{{.name}}\" de tu hipervisor", @@ -961,6 +968,7 @@ "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", "{{.name}} doesn't have images.": "", "{{.name}} has following images:": "", diff --git a/translations/fr.json b/translations/fr.json index 5f3e35c33a04..ece72517baa5 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -71,16 +71,18 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "Le pont CNI est incompatible avec les clusters multi-nœuds, utilisez un autre CNI", "Build a container image in minikube": "Construire une image de conteneur dans minikube", "Build a container image, using the container runtime.": "Construire une image de conteneur à l'aide de l'environnement d'exécution du conteneur.", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "L'allocation CGroup n'est pas disponible dans votre environnement, vous exécutez peut-être minikube dans un conteneur imbriqué. Essayez d'exécuter :\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "L'allocation CGroup n'est pas disponible dans votre environnement, vous exécutez peut-être minikube dans un conteneur imbriqué. Essayez d'exécuter :\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Plug-in CNI à utiliser. Options valides : auto, bridge, calico, cilium, flannel, kindnet ou chemin vers un manifeste CNI (par défaut : auto)", "Cache image from docker daemon": "Cacher l'image du démon docker", "Cache image from remote registry": "Cacher l'image du registre distant", - "Cache image to docker daemon": "", - "Cache image to remote registry": "", + "Cache image to docker daemon": "Cacher l'image dans le démon docker", + "Cache image to remote registry": "Cacher l'image dans le registre distant", "Cannot find directory {{.path}} for copy": "Impossible de trouver le répertoire {{.path}} pour la copie", "Cannot find directory {{.path}} for mount": "Impossible de trouver le répertoire {{.path}} pour le montage", "Cannot use both --output and --format options": "Impossible d'utiliser à la fois les options --output et --format", + "Certificate {{.certPath}} has expired. Generating a new one...": "Le certificat {{.certPath}} a expiré. Génération d'un nouveau...", "Check if you have unnecessary pods running by running 'kubectl get po -A": "Vérifiez si vous avez des pods inutiles en cours d'exécution en exécutant 'kubectl get po -A'", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Vérifiez la sortie de 'journalctl -xeu kubelet', essayez de passer --extra-config=kubelet.cgroup-driver=systemd au démarrage de minikube", "Check that libvirt is setup properly": "Vérifiez que libvirt est correctement configuré", @@ -105,6 +107,7 @@ "Connect to LoadBalancer services": "Se connecter aux services LoadBalancer", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Envisagez de créer un cluster avec une plus grande taille de mémoire en utilisant `minikube start --memory SIZE_MB`", "Consider increasing Docker Desktop's memory size.": "Envisagez d'augmenter la taille de la mémoire de Docker Desktop.", + "Container runtime must be set to \\\"containerd\\\" for rootless": "L'environnement d'exécution du conteneur doit être défini sur \\\"containerd\\\" pour utilisateur normal", "Continuously listing/getting the status with optional interval duration.": "Répertorier/obtenir le statut en continu avec une durée d'intervalle facultative.", "Control Plane could not update, try minikube delete --all --purge": "Le plan de contrôle n'a pas pu mettre à jour, essayez minikube delete --all --purge", "Copy the specified file into minikube": "Copiez le fichier spécifié dans minikube", @@ -160,6 +163,7 @@ "Downloading driver {{.driver}}:": "Téléchargement du pilote {{.driver}} :", "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "En raison des limitations réseau du pilote {{.driver_name}} sur {{.os_name}}, le module {{.addon_name}} n'est pas pris en charge.\nAlternativement, pour utiliser ce module, vous pouvez utiliser un pilote basé sur vm :\n\n \t'minikube start --vm=true'\n\nPour suivre la mise à jour de cette fonctionnalité en cours de travail, veuillez vérifier :\nhttps://github.com/kubernetes/minikube/issues/7332", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "En raison des limitations réseau du pilote {{.driver_name}}, le module {{.addon_name}} n'est pas entièrement pris en charge. Essayez d'utiliser un autre pilote.", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "Durée jusqu'à l'expiration du certificat minikube, par défaut à trois ans (26280h).", "ERROR creating `registry-creds-acr` secret": "ERREUR lors de la création du secret `registry-creds-acr`", "ERROR creating `registry-creds-dpr` secret": "ERREUR lors de la création du secret `registry-creds-dpr`", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ERREUR lors de la création du secret `registry-creds-ecr` : {{.error}}", @@ -250,21 +254,22 @@ "Failed to get command runner": "Impossible d'obtenir le lanceur de commandes", "Failed to get image map": "Échec de l'obtention de la carte d'image", "Failed to get service URL: {{.error}}": "Échec de l'obtention de l'URL du service : {{.error}}", - "Failed to get temp": "", + "Failed to get temp": "Impossible d'obtenir le répertoire temporaire", "Failed to kill mount process: {{.error}}": "Échec de l'arrêt du processus d'installation : {{.error}}", "Failed to list cached images": "Échec de l'obtention de la liste des images mises en cache", "Failed to list images": "Échec de l'obtention de la liste des images", "Failed to load image": "Échec du chargement de l'image", "Failed to persist images": "Échec de la persistance des images", "Failed to pull image": "Échec de l'extraction de l'image", - "Failed to pull images": "", - "Failed to push images": "", - "Failed to read temp": "", + "Failed to pull images": "Échec de l'extraction des images", + "Failed to push images": "Échec de la diffusion des images", + "Failed to read temp": "Échec de la lecture du répertoire temporaire", "Failed to reload cached images": "Échec du rechargement des images mises en cache", "Failed to remove image": "Échec de la suppression de l'image", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "Échec de l'enregistrement de la configuration {{.profile}}", "Failed to save dir": "Échec de l'enregistrement du répertoire", - "Failed to save image": "", + "Failed to save image": "Échec de l'enregistrement de l'image", "Failed to save stdin": "Échec de l'enregistrement de l'entrée standard", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "Échec de la définition la variable d'environnement NO_PROXY. Veuillez utiliser `export NO_PROXY=$NO_PROXY,{{.ip}}.", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "Échec de la définition de la variable d'environnement NO_PROXY. Veuillez utiliser `export NO_PROXY=$NO_PROXY,{{.ip}}`.", @@ -272,7 +277,7 @@ "Failed to start container runtime": "Échec du démarrage de l'exécution du conteneur", "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "Échec du démarrage de {{.driver}} {{.driver_type}}. L'exécution de \"{{.cmd}}\" peut résoudre le problème : {{.error}}", "Failed to stop node {{.name}}": "Échec de l'arrêt du nœud {{.name}}", - "Failed to tag images": "", + "Failed to tag images": "Échec du marquage des images", "Failed to update cluster": "Échec de la mise à jour du cluster", "Failed to update config": "Échec de la mise à jour de la configuration", "Failed to verify '{{.driver_name}} info' will try again ...": "Échec de la vérification des informations sur '{{.driver_name}}' va réessayer ...", @@ -413,6 +418,7 @@ "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "Vous avez remarqué que vous avez un docker-env activé sur le pilote {{.driver_name}} dans ce terminal :", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "Vous avez remarqué que vous avez un pilote podman-env activé sur {{.driver_name}} dans ce terminal :", "Number of CPUs allocated to the minikube VM": "Nombre de processeurs alloués à la VM minikube.", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "Nombre de disques supplémentaires créés et attachés à la machine virtuelle minikube (actuellement implémenté uniquement pour les pilotes hyperkit et kvm2)", "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "Nombre de disques supplémentaires créés et attachés à la machine virtuelle minikube (actuellement implémenté uniquement pour le pilote hyperkit)", "Number of lines back to go within the log": "Nombre de lignes à remonter dans le journal", "OS release is {{.pretty_name}}": "La version du système d'exploitation est {{.pretty_name}}", @@ -437,6 +443,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "{{.count}} conteneurs suspendus dans : {{.namespaces}}", "Pausing node {{.name}} ... ": "Suspendre le nœud {{.name}} ...", "Permissions: {{.octalMode}} ({{.writtenMode}})": "Autorisations : {{.octalMode}} ({{.writtenMode}})", + "Please also attach the following file to the GitHub issue:": "Veuillez également joindre le fichier suivant au problème GitHub", "Please attach the following file to the GitHub issue:": "Veuillez joindre le fichier suivant au problème GitHub :", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Veuillez créer un cluster avec une plus grande taille de disque : `minikube start --disk SIZE_MB`", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Veuillez vous authentifier auprès du registre ou utiliser l'indicateur --base-image pour utiliser un registre différent.", @@ -447,11 +454,12 @@ "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Veuillez installer le pilote minikube kvm2 VM, ou sélectionnez un --driver alternatif", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Veuillez vous assurer que le service que vous recherchez est déployé ou se trouve dans le bon espace de noms.", "Please provide a path or url to build": "Veuillez fournir un chemin ou une URL à construire", - "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "Veuillez fournir une image dans l'environnement d'exécution du conteneur à enregistrer à partir de minikube via \u003cminikube image save IMAGE_NAME\u003e", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "Veuillez fournir une image dans votre démon local à charger dans minikube via \u003cminikube image load IMAGE_NAME\u003e", - "Please provide source and target image": "", + "Please provide source and target image": "Veuillez fournir l'image source et cible", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "Veuillez réévaluer votre docker-env, pour vous assurer que vos variables d'environnement ont des ports mis à jour :\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "Veuillez réévaluer votre podman-env, pour vous assurer que vos variables d'environnement ont des ports mis à jour :\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "Veuillez exécuter `minikube logs --file=logs.txt` et attachez logs.txt au problème GitHub.", "Please see {{.documentation_url}} for more details": "Veuillez consulter {{.documentation_url}} pour plus de détails", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Veuillez spécifier le répertoire à monter : \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (exemple : \"/host-home:/vm-home\")", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Veuillez spécifier le chemin à copier : \n\tminikube cp \u003cchemin du fichier source\u003e \u003cchemin absolu du fichier cible\u003e (exemple : \"minikube cp a/b.txt /copied.txt\")", @@ -475,11 +483,11 @@ "Profile name '{{.profilename}}' is not valid": "Le nom de profil '{{.profilename}}' n'est pas valide", "Profile name should be unique": "Le nom du profil doit être unique", "Provide VM UUID to restore MAC address (hyperkit driver only)": "Fournit l'identifiant unique universel (UUID) de la VM pour restaurer l'adresse MAC (pilote hyperkit uniquement).", - "Pull images": "", + "Pull images": "Extraction des images", "Pull the remote image (no caching)": "Extraire l'image distante (pas de mise en cache)", "Pulling base image ...": "Extraction de l'image de base...", "Pulling images ...": "Extraction des images... ", - "Push images": "", + "Push images": "Diffusion des images", "Push the new image (requires tag)": "Pousser la nouvelle image (nécessite une balise)", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "Redémarrez pour terminer l'installation de VirtualBox, vérifiez que VirtualBox n'est pas bloqué par votre système et/ou utilisez un autre hyperviseur", "Rebuild libvirt with virt-network support": "Reconstruire libvirt avec le support de virt-network", @@ -537,7 +545,7 @@ "SSH key (ssh driver only)": "Clé SSH (pilote ssh uniquement)", "SSH port (ssh driver only)": "Port SSH (pilote ssh uniquement)", "SSH user (ssh driver only)": "Utilisateur SSH (pilote ssh uniquement)", - "Save a image from minikube": "", + "Save a image from minikube": "Enregistrer une image de minikube", "Select a valid value for --dnsdomain": "Sélectionnez une valeur valide pour --dnsdomain", "Send trace events. Options include: [gcp]": "Envoyer des événements de trace. Les options incluent : [gcp]", "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Le service '{{.service}}' n'a pas été trouvé dans l'espace de noms '{{.namespace}}'.\nVous pouvez sélectionner un autre espace de noms en utilisant 'minikube service {{.service}} -n \u003cnamespace\u003e'. Ou répertoriez tous les services à l'aide de 'minikube service list'", @@ -600,7 +608,7 @@ "Successfully stopped node {{.name}}": "Nœud {{.name}} arrêté avec succès", "Suggestion: {{.advice}}": "Suggestion : {{.advice}}", "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Le système n'a que {{.size}} Mio disponibles, moins que les {{.req}} Mio requis pour Kubernetes", - "Tag images": "", + "Tag images": "Marquer des images", "Tag to apply to the new image (optional)": "Tag à appliquer à la nouvelle image (facultatif)", "Target directory {{.path}} must be an absolute path": "Le répertoire cible {{.path}} doit être un chemin absolu", "Target {{.path}} can not be empty": "La cible {{.path}} ne peut pas être vide", @@ -628,6 +636,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "Le pilote VM s'est terminé avec une erreur et est peut-être corrompu. Exécutez 'minikube start' avec --alsologtostderr -v=8 pour voir l'erreur", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "La machine virtuelle pour laquelle minikube est configuré n'existe plus. Exécutez 'minikube delete'", "The \\\"{{.name}}\\\" container runtime requires CNI": "L'environnement d'exécution du conteneur \\\"{{.name}}\\\" nécessite CNI", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "Le module Ambassador a cessé de fonctionner à partir de la v1.23.0, pour plus de détails, visitez : https://github.com/datawire/ambassador-operator/issues/73", "The apiserver listening port": "Port d'écoute du serveur d'API.", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Nom du serveur d'API utilisé dans le certificat généré pour Kubernetes. Vous pouvez l'utiliser si vous souhaitez que le serveur d'API soit disponible en dehors de la machine.", "The argument to pass the minikube mount command on start": "Argument à transmettre à la commande d'installation de minikube au démarrage.", @@ -663,6 +672,7 @@ "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "La version minimale requise pour podman est \"{{.minVersion}}\". votre version est \"{{.currentVersion}}\". minikube pourrait ne pas fonctionner. À utiliser à vos risques et périls. Pour installer la dernière version, veuillez consulter https://podman.io/getting-started/installation.html", "The name of the network plugin": "Nom du plug-in réseau.", "The named space to activate after start": "L'espace nommé à activer après le démarrage", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "Le nœud pour lequel vérifier l'état. La valeur par défaut est le plan de contrôle. Laissez vide avec le format par défaut pour l'état sur tous les nœuds.", "The node to get IP. Defaults to the primary control plane.": "Le nœud pour obtenir l'IP. La valeur par défaut est le plan de contrôle principal.", "The node to get logs from. Defaults to the primary control plane.": "Le nœud à partir duquel obtenir les journaux. La valeur par défaut est le plan de contrôle principal.", @@ -834,6 +844,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier les processeurs d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille du disque pour un cluster minikube existant. Veuillez d'abord supprimer le cluster.", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille de la mémoire d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de JSON associé. L'authentification GCP nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "Vous avez choisi de désactiver le CNI mais le runtime du conteneur \\\"{{.name}}\\\" nécessite CNI", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "Vous avez sélectionné le pilote \"virtualbox\", mais il existe de meilleures options !\nPour de meilleures performances et une meilleure assistance, envisagez d'utiliser un autre pilote: {{.drivers}}\n\nPour désactiver cet avertissement, exécutez :\n\n\t $ minikube config set WantVirtualBoxDriverWarning false\n\n\nPour en savoir plus sur les pilotes minikube, consultez https://minikube.sigs.k8s.io/docs/drivers/\nPour voir les benchmarks, consultez https://minikube.sigs.k8s. io/docs/benchmarks/cpuusage/\n\n", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Vous devrez peut-être supprimer la VM \"{{.name}}\" manuellement de votre hyperviseur.", @@ -883,7 +894,7 @@ "failed to add node": "échec de l'ajout du nœud", "failed to open browser: {{.error}}": "échec de l'ouverture du navigateur : {{.error}}", "failed to save config": "échec de l'enregistrement de la configuration", - "failed to set cloud shell kubelet config options": "", + "failed to set cloud shell kubelet config options": "échec de la définition des options de configuration cloud shell kubelet", "failed to start node": "échec du démarrage du nœud", "fish completion failed": "la complétion fish a échoué", "fish completion.": "complétion fish.", @@ -970,6 +981,7 @@ "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} dispose de moins de 2 processeurs disponibles, mais Kubernetes nécessite au moins 2 procésseurs pour fonctionner", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} ne dispose que de {{.container_limit}}Mo de mémoire, mais vous avez spécifié {{.specified_memory}}Mo", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} ne dispose que de {{.size}}Mio disponible, moins que les {{.req}}Mio requis pour Kubernetes", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "{{.extra_option_component_name}}.{{.key}}={{.value}}", "{{.name}} doesn't have images.": "{{.name}} n'a pas d'images.", "{{.name}} has following images:": "{{.name}} a les images suivantes :", diff --git a/translations/ja.json b/translations/ja.json index 3c8d2d6dcb3b..76d69183dc4b 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -69,6 +69,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", @@ -79,6 +80,7 @@ "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "マウントのためのディレクトリ{{.path}}が見つかりません", "Cannot use both --output and --format options": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "", @@ -102,6 +104,7 @@ "Connect to LoadBalancer services": "LoadBalancer サービスに接続します", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", "Consider increasing Docker Desktop's memory size.": "", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", @@ -154,6 +157,7 @@ "Downloading VM boot image ...": "VM ブートイメージをダウンロードしています...", "Downloading driver {{.driver}}:": "{{.driver}} ドライバをダウンロードしています:", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "`registry-creds-acr` シークレット作成中にエラーが発生しました", "ERROR creating `registry-creds-dpr` secret": "`registry-creds-dpr` シークレット作成中にエラーが発生しました", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "`registry-creds-ecr` シークレット作成中にエラーが発生しました。{{.error}}", @@ -252,6 +256,7 @@ "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "", "Failed to save dir": "", "Failed to save image": "", @@ -335,7 +340,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Docker デーモンに渡す Docker レジストリが安全ではありません。デフォルトのサービス CIDR 範囲が自動的に追加されます", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", @@ -403,7 +407,7 @@ "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", "Number of CPUs allocated to the minikube VM": "minikube VM に割り当てられた CPU の数", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "OS は {{.pretty_name}} です。", "One of 'text', 'yaml' or 'json'.": "", @@ -428,7 +432,7 @@ "Pausing node {{.name}} ...": "ノード {{.name}} を一時停止しています ...", "Pausing node {{.name}} ... ": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "", @@ -443,6 +447,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -621,6 +626,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "API サーバー リスニング ポート", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes 用に生成された証明書で使用される API サーバー名。マシンの外部から API サーバーを利用できるようにする場合に使用します", "The argument to pass the minikube mount command on start": "起動時に minikube マウント コマンドを渡す引数", @@ -656,6 +662,7 @@ "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The name of the network plugin": "ネットワーク プラグインの名前", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -827,6 +834,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "ハイパーバイザから「{{.name}}」VM を手動で削除することが必要な可能性があります", @@ -977,6 +985,7 @@ "{{.driver}} does not appear to be installed": "{{.driver}} がインストールされていないようです", "{{.driver}} does not appear to be installed, but is specified by an existing profile. Please run 'minikube delete' or install {{.driver}}": "{{.driver}} がインストールされていないようですが、既存のプロフィールから指定されています。「 minikube delete 」を実行、あるいは {{.driver}} をインストールしてください", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "{{.extra_option_component_name}}.{{.key}}={{.value}}", "{{.name}} doesn't have images.": "", "{{.name}} has following images:": "", diff --git a/translations/ko.json b/translations/ko.json index 7193f1085af9..192ddd1d06c0 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -74,6 +74,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "minikube 내 컨테이너 이미지를 빌드합니다", "Build a container image, using the container runtime.": "컨테이너 런타임을 사용하여 컨테이너 이미지를 빌드합니다.", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", @@ -84,6 +85,7 @@ "Cannot find directory {{.path}} for copy": "복사하기 위한 디렉토리 {{.path}} 를 찾을 수 없습니다.", "Cannot find directory {{.path}} for mount": "마운트하기 위한 디렉토리 {{.path}} 를 찾을 수 없습니다", "Cannot use both --output and --format options": "--output 과 --format 옵션을 함께 사용할 수 없습니다", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "", @@ -109,6 +111,7 @@ "Connect to LoadBalancer services": "", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", "Consider increasing Docker Desktop's memory size.": "", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", @@ -166,6 +169,7 @@ "Downloading driver {{.driver}}:": "드라이버 {{.driver}} 다운로드 중 :", "Downloading {{.name}} {{.version}}": "{{.name}} {{.version}} 다운로드 중", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "registry-creds-acr` secret 생성 오류", "ERROR creating `registry-creds-dpr` secret": "`registry-creds-dpr` secret 생성 오류", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "`registry-creds-ecr` secret 생성 오류: {{.error}}", @@ -279,6 +283,7 @@ "Failed to read temp": "", "Failed to reload cached images": "캐시된 이미지를 다시 불러오는 데 실패하였습니다", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config": "컨피그 저장에 실패하였습니다", "Failed to save config {{.profile}}": "", "Failed to save dir": "", @@ -366,7 +371,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", @@ -428,7 +432,7 @@ "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "", "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", "One of 'text', 'yaml' or 'json'.": "", @@ -452,7 +456,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "값을 입력하세요", @@ -467,6 +471,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -510,7 +515,6 @@ "Removing {{.directory}} ...": "{{.directory}} 제거 중 ...", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", @@ -639,6 +643,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "API 서버 수신 포트", "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", @@ -667,6 +672,7 @@ "The minikube {{.driver_name}} container exited unexpectedly.": "", "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -799,7 +805,6 @@ "Using the {{.driver}} driver based on user configuration": "유저 환경 설정 정보에 기반하여 {{.driver}} 드라이버를 사용하는 중", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "Kubernetes 구성 요소를 확인...", "Verifying dashboard health ...": "", @@ -829,6 +834,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", @@ -972,6 +978,7 @@ "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} does not appear to be installed": "{{.driver}} 가 설치되지 않았습니다", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", "{{.name}} cluster does not exist": "{{.name}} 클러스터가 존재하지 않습니다", "{{.name}} doesn't have images.": "{{.name}} 이미지가 없습니다.", diff --git a/translations/pl.json b/translations/pl.json index a5d9f3016717..3c3f488c4ee3 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -71,6 +71,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "Zbuduj obraz kontenera w minikube", "Build a container image, using the container runtime.": "Zbuduj obraz kontenera używając środowiska uruchomieniowego kontenera", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", @@ -81,6 +82,7 @@ "Cannot find directory {{.path}} for copy": "Nie znaleziono katalogu {{.path}} do skopiowania", "Cannot find directory {{.path}} for mount": "Nie można odnaleźć folderu {{.path}} do zamontowania", "Cannot use both --output and --format options": "Nie można użyć obydwu opcji --output i --format jednocześnie", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "Sprawdź czy są uruchomione jakieś niepotrzebne pody za pomocą komendy: 'kubectl get pod -A' ", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "Sprawdź czy bibliteka libvirt jest poprawnie zainstalowana", @@ -106,6 +108,7 @@ "Connect to LoadBalancer services": "Połącz się do serwisów LoadBalancer'a", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", "Consider increasing Docker Desktop's memory size.": "Rozważ przydzielenie większej ilości pamięci RAM dla programu Docker Desktop", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "Skopiuj dany plik do minikube", @@ -166,6 +169,7 @@ "Downloading driver {{.driver}}:": "", "Downloading {{.name}} {{.version}}": "Pobieranie {{.name}} {{.version}}", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", @@ -266,6 +270,7 @@ "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to remove profile": "Usunięcie profilu nie powiodło się", "Failed to save config": "Zapisywanie konfiguracji nie powiodło się", "Failed to save config {{.profile}}": "", @@ -353,7 +358,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Invalid size passed in argument: {{.error}}": "Nieprawidłowy rozmiar przekazany w argumencie: {{.error}}", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", @@ -420,7 +424,7 @@ "Number of CPUs allocated to Kubernetes.": "Liczba procesorów przypisana do Kubernetesa", "Number of CPUs allocated to the minikube VM": "Liczba procesorów przypisana do maszyny wirtualnej minikube", "Number of CPUs allocated to the minikube VM.": "Liczba procesorów przypisana do maszyny wirtualnej minikube", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "Wersja systemu operacyjnego to {{.pretty_name}}", "One of 'text', 'yaml' or 'json'.": "", @@ -445,6 +449,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "Zatrzymane kontenery: {{.count}} w przestrzeniach nazw: {{.namespaces}}", "Pausing node {{.name}} ... ": "Zatrzymywanie węzła {{.name}} ... ", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", + "Please also attach the following file to the GitHub issue:": "", "Please attach the following file to the GitHub issue:": "Dołącz następujący plik do zgłoszenia problemu na GitHubie:", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Utwórz klaster z większym rozmiarem dysku: `minikube start --disk SIZE_MB`", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Uwierzytelnij się w rejestrze lub użyć flagi --base-image w celu użycia innego rejestru.", @@ -460,6 +465,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "Zobacz {{.documentation_url}} żeby uzyskać więcej informacji", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Sprecyzuj katalog, który ma być zamontowany: \n\tminikube mount \u003ckatalog źródłowy\u003e:\u003ckatalog docelowy\u003e (przykład: \"/host-home:/vm-home\")", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -506,7 +512,6 @@ "Removing {{.directory}} ...": "", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", @@ -641,6 +646,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "API nasłuchuje na porcie:", "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", @@ -675,6 +681,7 @@ "The name of the network plugin": "Nazwa pluginu sieciowego", "The name of the network plugin.": "Nazwa pluginu sieciowego", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -807,7 +814,6 @@ "VM driver is one of: %v": "Sterownik wirtualnej maszyny to jeden z: %v", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Zweryfikuj czy zmienne HTTP_PROXY i HTTPS_PROXY są ustawione poprawnie", "Verify the IP address of the running cluster in kubeconfig.": "Weryfikacja adresu IP działającego klastra w kubeconfig", "Verifying Kubernetes components...": "", @@ -838,6 +844,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", @@ -974,6 +981,7 @@ "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "sterownik {{.driver}} ma tylko {{.size}}MiB dostępnej przestrzeni dyskowej, to mniej niż wymagane {{.req}}MiB dla Kubernetesa", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", "{{.name}} cluster does not exist": "Klaster {{.name}} nie istnieje", "{{.name}} doesn't have images.": "{{.name}} nie ma obrazów.", diff --git a/translations/strings.txt b/translations/strings.txt index e2759bcd63eb..1459f5f1f06f 100644 --- a/translations/strings.txt +++ b/translations/strings.txt @@ -65,6 +65,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", @@ -75,6 +76,7 @@ "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "", "Cannot use both --output and --format options": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "", @@ -98,6 +100,7 @@ "Connect to LoadBalancer services": "", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", "Consider increasing Docker Desktop's memory size.": "", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", @@ -149,6 +152,7 @@ "Downloading VM boot image ...": "", "Downloading driver {{.driver}}:": "", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", @@ -243,6 +247,7 @@ "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "", "Failed to save dir": "", "Failed to save image": "", @@ -323,7 +328,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", @@ -382,7 +386,7 @@ "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "", "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", "One of 'text', 'yaml' or 'json'.": "", @@ -406,7 +410,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "", @@ -421,6 +425,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -464,7 +469,6 @@ "Removing {{.directory}} ...": "", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", @@ -586,6 +590,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "", "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", @@ -614,6 +619,7 @@ "The minikube {{.driver_name}} container exited unexpectedly.": "", "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -740,7 +746,6 @@ "Using the {{.driver}} driver based on user configuration": "", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "", "Verifying dashboard health ...": "", @@ -767,6 +772,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", @@ -900,6 +906,7 @@ "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", "{{.name}} doesn't have images.": "", "{{.name}} has following images:": "", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 7fbfaf21e285..6a1aae7ad4e9 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -85,6 +85,7 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", @@ -95,6 +96,7 @@ "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "找不到用来挂载的 {{.path}} 目录", "Cannot use both --output and --format options": "不能同时使用 --output 和 --format 选项", + "Certificate {{.certPath}} has expired. Generating a new one...": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "检查 'journalctl -xeu kubelet' 的输出,尝试启动 minikube 时添加参数 --extra-config=kubelet.cgroup-driver=systemd", "Check that SELinux is disabled, and that the provided apiserver flags are valid": "检查 SELinux 是否禁用,且提供的 apiserver 标志是否有效", @@ -125,6 +127,7 @@ "Connect to LoadBalancer services": "连接到 LoadBalancer 服务", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", "Consider increasing Docker Desktop's memory size.": "", + "Container runtime must be set to \\\"containerd\\\" for rootless": "", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", @@ -191,6 +194,7 @@ "Downloading driver {{.driver}}:": "正在下载驱动 {{.driver}}:", "Downloading {{.name}} {{.version}}": "正在下载 {{.name}} {{.version}}", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "", "ERROR creating `registry-creds-dpr` secret": "创建 `registry-creds-dpr` secret 时出错", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "创建 `registry-creds-ecr` secret 时出错:{{.error}}", @@ -329,6 +333,7 @@ "Failed to read temp": "", "Failed to reload cached images": "重新加载缓存镜像失败", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to remove profile": "无法删除配置文件", "Failed to save config": "无法保存配置", "Failed to save config {{.profile}}": "", @@ -425,7 +430,6 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "传递给 Docker 守护进程的不安全 Docker 注册表。系统会自动添加默认服务 CIDR 范围。", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", @@ -493,7 +497,7 @@ "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", "Number of CPUs allocated to the minikube VM": "分配给 minikube 虚拟机的 CPU 的数量", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", "One of 'text', 'yaml' or 'json'.": "", @@ -519,7 +523,7 @@ "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "权限: {{.octalMode}} ({{.writtenMode}})", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "请输入一个值:", @@ -534,6 +538,7 @@ "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", @@ -728,6 +733,7 @@ "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "apiserver 侦听端口", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "在为 kubernetes 生成的证书中使用的 apiserver 名称。如果您希望将此 apiserver 设置为可从机器外部访问,则可以使用这组 apiserver 名称", "The argument to pass the minikube mount command on start": "用于在启动时传递 minikube 装载命令的参数", @@ -763,6 +769,7 @@ "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The name of the network plugin": "网络插件的名称", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -908,7 +915,6 @@ "VM may be unable to resolve external DNS records": "虚拟机可能无法解析外部 DNS 记录", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "验证是否正确设置了 HTTP_PROXY 和 HTTPS_PROXY 环境变量。", "Verify the IP address of the running cluster in kubeconfig.": "在 kubeconfig 中验证正在运行的集群 IP 地址。", "Verifying Kubernetes components...": "", @@ -943,6 +949,7 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "", "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "您可能需要从管理程序中手动移除“{{.name}}”虚拟机", @@ -1084,6 +1091,7 @@ "{{.driver}} does not appear to be installed": "似乎并未安装 {{.driver}}", "{{.driver}} does not appear to be installed, but is specified by an existing profile. Please run 'minikube delete' or install {{.driver}}": "似乎并未安装 {{.driver}},但已被当前的配置文件指定。请执行 'minikube delete' 或者安装 {{.driver}}", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.err}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", "{{.name}} doesn't have images.": "", "{{.name}} has following images:": "",