From 63f0f8774b7903f46d18b80f6b3348490fa2e109 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Fri, 21 May 2021 16:11:00 -0700 Subject: [PATCH 001/153] Create script to collect log data. --- hack/test-flake-chart/collect_data.sh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100755 hack/test-flake-chart/collect_data.sh diff --git a/hack/test-flake-chart/collect_data.sh b/hack/test-flake-chart/collect_data.sh new file mode 100755 index 000000000000..1707ab302829 --- /dev/null +++ b/hack/test-flake-chart/collect_data.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Create temp path for partial data (storing everything but the commit date.) +PARTIAL_DATA_PATH=$(mktemp) +# Write +echo "Partial path: $PARTIAL_DATA_PATH" 1>&2 + +# Print header. +printf "Commit Hash,Commit Date,Environment,Test,Status\n" + +# 1) "cat" together all summary files. +# 2) Turn each test in each summary file to a CSV line containing its commit hash, environment, test, and status. +# 3) Copy partial data to $PARTIAL_DATA_PATH to join with date later. +# 4) Extract only commit hash for each row +# 5) Make the commit hashes unique (we assume that gsutil cats files from the same hash next to each other). +# Also force buffering to occur per line so remainder of pipe can continue to process. +# 6) Execute git log for each commit to get the date of each. +# 7) Join dates with test data. +gsutil cat gs://minikube-builds/logs/master/*/*_summary.json \ +| jq -r '({commit: .Detail.Details, environment: .Detail.Name, test: .PassedTests[]?, status: "Passed"},{commit: .Detail.Details, environment: .Detail.Name, test: .FailedTests[]?, status: "Failed"},{commit: .Detail.Details, environment: .Detail.Name, test: .SkippedTests[]?, status: "Skipped"}) | .commit + "," + .environment + "," + .test + "," + .status' \ +| tee $PARTIAL_DATA_PATH \ +| sed -r -n 's/^([^,]+),.*/\1/p' \ +| stdbuf -oL -eL uniq \ +| xargs -I {} git log -1 --pretty=format:"{},%as%n" {} \ +| join -t "," - $PARTIAL_DATA_PATH From abdbfa63b60b5442a72ec1a15a12770f2d70c662 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 24 May 2021 11:15:56 -0700 Subject: [PATCH 002/153] Create initial HTML and JS for flake rate site. --- hack/test-flake-chart/flake_chart.html | 10 ++++++++++ hack/test-flake-chart/flake_chart.js | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 hack/test-flake-chart/flake_chart.html create mode 100644 hack/test-flake-chart/flake_chart.js diff --git a/hack/test-flake-chart/flake_chart.html b/hack/test-flake-chart/flake_chart.html new file mode 100644 index 000000000000..333b61f4cf22 --- /dev/null +++ b/hack/test-flake-chart/flake_chart.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js new file mode 100644 index 000000000000..274a7429b95f --- /dev/null +++ b/hack/test-flake-chart/flake_chart.js @@ -0,0 +1,18 @@ + +function displayError(message) { + console.error(message); +} + +async function init() { + const response = await fetch("content.txt"); + if (!response.ok) { + const responseText = await response.text(); + displayError(`Failed to fetch data from GCS bucket. Error: ${responseText}`); + return; + } + + const responseText = await response.text(); + console.log(responseText); +} + +init(); From b33e27243501ae755298ed15cd28bf67460fc56a Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 24 May 2021 13:20:20 -0700 Subject: [PATCH 003/153] Create basic parsing of CSV test data. --- hack/test-flake-chart/flake_chart.js | 68 ++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index 274a7429b95f..f82339459837 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -1,18 +1,80 @@ +// Displays an error message to the UI. Any previous message will be erased. function displayError(message) { console.error(message); } +// Creates a generator that reads the response body one line at a time. +async function* bodyByLinesIterator(response) { + // TODO: Replace this with something that actually reads the body line by line + // (since the file can be big). + const lines = (await response.text()).split("\n"); + for (let line of lines) { + // Skip any empty lines (most likely at the end). + if (line !== "") { + yield line; + } + } +} + +// Determines whether `str` matches at least one value in `enumObject`. +function isValidEnumValue(enumObject, str) { + for (const enumKey in enumObject) { + if (enumObject[enumKey] === str) { + return true; + } + } + return false; +} + +// Enum for test status. +const testStatus = { + PASSED: "Passed", + FAILED: "Failed", + SKIPPED: "Skipped" +} + async function init() { - const response = await fetch("content.txt"); + const response = await fetch("data.csv"); if (!response.ok) { const responseText = await response.text(); displayError(`Failed to fetch data from GCS bucket. Error: ${responseText}`); return; } - const responseText = await response.text(); - console.log(responseText); + const lines = bodyByLinesIterator(response); + // Consume the header to ensure the data has the right number of fields. + const header = (await lines.next()).value; + if (header.split(",").length != 5) { + displayError(`Fetched CSV data contains wrong number of fields. Expected: 5. Actual Header: "${header}"`); + return; + } + + const testData = []; + for await (const line of lines) { + const splitLine = line.split(","); + if (splitLine.length != 5) { + console.warn(`Found line with wrong number of fields. Actual: ${splitLine.length} Expected: 5. Line: "${line}"`); + continue; + } + if (!isValidEnumValue(testStatus, splitLine[4])) { + console.warn(`Invalid test status provided. Actual: ${splitLine[4]} Expected: One of ${Object.values(testStatus).join(", ")}`); + continue; + } + testData.push({ + commit: splitLine[0], + date: new Date(splitLine[1]), + environment: splitLine[2], + name: splitLine[3], + status: splitLine[4] + }); + } + if (testData.length == 0) { + displayError("Fetched CSV data is empty or poorly formatted."); + return; + } + + console.log(testData); } init(); From b45b4c9a0bdb6ffb2fe945a5557b2fac2f033678 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 25 May 2021 13:19:03 -0700 Subject: [PATCH 004/153] Include Google Charts. Refactor to wait for Google Charts and test data loading at the same time. --- hack/test-flake-chart/flake_chart.html | 1 + hack/test-flake-chart/flake_chart.js | 27 +++++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/hack/test-flake-chart/flake_chart.html b/hack/test-flake-chart/flake_chart.html index 333b61f4cf22..5299da4a134a 100644 --- a/hack/test-flake-chart/flake_chart.html +++ b/hack/test-flake-chart/flake_chart.html @@ -1,6 +1,7 @@ + diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index f82339459837..08fc48ec0d70 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -34,20 +34,18 @@ const testStatus = { SKIPPED: "Skipped" } -async function init() { +async function loadTestData() { const response = await fetch("data.csv"); if (!response.ok) { const responseText = await response.text(); - displayError(`Failed to fetch data from GCS bucket. Error: ${responseText}`); - return; + throw `Failed to fetch data from GCS bucket. Error: ${responseText}`; } const lines = bodyByLinesIterator(response); // Consume the header to ensure the data has the right number of fields. const header = (await lines.next()).value; if (header.split(",").length != 5) { - displayError(`Fetched CSV data contains wrong number of fields. Expected: 5. Actual Header: "${header}"`); - return; + throw `Fetched CSV data contains wrong number of fields. Expected: 5. Actual Header: "${header}"`; } const testData = []; @@ -70,10 +68,25 @@ async function init() { }); } if (testData.length == 0) { - displayError("Fetched CSV data is empty or poorly formatted."); - return; + throw "Fetched CSV data is empty or poorly formatted."; } + return testData; +} +async function init() { + google.charts.load('current', {'packages': ['corechart']}); + let testData; + try { + // Wait for Google Charts to load, and for test data to load. + // Only store the test data (at index 1) into `testData`. + testData = (await Promise.all([ + new Promise(resolve => google.charts.setOnLoadCallback(resolve)), + loadTestData() + ]))[1]; + } catch(err) { + displayError(err); + return; + } console.log(testData); } From 328d54ef639decece23e59da61116738d36526a7 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 25 May 2021 16:20:56 -0700 Subject: [PATCH 005/153] Create first flake rate chart. --- hack/test-flake-chart/flake_chart.html | 2 +- hack/test-flake-chart/flake_chart.js | 71 ++++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/hack/test-flake-chart/flake_chart.html b/hack/test-flake-chart/flake_chart.html index 5299da4a134a..f39859daffae 100644 --- a/hack/test-flake-chart/flake_chart.html +++ b/hack/test-flake-chart/flake_chart.html @@ -4,7 +4,7 @@ - +
diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index 08fc48ec0d70..f042a2fdd1c0 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -74,7 +74,7 @@ async function loadTestData() { } async function init() { - google.charts.load('current', {'packages': ['corechart']}); + google.charts.load('current', { 'packages': ['corechart'] }); let testData; try { // Wait for Google Charts to load, and for test data to load. @@ -83,11 +83,76 @@ async function init() { new Promise(resolve => google.charts.setOnLoadCallback(resolve)), loadTestData() ]))[1]; - } catch(err) { + } catch (err) { displayError(err); return; } - console.log(testData); + + const data = new google.visualization.DataTable(); + data.addColumn('date', 'Date'); + data.addColumn('number', 'Flake Percentage'); + data.addColumn({ type: 'string', label: 'Commit Hash', role: 'tooltip', 'p': { 'html': true } }); + + const desiredTest = "TestFunctional/parallel/LogsCmd", desiredEnvironment = "Docker_Linux_containerd"; + + const average = arr => { + return arr.length === 0 ? 0 : arr.reduce((sum, value) => sum + value, 0) / arr.length; + }; + + const groups = + Array.from(testData + // Filter to only contain unskipped runs of the requested test and requested environment. + .filter(test => test.name === desiredTest && test.environment === desiredEnvironment && test.status !== testStatus.SKIPPED) + // Group by run date. + .reduce((groups, test) => { + // Convert Date to time number since hashing by Date does not work. + const dateValue = test.date.getTime(); + if (groups.has(dateValue)) { + groups.get(dateValue).push(test); + } else { + groups.set(dateValue, [test]); + } + return groups + }, new Map()) + // Get all entries (type of [[time number, [test]]]). + .entries() + ) + // Turn time number back to the corresponding Date. + .map(([dateValue, tests]) => ({ date: new Date(dateValue), tests })); + + data.addRows( + groups + // Sort by run date, past to future. + .sort((a, b) => a.date - b.date) + // Map each group to all variables need to format the rows. + .map(({ date, tests }) => ({ + date, // Turn time number back to corresponding date. + flakeRate: average(tests.map(test => test.status === testStatus.FAILED ? 100 : 0)), // Compute average of runs where FAILED counts as 100%. + commitHashes: tests.map(test => ({ hash: test.commit, status: test.status })) // Take all hashes and status' of tests in this group. + })) + .map(groupData => [ + groupData.date, + groupData.flakeRate, + `
+ ${groupData.date.toString()}
+ Flake Percentage: ${groupData.flakeRate.toFixed(2)}%
+ Hashes:
+ ${groupData.commitHashes.map(({ hash, status }) => ` - ${hash} (${status})`).join("
")} +
` + ]) + ); + + const options = { + title: `Flake Rate by day of ${desiredTest} on ${desiredEnvironment}`, + width: 900, + height: 500, + pointSize: 10, + pointShape: "circle", + vAxis: { minValue: 0, maxValue: 1 }, + tooltip: { trigger: "selection", isHtml: true } + }; + const chart = new google.visualization.LineChart(document.getElementById('chart_div')); + chart.draw(data, options); } init(); From 2e5ea59774fb5864dbc6cf85f2a3612473f2c694 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 26 May 2021 09:36:44 -0700 Subject: [PATCH 006/153] Refactor data cleaning. --- hack/test-flake-chart/flake_chart.js | 54 ++++++++++++++-------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index f042a2fdd1c0..58b119ea22b5 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -73,6 +73,24 @@ async function loadTestData() { return testData; } +// Computes the average of an array of numbers. +Array.prototype.average = function () { + return this.length === 0 ? 0 : this.reduce((sum, value) => sum + value, 0) / this.length; +}; + +// Groups array elements by keys obtained through `keyGetter`. +Array.prototype.groupBy = function (keyGetter) { + return Array.from(this.reduce((mapCollection, element) => { + const key = keyGetter(element); + if (mapCollection.has(key)) { + mapCollection.get(key).push(element); + } else { + mapCollection.set(key, [element]); + } + return mapCollection; + }, new Map()).values()); +}; + async function init() { google.charts.load('current', { 'packages': ['corechart'] }); let testData; @@ -95,39 +113,19 @@ async function init() { const desiredTest = "TestFunctional/parallel/LogsCmd", desiredEnvironment = "Docker_Linux_containerd"; - const average = arr => { - return arr.length === 0 ? 0 : arr.reduce((sum, value) => sum + value, 0) / arr.length; - }; - - const groups = - Array.from(testData - // Filter to only contain unskipped runs of the requested test and requested environment. - .filter(test => test.name === desiredTest && test.environment === desiredEnvironment && test.status !== testStatus.SKIPPED) - // Group by run date. - .reduce((groups, test) => { - // Convert Date to time number since hashing by Date does not work. - const dateValue = test.date.getTime(); - if (groups.has(dateValue)) { - groups.get(dateValue).push(test); - } else { - groups.set(dateValue, [test]); - } - return groups - }, new Map()) - // Get all entries (type of [[time number, [test]]]). - .entries() - ) - // Turn time number back to the corresponding Date. - .map(([dateValue, tests]) => ({ date: new Date(dateValue), tests })); + const groups = testData + // Filter to only contain unskipped runs of the requested test and requested environment. + .filter(test => test.name === desiredTest && test.environment === desiredEnvironment && test.status !== testStatus.SKIPPED) + .groupBy(test => test.date.getTime()); data.addRows( groups // Sort by run date, past to future. - .sort((a, b) => a.date - b.date) + .sort((a, b) => a[0].date - b[0].date) // Map each group to all variables need to format the rows. - .map(({ date, tests }) => ({ - date, // Turn time number back to corresponding date. - flakeRate: average(tests.map(test => test.status === testStatus.FAILED ? 100 : 0)), // Compute average of runs where FAILED counts as 100%. + .map(tests => ({ + date: tests[0].date, // Get one of the dates from the tests (which will all be the same). + flakeRate: tests.map(test => test.status === testStatus.FAILED ? 100 : 0).average(), // Compute average of runs where FAILED counts as 100%. commitHashes: tests.map(test => ({ hash: test.commit, status: test.status })) // Take all hashes and status' of tests in this group. })) .map(groupData => [ From b5151a6d89029ff5ea132d91b60411a62e8ef160 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 09:46:14 -0700 Subject: [PATCH 007/153] Add duration to data collection. --- hack/test-flake-chart/collect_data.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hack/test-flake-chart/collect_data.sh b/hack/test-flake-chart/collect_data.sh index 1707ab302829..392aeb7c9d2a 100755 --- a/hack/test-flake-chart/collect_data.sh +++ b/hack/test-flake-chart/collect_data.sh @@ -6,7 +6,7 @@ PARTIAL_DATA_PATH=$(mktemp) echo "Partial path: $PARTIAL_DATA_PATH" 1>&2 # Print header. -printf "Commit Hash,Commit Date,Environment,Test,Status\n" +printf "Commit Hash,Commit Date,Environment,Test,Status,Duration\n" # 1) "cat" together all summary files. # 2) Turn each test in each summary file to a CSV line containing its commit hash, environment, test, and status. @@ -17,7 +17,10 @@ printf "Commit Hash,Commit Date,Environment,Test,Status\n" # 6) Execute git log for each commit to get the date of each. # 7) Join dates with test data. gsutil cat gs://minikube-builds/logs/master/*/*_summary.json \ -| jq -r '({commit: .Detail.Details, environment: .Detail.Name, test: .PassedTests[]?, status: "Passed"},{commit: .Detail.Details, environment: .Detail.Name, test: .FailedTests[]?, status: "Failed"},{commit: .Detail.Details, environment: .Detail.Name, test: .SkippedTests[]?, status: "Skipped"}) | .commit + "," + .environment + "," + .test + "," + .status' \ +| jq -r '((.PassedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Passed"}), + (.FailedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Failed"}), + (.SkippedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: 0, status: "Skipped"})) + | .commit + "," + .environment + "," + .test + "," + .status + "," + (.duration | tostring)' \ | tee $PARTIAL_DATA_PATH \ | sed -r -n 's/^([^,]+),.*/\1/p' \ | stdbuf -oL -eL uniq \ From ae62edbd181694d4b052fb7e93142c141f84a2a7 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 10:17:29 -0700 Subject: [PATCH 008/153] Update JS to accept duration data. --- hack/test-flake-chart/flake_chart.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index 58b119ea22b5..462b8d813050 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -44,15 +44,15 @@ async function loadTestData() { const lines = bodyByLinesIterator(response); // Consume the header to ensure the data has the right number of fields. const header = (await lines.next()).value; - if (header.split(",").length != 5) { - throw `Fetched CSV data contains wrong number of fields. Expected: 5. Actual Header: "${header}"`; + if (header.split(",").length != 6) { + throw `Fetched CSV data contains wrong number of fields. Expected: 6. Actual Header: "${header}"`; } const testData = []; for await (const line of lines) { const splitLine = line.split(","); - if (splitLine.length != 5) { - console.warn(`Found line with wrong number of fields. Actual: ${splitLine.length} Expected: 5. Line: "${line}"`); + if (splitLine.length != 6) { + console.warn(`Found line with wrong number of fields. Actual: ${splitLine.length} Expected: 6. Line: "${line}"`); continue; } if (!isValidEnumValue(testStatus, splitLine[4])) { @@ -64,7 +64,8 @@ async function loadTestData() { date: new Date(splitLine[1]), environment: splitLine[2], name: splitLine[3], - status: splitLine[4] + status: splitLine[4], + duration: Number(splitLine[5]), }); } if (testData.length == 0) { From b55c6726ef5450090c76737c63628cbe019f49a3 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 10:18:26 -0700 Subject: [PATCH 009/153] Use URL search query to select test and environment. --- hack/test-flake-chart/flake_chart.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index 462b8d813050..43f686566965 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -92,6 +92,17 @@ Array.prototype.groupBy = function (keyGetter) { }, new Map()).values()); }; +// Parse URL search `query` into [{key, value}]. +function parseUrlQuery(query) { + if (query[0] === '?') { + query = query.substring(1); + } + return Object.fromEntries((query === "" ? [] : query.split("&")).map(element => { + const keyValue = element.split("="); + return [unescape(keyValue[0]), unescape(keyValue[1])]; + })); +} + async function init() { google.charts.load('current', { 'packages': ['corechart'] }); let testData; @@ -112,7 +123,8 @@ async function init() { data.addColumn('number', 'Flake Percentage'); data.addColumn({ type: 'string', label: 'Commit Hash', role: 'tooltip', 'p': { 'html': true } }); - const desiredTest = "TestFunctional/parallel/LogsCmd", desiredEnvironment = "Docker_Linux_containerd"; + const query = parseUrlQuery(window.location.search); + const desiredTest = query.test || "", desiredEnvironment = query.env || ""; const groups = testData // Filter to only contain unskipped runs of the requested test and requested environment. From 424c954770215e82cd42040251b4ac103d162bb4 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 11:33:22 -0700 Subject: [PATCH 010/153] Add duration to existing graph with appropriate labels. --- hack/test-flake-chart/flake_chart.js | 35 ++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index 43f686566965..8d8f0cb52460 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -121,7 +121,9 @@ async function init() { const data = new google.visualization.DataTable(); data.addColumn('date', 'Date'); data.addColumn('number', 'Flake Percentage'); - data.addColumn({ type: 'string', label: 'Commit Hash', role: 'tooltip', 'p': { 'html': true } }); + data.addColumn({ type: 'string', role: 'tooltip', 'p': { 'html': true } }); + data.addColumn('number', 'Duration'); + data.addColumn({ type: 'string', role: 'tooltip', 'p': { 'html': true } }); const query = parseUrlQuery(window.location.search); const desiredTest = query.test || "", desiredEnvironment = query.env || ""; @@ -139,7 +141,12 @@ async function init() { .map(tests => ({ date: tests[0].date, // Get one of the dates from the tests (which will all be the same). flakeRate: tests.map(test => test.status === testStatus.FAILED ? 100 : 0).average(), // Compute average of runs where FAILED counts as 100%. - commitHashes: tests.map(test => ({ hash: test.commit, status: test.status })) // Take all hashes and status' of tests in this group. + duration: tests.map(test => test.duration).average(), // Compute average duration of runs. + commitHashes: tests.map(test => ({ // Take all hashes, statuses, and durations of tests in this group. + hash: test.commit, + status: test.status, + duration: test.duration + })) })) .map(groupData => [ groupData.date, @@ -149,17 +156,31 @@ async function init() { Flake Percentage: ${groupData.flakeRate.toFixed(2)}%
Hashes:
${groupData.commitHashes.map(({ hash, status }) => ` - ${hash} (${status})`).join("
")} - ` + `, + groupData.duration, + `
+ ${groupData.date.toString()}
+ Average Duration: ${groupData.duration.toFixed(2)}s
+ Hashes:
+ ${groupData.commitHashes.map(({ hash, duration }) => ` - ${hash} (${duration}s)`).join("
")} +
`, ]) ); const options = { - title: `Flake Rate by day of ${desiredTest} on ${desiredEnvironment}`, - width: 900, - height: 500, + title: `Flake rate and duration by day of ${desiredTest} on ${desiredEnvironment}`, + width: window.innerWidth, + height: window.innerHeight, pointSize: 10, pointShape: "circle", - vAxis: { minValue: 0, maxValue: 1 }, + series: { + 0: { targetAxisIndex: 0 }, + 1: { targetAxisIndex: 1 }, + }, + vAxes: { + 0: { title: "Flake rate", minValue: 0, maxValue: 100 }, + 1: { title: "Duration (seconds)" }, + }, tooltip: { trigger: "selection", isHtml: true } }; const chart = new google.visualization.LineChart(document.getElementById('chart_div')); From 419f2506e697d65bbf493a6c92ba390ed248ebc8 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 12:15:16 -0700 Subject: [PATCH 011/153] Add "data optimization" which treats empty fields in data.csv as equivalent to the previous entry. This optimization takes data size down from 41 MB to 16MB which is ~40% which is huge! --- hack/test-flake-chart/flake_chart.js | 5 ++++- hack/test-flake-chart/optimize_data.sh | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100755 hack/test-flake-chart/optimize_data.sh diff --git a/hack/test-flake-chart/flake_chart.js b/hack/test-flake-chart/flake_chart.js index 8d8f0cb52460..e18d5389a5fb 100644 --- a/hack/test-flake-chart/flake_chart.js +++ b/hack/test-flake-chart/flake_chart.js @@ -49,12 +49,15 @@ async function loadTestData() { } const testData = []; + let lineData = ["", "", "", "", "", ""]; for await (const line of lines) { - const splitLine = line.split(","); + let splitLine = line.split(","); if (splitLine.length != 6) { console.warn(`Found line with wrong number of fields. Actual: ${splitLine.length} Expected: 6. Line: "${line}"`); continue; } + splitLine = splitLine.map((value, index) => value === "" ? lineData[index] : value); + lineData = splitLine; if (!isValidEnumValue(testStatus, splitLine[4])) { console.warn(`Invalid test status provided. Actual: ${splitLine[4]} Expected: One of ${Object.values(testStatus).join(", ")}`); continue; diff --git a/hack/test-flake-chart/optimize_data.sh b/hack/test-flake-chart/optimize_data.sh new file mode 100755 index 000000000000..f62cb63f3e11 --- /dev/null +++ b/hack/test-flake-chart/optimize_data.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +awk -F, 'BEGIN {OFS = FS} { for(i=1; i<=NF; i++) { if($i == j[i]) { $i = ""; } else { j[i] = $i; } } printf "%s\n",$0 }' From 78e98382836c8552f178f72deb0ac26d7e793f55 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 14:01:41 -0700 Subject: [PATCH 012/153] Refactor collect_data into collect_data + process_data. This allows processing data coming from other sources. --- hack/test-flake-chart/collect_data.sh | 26 +++----------------------- hack/test-flake-chart/process_data.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 23 deletions(-) create mode 100755 hack/test-flake-chart/process_data.sh diff --git a/hack/test-flake-chart/collect_data.sh b/hack/test-flake-chart/collect_data.sh index 392aeb7c9d2a..644c7842de88 100755 --- a/hack/test-flake-chart/collect_data.sh +++ b/hack/test-flake-chart/collect_data.sh @@ -1,28 +1,8 @@ #!/bin/bash -# Create temp path for partial data (storing everything but the commit date.) -PARTIAL_DATA_PATH=$(mktemp) -# Write -echo "Partial path: $PARTIAL_DATA_PATH" 1>&2 - -# Print header. -printf "Commit Hash,Commit Date,Environment,Test,Status,Duration\n" +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # 1) "cat" together all summary files. -# 2) Turn each test in each summary file to a CSV line containing its commit hash, environment, test, and status. -# 3) Copy partial data to $PARTIAL_DATA_PATH to join with date later. -# 4) Extract only commit hash for each row -# 5) Make the commit hashes unique (we assume that gsutil cats files from the same hash next to each other). -# Also force buffering to occur per line so remainder of pipe can continue to process. -# 6) Execute git log for each commit to get the date of each. -# 7) Join dates with test data. +# 2) Process all summary files. gsutil cat gs://minikube-builds/logs/master/*/*_summary.json \ -| jq -r '((.PassedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Passed"}), - (.FailedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Failed"}), - (.SkippedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: 0, status: "Skipped"})) - | .commit + "," + .environment + "," + .test + "," + .status + "," + (.duration | tostring)' \ -| tee $PARTIAL_DATA_PATH \ -| sed -r -n 's/^([^,]+),.*/\1/p' \ -| stdbuf -oL -eL uniq \ -| xargs -I {} git log -1 --pretty=format:"{},%as%n" {} \ -| join -t "," - $PARTIAL_DATA_PATH +| $DIR/process_data.sh diff --git a/hack/test-flake-chart/process_data.sh b/hack/test-flake-chart/process_data.sh new file mode 100755 index 000000000000..7348c1b17849 --- /dev/null +++ b/hack/test-flake-chart/process_data.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Create temp path for partial data (storing everything but the commit date.) +PARTIAL_DATA_PATH=$(mktemp) +# Print the partial path for debugging/convenience. +echo "Partial path: $PARTIAL_DATA_PATH" 1>&2 + +# Print header. +printf "Commit Hash,Commit Date,Environment,Test,Status,Duration\n" + +# 1) Turn each test in each summary file to a CSV line containing its commit hash, environment, test, and status. +# 2) Copy partial data to $PARTIAL_DATA_PATH to join with date later. +# 3) Extract only commit hash for each row +# 4) Make the commit hashes unique (we assume that gsutil cats files from the same hash next to each other). +# Also force buffering to occur per line so remainder of pipe can continue to process. +# 5) Execute git log for each commit to get the date of each. +# 6) Join dates with test data. +jq -r '((.PassedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Passed"}), + (.FailedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Failed"}), + (.SkippedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: 0, status: "Skipped"})) + | .commit + "," + .environment + "," + .test + "," + .status + "," + (.duration | tostring)' \ +| tee $PARTIAL_DATA_PATH \ +| sed -r -n 's/^([^,]+),.*/\1/p' \ +| stdbuf -oL -eL uniq \ +| xargs -I {} git log -1 --pretty=format:"{},%as%n" {} \ +| join -t "," - $PARTIAL_DATA_PATH From fbf4e03eb98790d3d7dfe33610599f97a844c036 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 14:06:54 -0700 Subject: [PATCH 013/153] Add license to sh scripts. --- hack/test-flake-chart/collect_data.sh | 14 ++++++++++++++ hack/test-flake-chart/optimize_data.sh | 15 +++++++++++++++ hack/test-flake-chart/process_data.sh | 14 ++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/hack/test-flake-chart/collect_data.sh b/hack/test-flake-chart/collect_data.sh index 644c7842de88..44273f6d802b 100755 --- a/hack/test-flake-chart/collect_data.sh +++ b/hack/test-flake-chart/collect_data.sh @@ -1,5 +1,19 @@ #!/bin/bash +# 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. + DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # 1) "cat" together all summary files. diff --git a/hack/test-flake-chart/optimize_data.sh b/hack/test-flake-chart/optimize_data.sh index f62cb63f3e11..1fd93f1901a4 100755 --- a/hack/test-flake-chart/optimize_data.sh +++ b/hack/test-flake-chart/optimize_data.sh @@ -1,3 +1,18 @@ #!/bin/bash +# 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. + +# Take input CSV. For each field, if it is the same as the previous row, replace it with an empty string. awk -F, 'BEGIN {OFS = FS} { for(i=1; i<=NF; i++) { if($i == j[i]) { $i = ""; } else { j[i] = $i; } } printf "%s\n",$0 }' diff --git a/hack/test-flake-chart/process_data.sh b/hack/test-flake-chart/process_data.sh index 7348c1b17849..f1ed764e8736 100755 --- a/hack/test-flake-chart/process_data.sh +++ b/hack/test-flake-chart/process_data.sh @@ -1,5 +1,19 @@ #!/bin/bash +# 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. + # Create temp path for partial data (storing everything but the commit date.) PARTIAL_DATA_PATH=$(mktemp) # Print the partial path for debugging/convenience. From 0096815f3c41082f91ac4622726974f142510fc8 Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Tue, 1 Jun 2021 17:29:49 -0700 Subject: [PATCH 014/153] Restore config --- pkg/minikube/cruntime/containerd.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index f74646e113a8..1dec25d77ecf 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -84,11 +84,8 @@ oom_score = 0 max_container_log_line_size = 16384 [plugins.cri.containerd] snapshotter = "overlayfs" - no_pivot = true [plugins.cri.containerd.default_runtime] - runtime_type = "io.containerd.runtime.v1.linux" - runtime_engine = "" - runtime_root = "" + runtime_type = "io.containerd.runc.v2" [plugins.cri.containerd.untrusted_workload_runtime] runtime_type = "" runtime_engine = "" @@ -107,12 +104,6 @@ oom_score = 0 {{ end -}} [plugins.diff-service] default = ["walking"] - [plugins.linux] - shim = "containerd-shim" - runtime = "runc" - runtime_root = "" - no_shim = false - shim_debug = false [plugins.scheduler] pause_threshold = 0.02 deletion_threshold = 0 From 1fdd9356aa33caaf9201b23300ba5318aa94ebeb Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Tue, 1 Jun 2021 22:50:17 -0700 Subject: [PATCH 015/153] Fix cgroups setting --- pkg/minikube/cruntime/containerd.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index 1dec25d77ecf..06eb09c62688 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -79,9 +79,17 @@ oom_score = 0 enable_selinux = false sandbox_image = "{{ .PodInfraContainerImage }}" stats_collect_period = 10 - systemd_cgroup = {{ .SystemdCgroup }} enable_tls_streaming = false max_container_log_line_size = 16384 + + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = {{ .SystemdCgroup }} + [plugins.cri.containerd] snapshotter = "overlayfs" [plugins.cri.containerd.default_runtime] From 1cd44ce936774b2cdaa50c5d30ac9afb8f80e013 Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Tue, 1 Jun 2021 22:53:20 -0700 Subject: [PATCH 016/153] Fix cgroups setting --- pkg/minikube/cruntime/containerd.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index 06eb09c62688..9ea21bb704ae 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -83,12 +83,12 @@ oom_score = 0 max_container_log_line_size = 16384 [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = {{ .SystemdCgroup }} + [plugins."io.containerd.grpc.v1.cri".containerd] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = {{ .SystemdCgroup }} [plugins.cri.containerd] snapshotter = "overlayfs" From ef33b8661cdae8973558f2bd0d1c22e8fd45383a Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 16:12:27 -0700 Subject: [PATCH 017/153] Create new compute_flake_rate.go with basic CSV parsing. --- hack/test-flake-chart/compute_flake_rate.go | 109 ++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 hack/test-flake-chart/compute_flake_rate.go diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/test-flake-chart/compute_flake_rate.go new file mode 100644 index 000000000000..ca62639e7bea --- /dev/null +++ b/hack/test-flake-chart/compute_flake_rate.go @@ -0,0 +1,109 @@ +/* +Copyright 2020 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 main + +import ( + "bufio" + "flag" + "fmt" + "io" + "os" + "runtime/debug" + "strings" + "time" +) + +var ( + dataCsv = flag.String("data-csv", "", "Source data to compute flake rates on") + dateRange = flag.Uint("date-range", 5, "Number of test dates to consider when computing flake rate") +) + +func main() { + flag.Parse() + + file, err := os.Open(*dataCsv) + if err != nil { + exit("Unable to read data CSV", err) + } + + testEntries := ReadData(file) + for _, entry := range testEntries { + fmt.Printf("Name: \"%s\", Environment: \"%s\", Date: \"%v\", Status: \"%s\"\n", entry.name, entry.environment, entry.date, entry.status) + } +} + +type TestEntry struct { + name string + environment string + date time.Time + status string +} + +// Reads CSV `file` and consumes each line to be a single TestEntry. +func ReadData(file *os.File) []TestEntry { + testEntries := []TestEntry{} + + fileReader := bufio.NewReaderSize(file, 256) + previousLine := []string{"", "", "", "", "", ""} + firstLine := true + for { + lineBytes, _, err := fileReader.ReadLine() + if err != nil { + if err == io.EOF { + break + } + exit("Error reading data CSV", err) + } + line := string(lineBytes) + fields := strings.Split(line, ",") + if firstLine { + if len(fields) != 6 { + exit(fmt.Sprintf("Data CSV in incorrect format. Expected 6 columns, but got %d", len(fields)), fmt.Errorf("Bad CSV format")) + } + firstLine = false + } + for i, field := range fields { + if field == "" { + fields[i] = previousLine[i] + } + } + if len(fields) != 6 { + fmt.Printf("Found line with wrong number of columns. Expectd 6, but got %d - skipping\n", len(fields)) + continue + } + previousLine = fields + if fields[4] == "Passed" || fields[4] == "Failed" { + date, err := time.Parse("2006-01-02", fields[1]) + if err != nil { + fmt.Printf("Failed to parse date: %v\n", err) + } + testEntries = append(testEntries, TestEntry{ + name: fields[3], + environment: fields[2], + date: date, + status: fields[4], + }) + } + } + return testEntries +} + +// exit will exit and clean up minikube +func exit(msg string, err error) { + fmt.Printf("WithError(%s)=%v called from:\n%s", msg, err, debug.Stack()) + os.Exit(60) +} From de6cff23db3f753000941a7da2357557327c2e91 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 16:20:47 -0700 Subject: [PATCH 018/153] Split entries based on environment and test name. --- hack/test-flake-chart/compute_flake_rate.go | 44 ++++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/test-flake-chart/compute_flake_rate.go index ca62639e7bea..f62fef637d8d 100644 --- a/hack/test-flake-chart/compute_flake_rate.go +++ b/hack/test-flake-chart/compute_flake_rate.go @@ -41,8 +41,17 @@ func main() { } testEntries := ReadData(file) - for _, entry := range testEntries { - fmt.Printf("Name: \"%s\", Environment: \"%s\", Date: \"%v\", Status: \"%s\"\n", entry.name, entry.environment, entry.date, entry.status) + splitEntries := SplitData(testEntries) + for environment, environmentSplit := range splitEntries { + fmt.Printf("%s {\n", environment) + for test, testSplit := range environmentSplit { + fmt.Printf(" %s {\n", test) + for _, entry := range testSplit { + fmt.Printf(" Date: %v, Status: %s\n", entry.date, entry.status) + } + fmt.Printf(" }\n") + } + fmt.Printf("}\n") } } @@ -102,6 +111,37 @@ func ReadData(file *os.File) []TestEntry { return testEntries } +// Splits `testEntries` up into maps indexed first by environment and then by test. +func SplitData(testEntries []TestEntry) map[string]map[string][]TestEntry { + splitEntries := make(map[string]map[string][]TestEntry) + + for _, entry := range testEntries { + AppendEntry(splitEntries, entry.environment, entry.name, entry) + } + + return splitEntries +} + +// Appends `entry` to `splitEntries` at the `environment` and `test`. +func AppendEntry(splitEntries map[string]map[string][]TestEntry, environment, test string, entry TestEntry) { + // Lookup the environment. + environmentSplit, ok := splitEntries[environment] + if !ok { + // If the environment map is missing, make a map for this environment and store it. + environmentSplit = make(map[string][]TestEntry) + splitEntries[environment] = environmentSplit + } + + // Lookup the test. + testSplit, ok := environmentSplit[test] + if !ok { + // If the test is missing, make a slice for this test. + testSplit = make([]TestEntry, 0) + // The slice is not inserted, since it will be replaced anyway. + } + environmentSplit[test] = append(testSplit, entry) +} + // exit will exit and clean up minikube func exit(msg string, err error) { fmt.Printf("WithError(%s)=%v called from:\n%s", msg, err, debug.Stack()) From e6a553f67977856eac4ef8ae68184a55b7029131 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 1 Jun 2021 16:27:03 -0700 Subject: [PATCH 019/153] Compute flake rate of all entries split by environment and test. --- hack/test-flake-chart/compute_flake_rate.go | 40 +++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/test-flake-chart/compute_flake_rate.go index f62fef637d8d..628a6efe0ba8 100644 --- a/hack/test-flake-chart/compute_flake_rate.go +++ b/hack/test-flake-chart/compute_flake_rate.go @@ -42,14 +42,11 @@ func main() { testEntries := ReadData(file) splitEntries := SplitData(testEntries) - for environment, environmentSplit := range splitEntries { + flakeRates := ComputeFlakeRates(splitEntries) + for environment, environmentSplit := range flakeRates { fmt.Printf("%s {\n", environment) - for test, testSplit := range environmentSplit { - fmt.Printf(" %s {\n", test) - for _, entry := range testSplit { - fmt.Printf(" Date: %v, Status: %s\n", entry.date, entry.status) - } - fmt.Printf(" }\n") + for test, flakeRate := range environmentSplit { + fmt.Printf(" %s: %f\n", test, flakeRate) } fmt.Printf("}\n") } @@ -142,6 +139,35 @@ func AppendEntry(splitEntries map[string]map[string][]TestEntry, environment, te environmentSplit[test] = append(testSplit, entry) } +// Computes the flake rates over each entry in `splitEntries`. +func ComputeFlakeRates(splitEntries map[string]map[string][]TestEntry) map[string]map[string]float32 { + flakeRates := make(map[string]map[string]float32) + for environment, environmentSplit := range splitEntries { + for test, testSplit := range environmentSplit { + failures := 0 + for _, entry := range testSplit { + if entry.status == "Failed" { + failures++ + } + } + SetValue(flakeRates, environment, test, float32(failures)/float32(len(testSplit))) + } + } + return flakeRates +} + +// Sets the `value` of keys `environment` and `test` in `flakeRates`. +func SetValue(flakeRates map[string]map[string]float32, environment, test string, value float32) { + // Lookup the environment. + environmentRates, ok := flakeRates[environment] + if !ok { + // If the environment map is missing, make a map for this environment and store it. + environmentRates = make(map[string]float32) + flakeRates[environment] = environmentRates + } + environmentRates[test] = value +} + // exit will exit and clean up minikube func exit(msg string, err error) { fmt.Printf("WithError(%s)=%v called from:\n%s", msg, err, debug.Stack()) From 60929009d6daae66405b8f5c5f2570d5b99121d6 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 2 Jun 2021 10:56:02 -0700 Subject: [PATCH 020/153] Create FilterRecentEntries to only include the last N run dates. --- hack/test-flake-chart/compute_flake_rate.go | 52 ++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/test-flake-chart/compute_flake_rate.go index 628a6efe0ba8..94eece172547 100644 --- a/hack/test-flake-chart/compute_flake_rate.go +++ b/hack/test-flake-chart/compute_flake_rate.go @@ -23,6 +23,7 @@ import ( "io" "os" "runtime/debug" + "sort" "strings" "time" ) @@ -42,7 +43,8 @@ func main() { testEntries := ReadData(file) splitEntries := SplitData(testEntries) - flakeRates := ComputeFlakeRates(splitEntries) + filteredEntries := FilterRecentEntries(splitEntries, *dateRange) + flakeRates := ComputeFlakeRates(filteredEntries) for environment, environmentSplit := range flakeRates { fmt.Printf("%s {\n", environment) for test, flakeRate := range environmentSplit { @@ -139,6 +141,54 @@ func AppendEntry(splitEntries map[string]map[string][]TestEntry, environment, te environmentSplit[test] = append(testSplit, entry) } +// Filters `splitEntries` to include only the most recent `date_range` dates. +func FilterRecentEntries(splitEntries map[string]map[string][]TestEntry, dateRange uint) map[string]map[string][]TestEntry { + filteredEntries := make(map[string]map[string][]TestEntry) + + for environment, environmentSplit := range splitEntries { + for test, testSplit := range environmentSplit { + dates := make([]time.Time, len(testSplit)) + for _, entry := range testSplit { + dates = append(dates, entry.date) + } + // Sort dates from future to past. + sort.Slice(dates, func(i, j int) bool { + return dates[j].Before(dates[i]) + }) + datesInRange := make([]time.Time, 0, dateRange) + var lastDate time.Time = time.Date(0, 0, 0, 0, 0, 0, 0, time.Local) + // Go through each date. + for _, date := range dates { + // If date is the same as last date, ignore it. + if date.Equal(lastDate) { + continue + } + + // Add the date. + datesInRange = append(datesInRange, date) + lastDate = date + // If the date_range has been hit, break out. + if uint(len(datesInRange)) == dateRange { + break + } + } + + for _, entry := range testSplit { + // Look for the first element <= entry.date + index := sort.Search(len(datesInRange), func(i int) bool { + return datesInRange[i].Before(entry.date) || datesInRange[i].Equal(entry.date) + }) + // If no date is <= entry.date, or the found date does not equal entry.date. + if index == len(datesInRange) || !datesInRange[index].Equal(entry.date) { + continue + } + AppendEntry(filteredEntries, environment, test, entry) + } + } + } + return filteredEntries +} + // Computes the flake rates over each entry in `splitEntries`. func ComputeFlakeRates(splitEntries map[string]map[string][]TestEntry) map[string]map[string]float32 { flakeRates := make(map[string]map[string]float32) From 9d4153f0abfc1bebecb53991e11d1dbcaa33c6e1 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 2 Jun 2021 13:40:27 -0700 Subject: [PATCH 021/153] Create test for ReadData. --- hack/test-flake-chart/compute_flake_rate.go | 2 +- .../compute_flake_rate_test.go | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 hack/test-flake-chart/compute_flake_rate_test.go diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/test-flake-chart/compute_flake_rate.go index 94eece172547..02151c6dec94 100644 --- a/hack/test-flake-chart/compute_flake_rate.go +++ b/hack/test-flake-chart/compute_flake_rate.go @@ -62,7 +62,7 @@ type TestEntry struct { } // Reads CSV `file` and consumes each line to be a single TestEntry. -func ReadData(file *os.File) []TestEntry { +func ReadData(file io.Reader) []TestEntry { testEntries := []TestEntry{} fileReader := bufio.NewReaderSize(file, 256) diff --git a/hack/test-flake-chart/compute_flake_rate_test.go b/hack/test-flake-chart/compute_flake_rate_test.go new file mode 100644 index 000000000000..30210c9b887d --- /dev/null +++ b/hack/test-flake-chart/compute_flake_rate_test.go @@ -0,0 +1,87 @@ +/* +Copyright 2020 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 main + +import ( + "strings" + "testing" + "time" +) + +func simpleDate(year int, month time.Month, day int) time.Time { + return time.Date(year, month, day, 0, 0, 0, 0, time.UTC) +} + +func TestReadData(t *testing.T) { + actualData := ReadData(strings.NewReader( + `A,B,C,D,E,F + hash,2000-01-01,env1,test1,Passed,1 + hash,2001-01-01,env2,test2,Failed,1 + hash,,,test1,,1 + hash,2002-01-01,,,Passed,1 + hash,2003-01-01,env3,test3,Passed,1`, + )) + expectedData := []TestEntry{ + { + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 1), + status: "Passed", + }, + { + name: "test2", + environment: "env2", + date: simpleDate(2001, time.January, 1), + status: "Failed", + }, + { + name: "test1", + environment: "env2", + date: simpleDate(2001, time.January, 1), + status: "Failed", + }, + { + name: "test1", + environment: "env2", + date: simpleDate(2002, time.January, 1), + status: "Passed", + }, + { + name: "test3", + environment: "env3", + date: simpleDate(2003, time.January, 1), + status: "Passed", + }, + } + + for i, actual := range actualData { + if len(expectedData) <= i { + t.Errorf("Received unmatched actual element at index %d. Actual: %v", i, actual) + continue + } + expected := expectedData[i] + if actual != expected { + t.Errorf("Elements differ at index %d. Expected: %v, Actual: %v", i, expected, actual) + } + } + + if len(actualData) < len(expectedData) { + for i := len(actualData); i < len(expectedData); i++ { + t.Errorf("Missing unmatched expected element at index %d. Expected: %v", i, expectedData[i]) + } + } +} From 401bcbfe0a9dda2f1dbb0feb0a723cdbfba93426 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 2 Jun 2021 14:12:43 -0700 Subject: [PATCH 022/153] Move comparison code to its own function. --- .../compute_flake_rate_test.go | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/hack/test-flake-chart/compute_flake_rate_test.go b/hack/test-flake-chart/compute_flake_rate_test.go index 30210c9b887d..8e175bfb0d3e 100644 --- a/hack/test-flake-chart/compute_flake_rate_test.go +++ b/hack/test-flake-chart/compute_flake_rate_test.go @@ -17,6 +17,7 @@ limitations under the License. package main import ( + "fmt" "strings" "testing" "time" @@ -26,6 +27,28 @@ func simpleDate(year int, month time.Month, day int) time.Time { return time.Date(year, month, day, 0, 0, 0, 0, time.UTC) } +func compareEntrySlices(t *testing.T, actualData, expectedData []TestEntry, extra string) { + if extra != "" { + extra = fmt.Sprintf(" (%s)", extra) + } + for i, actual := range actualData { + if len(expectedData) <= i { + t.Errorf("Received unmatched actual element at index %d%s. Actual: %v", i, extra, actual) + continue + } + expected := expectedData[i] + if actual != expected { + t.Errorf("Elements differ at index %d%s. Expected: %v, Actual: %v", i, extra, expected, actual) + } + } + + if len(actualData) < len(expectedData) { + for i := len(actualData); i < len(expectedData); i++ { + t.Errorf("Missing unmatched expected element at index %d%s. Expected: %v", i, extra, expectedData[i]) + } + } +} + func TestReadData(t *testing.T) { actualData := ReadData(strings.NewReader( `A,B,C,D,E,F @@ -68,16 +91,8 @@ func TestReadData(t *testing.T) { }, } - for i, actual := range actualData { - if len(expectedData) <= i { - t.Errorf("Received unmatched actual element at index %d. Actual: %v", i, actual) - continue - } - expected := expectedData[i] - if actual != expected { - t.Errorf("Elements differ at index %d. Expected: %v, Actual: %v", i, expected, actual) - } - } + compareEntrySlices(t, actualData, expectedData, "") +} if len(actualData) < len(expectedData) { for i := len(actualData); i < len(expectedData); i++ { From 4e9718a28b6cf68be53eaf33a9ab77cbf39c3e93 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 2 Jun 2021 14:15:25 -0700 Subject: [PATCH 023/153] Add test for SplitData. --- .../compute_flake_rate_test.go | 78 ++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/hack/test-flake-chart/compute_flake_rate_test.go b/hack/test-flake-chart/compute_flake_rate_test.go index 8e175bfb0d3e..13343a299575 100644 --- a/hack/test-flake-chart/compute_flake_rate_test.go +++ b/hack/test-flake-chart/compute_flake_rate_test.go @@ -94,9 +94,81 @@ func TestReadData(t *testing.T) { compareEntrySlices(t, actualData, expectedData, "") } - if len(actualData) < len(expectedData) { - for i := len(actualData); i < len(expectedData); i++ { - t.Errorf("Missing unmatched expected element at index %d. Expected: %v", i, expectedData[i]) +func compareSplitData(t *testing.T, actual, expected map[string]map[string][]TestEntry) { + for environment, actualTests := range actual { + expectedTests, environmentOk := expected[environment] + if !environmentOk { + t.Errorf("Unexpected environment %s in actual", environment) + continue + } + + for test, actualEntries := range actualTests { + expectedEntries, testOk := expectedTests[test] + if !testOk { + t.Errorf("Unexpected test %s (in environment %s) in actual", test, environment) + continue + } + + compareEntrySlices(t, actualEntries, expectedEntries, fmt.Sprintf("environment %s, test %s", environment, test)) + } + + for test := range expectedTests { + _, testOk := actualTests[test] + if !testOk { + t.Errorf("Missing expected test %s (in environment %s) in actual", test, environment) + } + } + } + + for environment := range expected { + _, environmentOk := actual[environment] + if !environmentOk { + t.Errorf("Missing expected environment %s in actual", environment) } } } + +func TestSplitData(t *testing.T) { + entry_e1_t1_1, entry_e1_t1_2 := TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 1), + status: "Passed", + }, TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 2), + status: "Passed", + } + entry_e1_t2 := TestEntry{ + name: "test2", + environment: "env1", + date: simpleDate(2000, time.January, 1), + status: "Passed", + } + entry_e2_t1 := TestEntry{ + name: "test1", + environment: "env2", + date: simpleDate(2000, time.January, 1), + status: "Passed", + } + entry_e2_t2 := TestEntry{ + name: "test2", + environment: "env2", + date: simpleDate(2000, time.January, 1), + status: "Passed", + } + actual := SplitData([]TestEntry{entry_e1_t1_1, entry_e1_t1_2, entry_e1_t2, entry_e2_t1, entry_e2_t2}) + expected := map[string]map[string][]TestEntry{ + "env1": { + "test1": {entry_e1_t1_1, entry_e1_t1_2}, + "test2": {entry_e1_t2}, + }, + "env2": { + "test1": {entry_e2_t1}, + "test2": {entry_e2_t2}, + }, + } + + compareSplitData(t, actual, expected) +} From df6f7a8485ce00305fa8cc21ea4ff395b30b433a Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 2 Jun 2021 15:48:12 -0700 Subject: [PATCH 024/153] Add test for FilterRecentEntries. --- hack/test-flake-chart/compute_flake_rate.go | 10 +- .../compute_flake_rate_test.go | 107 ++++++++++++++++++ 2 files changed, 112 insertions(+), 5 deletions(-) diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/test-flake-chart/compute_flake_rate.go index 02151c6dec94..ea622a4a80e4 100644 --- a/hack/test-flake-chart/compute_flake_rate.go +++ b/hack/test-flake-chart/compute_flake_rate.go @@ -115,14 +115,14 @@ func SplitData(testEntries []TestEntry) map[string]map[string][]TestEntry { splitEntries := make(map[string]map[string][]TestEntry) for _, entry := range testEntries { - AppendEntry(splitEntries, entry.environment, entry.name, entry) + appendEntry(splitEntries, entry.environment, entry.name, entry) } return splitEntries } // Appends `entry` to `splitEntries` at the `environment` and `test`. -func AppendEntry(splitEntries map[string]map[string][]TestEntry, environment, test string, entry TestEntry) { +func appendEntry(splitEntries map[string]map[string][]TestEntry, environment, test string, entry TestEntry) { // Lookup the environment. environmentSplit, ok := splitEntries[environment] if !ok { @@ -182,7 +182,7 @@ func FilterRecentEntries(splitEntries map[string]map[string][]TestEntry, dateRan if index == len(datesInRange) || !datesInRange[index].Equal(entry.date) { continue } - AppendEntry(filteredEntries, environment, test, entry) + appendEntry(filteredEntries, environment, test, entry) } } } @@ -200,14 +200,14 @@ func ComputeFlakeRates(splitEntries map[string]map[string][]TestEntry) map[strin failures++ } } - SetValue(flakeRates, environment, test, float32(failures)/float32(len(testSplit))) + setValue(flakeRates, environment, test, float32(failures)/float32(len(testSplit))) } } return flakeRates } // Sets the `value` of keys `environment` and `test` in `flakeRates`. -func SetValue(flakeRates map[string]map[string]float32, environment, test string, value float32) { +func setValue(flakeRates map[string]map[string]float32, environment, test string, value float32) { // Lookup the environment. environmentRates, ok := flakeRates[environment] if !ok { diff --git a/hack/test-flake-chart/compute_flake_rate_test.go b/hack/test-flake-chart/compute_flake_rate_test.go index 13343a299575..d27fd176e909 100644 --- a/hack/test-flake-chart/compute_flake_rate_test.go +++ b/hack/test-flake-chart/compute_flake_rate_test.go @@ -172,3 +172,110 @@ func TestSplitData(t *testing.T) { compareSplitData(t, actual, expected) } + +func TestFilterRecentEntries(t *testing.T) { + entry_e1_t1_r1, entry_e1_t1_r2, entry_e1_t1_r3, entry_e1_t1_o1, entry_e1_t1_o2 := TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 4), + status: "Passed", + }, TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 3), + status: "Passed", + }, TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 3), + status: "Passed", + }, TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 2), + status: "Passed", + }, TestEntry{ + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 1), + status: "Passed", + } + entry_e1_t2_r1, entry_e1_t2_r2, entry_e1_t2_o1 := TestEntry{ + name: "test2", + environment: "env1", + date: simpleDate(2001, time.January, 3), + status: "Passed", + }, TestEntry{ + name: "test2", + environment: "env1", + date: simpleDate(2001, time.January, 2), + status: "Passed", + }, TestEntry{ + name: "test2", + environment: "env1", + date: simpleDate(2001, time.January, 1), + status: "Passed", + } + entry_e2_t2_r1, entry_e2_t2_r2, entry_e2_t2_o1 := TestEntry{ + name: "test2", + environment: "env2", + date: simpleDate(2003, time.January, 3), + status: "Passed", + }, TestEntry{ + name: "test2", + environment: "env2", + date: simpleDate(2003, time.January, 2), + status: "Passed", + }, TestEntry{ + name: "test2", + environment: "env2", + date: simpleDate(2003, time.January, 1), + status: "Passed", + } + + actualData := FilterRecentEntries(map[string]map[string][]TestEntry{ + "env1": { + "test1": { + entry_e1_t1_r1, + entry_e1_t1_r2, + entry_e1_t1_r3, + entry_e1_t1_o1, + entry_e1_t1_o2, + }, + "test2": { + entry_e1_t2_r1, + entry_e1_t2_r2, + entry_e1_t2_o1, + }, + }, + "env2": { + "test2": { + entry_e2_t2_r1, + entry_e2_t2_r2, + entry_e2_t2_o1, + }, + }, + }, 2) + + expectedData := map[string]map[string][]TestEntry{ + "env1": { + "test1": { + entry_e1_t1_r1, + entry_e1_t1_r2, + entry_e1_t1_r3, + }, + "test2": { + entry_e1_t2_r1, + entry_e1_t2_r2, + }, + }, + "env2": { + "test2": { + entry_e2_t2_r1, + entry_e2_t2_r2, + }, + }, + } + + compareSplitData(t, actualData, expectedData) +} From 65be305aab6517c7c503f1627bbf94ddca7b7052 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 2 Jun 2021 16:17:39 -0700 Subject: [PATCH 025/153] Add test for ComputeFlakeRates. --- .../compute_flake_rate_test.go | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/hack/test-flake-chart/compute_flake_rate_test.go b/hack/test-flake-chart/compute_flake_rate_test.go index d27fd176e909..22c1f6b47669 100644 --- a/hack/test-flake-chart/compute_flake_rate_test.go +++ b/hack/test-flake-chart/compute_flake_rate_test.go @@ -279,3 +279,115 @@ func TestFilterRecentEntries(t *testing.T) { compareSplitData(t, actualData, expectedData) } + +func TestComputeFlakeRates(t *testing.T) { + actualData := ComputeFlakeRates(map[string]map[string][]TestEntry{ + "env1": { + "test1": { + { + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 4), + status: "Passed", + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 3), + status: "Passed", + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 3), + status: "Passed", + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 2), + status: "Passed", + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, time.January, 1), + status: "Failed", + }, + }, + "test2": { + { + name: "test2", + environment: "env1", + date: simpleDate(2001, time.January, 3), + status: "Failed", + }, { + name: "test2", + environment: "env1", + date: simpleDate(2001, time.January, 2), + status: "Failed", + }, { + name: "test2", + environment: "env1", + date: simpleDate(2001, time.January, 1), + status: "Failed", + }, + }, + }, + "env2": { + "test2": { + { + name: "test2", + environment: "env2", + date: simpleDate(2003, time.January, 3), + status: "Passed", + }, TestEntry{ + name: "test2", + environment: "env2", + date: simpleDate(2003, time.January, 2), + status: "Failed", + }, + }, + }, + }) + + expectedData := map[string]map[string]float32{ + "env1": { + "test1": 0.2, + "test2": 1, + }, + "env2": { + "test2": 0.5, + }, + } + + for environment, actualTests := range actualData { + expectedTests, environmentOk := expectedData[environment] + if !environmentOk { + t.Errorf("Unexpected environment %s in actual", environment) + continue + } + + for test, actualFlakeRate := range actualTests { + expectedFlakeRate, testOk := expectedTests[test] + if !testOk { + t.Errorf("Unexpected test %s (in environment %s) in actual", test, environment) + continue + } + + if actualFlakeRate != expectedFlakeRate { + t.Errorf("Wrong flake rate. Expected: %v, Actual: %v", expectedFlakeRate, actualFlakeRate) + } + } + + for test := range expectedTests { + _, testOk := actualTests[test] + if !testOk { + t.Errorf("Missing expected test %s (in environment %s) in actual", test, environment) + } + } + } + + for environment := range expectedData { + _, environmentOk := actualData[environment] + if !environmentOk { + t.Errorf("Missing expected environment %s in actual", environment) + } + } +} From 36a6f876009a37269223046f976f9196233d45d8 Mon Sep 17 00:00:00 2001 From: Vishal Jain Date: Sun, 16 May 2021 11:59:29 -0700 Subject: [PATCH 026/153] Added Mock of Minikube Delete Profiles Test portion. --- cmd/minikube/cmd/delete.go | 33 +++++++++++++++++++-------------- cmd/minikube/cmd/delete_test.go | 15 +++++++++++++++ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/cmd/minikube/cmd/delete.go b/cmd/minikube/cmd/delete.go index b7c86852d3c5..3104e57bfbfa 100644 --- a/cmd/minikube/cmd/delete.go +++ b/cmd/minikube/cmd/delete.go @@ -87,6 +87,24 @@ func (error DeletionError) Error() string { return error.Err.Error() } +var DeleteHostAndDirectoriesGetter = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { + if err := killMountProcess(); err != nil { + out.FailureT("Failed to kill mount process: {{.error}}", out.V{"error": err}) + } + + deleteHosts(api, cc) + + // In case DeleteHost didn't complete the job. + deleteProfileDirectory(profileName) + deleteMachineDirectories(cc) + + if err := deleteConfig(profileName); err != nil { + return err + } + + return deleteContext(profileName) +} + func init() { deleteCmd.Flags().BoolVar(&deleteAll, "all", false, "Set flag to delete all profiles") deleteCmd.Flags().BoolVar(&purge, "purge", false, "Set this flag to delete the '.minikube' folder from your user directory.") @@ -282,23 +300,10 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error { } } - if err := killMountProcess(); err != nil { - out.FailureT("Failed to kill mount process: {{.error}}", out.V{"error": err}) - } - - deleteHosts(api, cc) - - // In case DeleteHost didn't complete the job. - deleteProfileDirectory(profile.Name) - deleteMachineDirectories(cc) - - if err := deleteConfig(profile.Name); err != nil { + if err := DeleteHostAndDirectoriesGetter(api, cc, profile.Name); err != nil { return err } - if err := deleteContext(profile.Name); err != nil { - return err - } out.Step(style.Deleted, `Removed all traces of the "{{.name}}" cluster.`, out.V{"name": profile.Name}) return nil } diff --git a/cmd/minikube/cmd/delete_test.go b/cmd/minikube/cmd/delete_test.go index 6c6a98939f5d..bff165218316 100644 --- a/cmd/minikube/cmd/delete_test.go +++ b/cmd/minikube/cmd/delete_test.go @@ -17,15 +17,18 @@ limitations under the License. package cmd import ( + "fmt" "io/ioutil" "os" "path/filepath" "testing" + "github.com/docker/machine/libmachine" "github.com/google/go-cmp/cmp" "github.com/otiai10/copy" "github.com/spf13/viper" + cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/localpath" ) @@ -154,6 +157,17 @@ func TestDeleteProfile(t *testing.T) { } } +var DeleteHostAndDirectoriesMock = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { + return deleteContextTest() +} + +func deleteContextTest() error { + if err := cmdcfg.Unset(config.ProfileName); err != nil { + return DeletionError{Err: fmt.Errorf("unset minikube profile: %v", err), Errtype: Fatal} + } + return nil +} + func TestDeleteAllProfiles(t *testing.T) { td, err := ioutil.TempDir("", "all") if err != nil { @@ -207,6 +221,7 @@ func TestDeleteAllProfiles(t *testing.T) { } profiles := append(validProfiles, inValidProfiles...) + DeleteHostAndDirectoriesGetter = DeleteHostAndDirectoriesMock errs := DeleteProfiles(profiles) if errs != nil { From ebe03d768760a0b1a3fde74de09a3d069ef8cd1b Mon Sep 17 00:00:00 2001 From: Vishal Jain Date: Sun, 30 May 2021 20:42:33 -0700 Subject: [PATCH 027/153] Added Mock to DeleteProfile Test. --- cmd/minikube/cmd/delete_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/minikube/cmd/delete_test.go b/cmd/minikube/cmd/delete_test.go index bff165218316..c878a1a2ca6e 100644 --- a/cmd/minikube/cmd/delete_test.go +++ b/cmd/minikube/cmd/delete_test.go @@ -117,6 +117,7 @@ func TestDeleteProfile(t *testing.T) { t.Logf("load failure: %v", err) } + DeleteHostAndDirectoriesGetter = DeleteHostAndDirectoriesMock errs := DeleteProfiles([]*config.Profile{profile}) if len(errs) > 0 { HandleDeletionErrors(errs) From a8fe445facbbaf62da9f5067b877c2895bffe039 Mon Sep 17 00:00:00 2001 From: JacekDuszenko Date: Thu, 3 Jun 2021 03:57:51 +0100 Subject: [PATCH 028/153] move ingress dns docs to site --- .../content/en/docs/handbook/addons/ingress-dns.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) rename deploy/addons/ingress-dns/README.md => site/content/en/docs/handbook/addons/ingress-dns.md (97%) diff --git a/deploy/addons/ingress-dns/README.md b/site/content/en/docs/handbook/addons/ingress-dns.md similarity index 97% rename from deploy/addons/ingress-dns/README.md rename to site/content/en/docs/handbook/addons/ingress-dns.md index 145d67b37455..84eb968468d3 100644 --- a/deploy/addons/ingress-dns/README.md +++ b/site/content/en/docs/handbook/addons/ingress-dns.md @@ -1,6 +1,9 @@ -# Minikube Ingress DNS -![Build Status](https://gitlab.com/cryptexlabs/public/development/minikube-ingress-dns/badges/master/pipeline.svg) - +--- +title: "Ingress DNS" +linkTitle: "Minikube Ingress DNS" +weight: 1 +date: 2021-06-03 +--- DNS service for ingress controllers running on your minikube server ## Overview @@ -172,7 +175,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.pli ## TODO - Add a service that runs on the host OS which will update the files in `/etc/resolver` automatically - Start this service when running `minikube addons enable ingress-dns` and stop the service when running -`minikube addons disable ingress-dns` + `minikube addons disable ingress-dns` ## Contributors - [Josh Woodcock](https://github.com/woodcockjosh) From 4bb1752d3dcf3dbc28b063883acf4bdf555db6db Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Thu, 3 Jun 2021 12:20:50 -0700 Subject: [PATCH 029/153] Fix integration test --- test/integration/docker_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/docker_test.go b/test/integration/docker_test.go index c20e05126c02..c7db90f6c29d 100644 --- a/test/integration/docker_test.go +++ b/test/integration/docker_test.go @@ -114,7 +114,7 @@ func validateContainerdSystemd(ctx context.Context, t *testing.T, profile string if err != nil { t.Errorf("failed to get docker cgroup driver. args %q: %v", rr.Command(), err) } - if !strings.Contains(rr.Output(), "systemd_cgroup = true") { + if !strings.Contains(rr.Output(), "SystemdCgroup = true") { t.Fatalf("expected systemd cgroup driver, got: %v", rr.Output()) } } From d7d3593a897eb4544bdcb6005e0ad19d7a04b95c Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 3 Jun 2021 13:33:58 -0700 Subject: [PATCH 030/153] Rewrite process_data.sh to no longer depend on git log. This now means we depend on the date being contained within the details. --- hack/test-flake-chart/process_data.sh | 28 ++++++--------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/hack/test-flake-chart/process_data.sh b/hack/test-flake-chart/process_data.sh index f1ed764e8736..b3a6e26a9efa 100755 --- a/hack/test-flake-chart/process_data.sh +++ b/hack/test-flake-chart/process_data.sh @@ -14,27 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Create temp path for partial data (storing everything but the commit date.) -PARTIAL_DATA_PATH=$(mktemp) -# Print the partial path for debugging/convenience. -echo "Partial path: $PARTIAL_DATA_PATH" 1>&2 - # Print header. -printf "Commit Hash,Commit Date,Environment,Test,Status,Duration\n" +printf "Commit Hash,Test Date,Environment,Test,Status,Duration\n" -# 1) Turn each test in each summary file to a CSV line containing its commit hash, environment, test, and status. -# 2) Copy partial data to $PARTIAL_DATA_PATH to join with date later. -# 3) Extract only commit hash for each row -# 4) Make the commit hashes unique (we assume that gsutil cats files from the same hash next to each other). -# Also force buffering to occur per line so remainder of pipe can continue to process. -# 5) Execute git log for each commit to get the date of each. -# 6) Join dates with test data. -jq -r '((.PassedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Passed"}), - (.FailedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Failed"}), - (.SkippedTests[]? as $name | {commit: .Detail.Details, environment: .Detail.Name, test: $name, duration: 0, status: "Skipped"})) - | .commit + "," + .environment + "," + .test + "," + .status + "," + (.duration | tostring)' \ -| tee $PARTIAL_DATA_PATH \ -| sed -r -n 's/^([^,]+),.*/\1/p' \ -| stdbuf -oL -eL uniq \ -| xargs -I {} git log -1 --pretty=format:"{},%as%n" {} \ -| join -t "," - $PARTIAL_DATA_PATH +# Turn each test in each summary file to a CSV line containing its commit hash, date, environment, test, and status. +jq -r '((.PassedTests[]? as $name | {commit: (.Detail.Details | split(":") | .[0]), date: (.Detail.Details | split(":") | .[1]), environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Passed"}), + (.FailedTests[]? as $name | {commit: (.Detail.Details | split(":") | .[0]), date: (.Detail.Details | split(":") | .[1]), environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Failed"}), + (.SkippedTests[]? as $name | {commit: (.Detail.Details | split(":") | .[0]), date: (.Detail.Details | split(":") | .[1]), environment: .Detail.Name, test: $name, duration: 0, status: "Skipped"})) + | .commit + "," + .date + "," + .environment + "," + .test + "," + .status + "," + (.duration | tostring)' From 40fdbe61ae817b8ff618321461d74059ba9315a0 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 3 Jun 2021 14:01:06 -0700 Subject: [PATCH 031/153] Allow Jenkins to append to the flake rate data. --- hack/jenkins/common.sh | 5 +++- hack/jenkins/upload_integration_report.sh | 4 +++ hack/test-flake-chart/jenkins_upload_tests.sh | 25 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 hack/test-flake-chart/jenkins_upload_tests.sh diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh index beb58f7d08c2..0832b6b3e237 100755 --- a/hack/jenkins/common.sh +++ b/hack/jenkins/common.sh @@ -419,7 +419,7 @@ fi touch "${HTML_OUT}" touch "${SUMMARY_OUT}" -gopogh_status=$(gopogh -in "${JSON_OUT}" -out_html "${HTML_OUT}" -out_summary "${SUMMARY_OUT}" -name "${JOB_NAME}" -pr "${MINIKUBE_LOCATION}" -repo github.com/kubernetes/minikube/ -details "${COMMIT}") || true +gopogh_status=$(gopogh -in "${JSON_OUT}" -out_html "${HTML_OUT}" -out_summary "${SUMMARY_OUT}" -name "${JOB_NAME}" -pr "${MINIKUBE_LOCATION}" -repo github.com/kubernetes/minikube/ -details "${COMMIT}:$(date +%Y-%m-%d)") || true fail_num=$(echo $gopogh_status | jq '.NumberOfFail') test_num=$(echo $gopogh_status | jq '.NumberOfTests') pessimistic_status="${fail_num} / ${test_num} failures" @@ -441,6 +441,9 @@ if [ -z "${EXTERNAL}" ]; then gsutil -qm cp "${HTML_OUT}" "gs://${JOB_GCS_BUCKET}.html" || true echo ">> uploading ${SUMMARY_OUT}" gsutil -qm cp "${SUMMARY_OUT}" "gs://${JOB_GCS_BUCKET}_summary.json" || true + if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then + ./test-flake-chart/jenkins_upload_tests.sh "${SUMMARY_OUT}" + fi else # Otherwise, put the results in a predictable spot so the upload job can find them REPORTS_PATH=test_reports diff --git a/hack/jenkins/upload_integration_report.sh b/hack/jenkins/upload_integration_report.sh index 04e24df09ebc..ddf9a6cee613 100644 --- a/hack/jenkins/upload_integration_report.sh +++ b/hack/jenkins/upload_integration_report.sh @@ -47,3 +47,7 @@ gsutil -qm cp "${HTML_OUT}" "gs://${JOB_GCS_BUCKET}.html" || true SUMMARY_OUT="$ARTIFACTS/summary.txt" echo ">> uploading ${SUMMARY_OUT}" gsutil -qm cp "${SUMMARY_OUT}" "gs://${JOB_GCS_BUCKET}_summary.json" || true + +if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then + ./test-flake-chart/jenkins_upload_tests.sh "${SUMMARY_OUT}" +fi diff --git a/hack/test-flake-chart/jenkins_upload_tests.sh b/hack/test-flake-chart/jenkins_upload_tests.sh new file mode 100755 index 000000000000..e609893b808f --- /dev/null +++ b/hack/test-flake-chart/jenkins_upload_tests.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -x -o pipefail + +if [ "$#" -ne 1 ]; then + echo "Wrong number of arguments. Usage: jenkins_upload_tests.sh " 1>&2 + exit 1 +fi + +TMP_DATA=$(mktemp) + +# Use the gopogh summary, process it, optimize the data, remove the header, and store. +<"$1" ./test-flake-chart/process_data.sh \ + | ./test-flake-chart/optimize_data.sh \ + | sed "1d" > $TMP_DATA + +GCS_TMP="gs://minikube-flake-rate/$(basename "$TMP_DATA")" + +# Copy data to append to GCS +gsutil cp $TMP_DATA $GCS_TMP +# Append data to existing data. +gsutil compose gs://minikube-flake-rate/data.csv $GCS_TMP gs://minikube-flake-rate/data.csv +# Clear all the temp stuff. +rm $TMP_DATA +gsutil rm $GCS_TMP From d245cfcdf7e8d5238462557962dbf9630ed630e6 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 3 Jun 2021 14:12:03 -0700 Subject: [PATCH 032/153] Move all flake rate files to Jenkins to allow auto-upload. --- hack/{ => jenkins}/test-flake-chart/collect_data.sh | 0 hack/{ => jenkins}/test-flake-chart/compute_flake_rate.go | 0 hack/{ => jenkins}/test-flake-chart/compute_flake_rate_test.go | 0 hack/{ => jenkins}/test-flake-chart/flake_chart.html | 0 hack/{ => jenkins}/test-flake-chart/flake_chart.js | 0 hack/{ => jenkins}/test-flake-chart/jenkins_upload_tests.sh | 0 hack/{ => jenkins}/test-flake-chart/optimize_data.sh | 0 hack/{ => jenkins}/test-flake-chart/process_data.sh | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename hack/{ => jenkins}/test-flake-chart/collect_data.sh (100%) rename hack/{ => jenkins}/test-flake-chart/compute_flake_rate.go (100%) rename hack/{ => jenkins}/test-flake-chart/compute_flake_rate_test.go (100%) rename hack/{ => jenkins}/test-flake-chart/flake_chart.html (100%) rename hack/{ => jenkins}/test-flake-chart/flake_chart.js (100%) rename hack/{ => jenkins}/test-flake-chart/jenkins_upload_tests.sh (100%) rename hack/{ => jenkins}/test-flake-chart/optimize_data.sh (100%) rename hack/{ => jenkins}/test-flake-chart/process_data.sh (100%) diff --git a/hack/test-flake-chart/collect_data.sh b/hack/jenkins/test-flake-chart/collect_data.sh similarity index 100% rename from hack/test-flake-chart/collect_data.sh rename to hack/jenkins/test-flake-chart/collect_data.sh diff --git a/hack/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go similarity index 100% rename from hack/test-flake-chart/compute_flake_rate.go rename to hack/jenkins/test-flake-chart/compute_flake_rate.go diff --git a/hack/test-flake-chart/compute_flake_rate_test.go b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go similarity index 100% rename from hack/test-flake-chart/compute_flake_rate_test.go rename to hack/jenkins/test-flake-chart/compute_flake_rate_test.go diff --git a/hack/test-flake-chart/flake_chart.html b/hack/jenkins/test-flake-chart/flake_chart.html similarity index 100% rename from hack/test-flake-chart/flake_chart.html rename to hack/jenkins/test-flake-chart/flake_chart.html diff --git a/hack/test-flake-chart/flake_chart.js b/hack/jenkins/test-flake-chart/flake_chart.js similarity index 100% rename from hack/test-flake-chart/flake_chart.js rename to hack/jenkins/test-flake-chart/flake_chart.js diff --git a/hack/test-flake-chart/jenkins_upload_tests.sh b/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh similarity index 100% rename from hack/test-flake-chart/jenkins_upload_tests.sh rename to hack/jenkins/test-flake-chart/jenkins_upload_tests.sh diff --git a/hack/test-flake-chart/optimize_data.sh b/hack/jenkins/test-flake-chart/optimize_data.sh similarity index 100% rename from hack/test-flake-chart/optimize_data.sh rename to hack/jenkins/test-flake-chart/optimize_data.sh diff --git a/hack/test-flake-chart/process_data.sh b/hack/jenkins/test-flake-chart/process_data.sh similarity index 100% rename from hack/test-flake-chart/process_data.sh rename to hack/jenkins/test-flake-chart/process_data.sh From cec82877d86a3299ba3258b75222121f9756e2a1 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 3 Jun 2021 14:25:04 -0700 Subject: [PATCH 033/153] Format flake rates into CSV containing environment, test, and flake rate. --- hack/jenkins/test-flake-chart/compute_flake_rate.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index ea622a4a80e4..55f81bae15d8 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -45,12 +45,11 @@ func main() { splitEntries := SplitData(testEntries) filteredEntries := FilterRecentEntries(splitEntries, *dateRange) flakeRates := ComputeFlakeRates(filteredEntries) + fmt.Println("Environment,Test,Flake Rate") for environment, environmentSplit := range flakeRates { - fmt.Printf("%s {\n", environment) for test, flakeRate := range environmentSplit { - fmt.Printf(" %s: %f\n", test, flakeRate) + fmt.Printf("%s,%s,%f\n", environment, test, flakeRate) } - fmt.Printf("}\n") } } From fa2ba4ad19d1d5f15dd625035f15d081ce369581 Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Thu, 3 Jun 2021 16:04:54 -0700 Subject: [PATCH 034/153] Trigger build --- pkg/minikube/cruntime/containerd.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index 9ea21bb704ae..07f61ebcc9fb 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -49,7 +49,6 @@ const ( containerdConfigTemplate = `root = "/var/lib/containerd" state = "/run/containerd" oom_score = 0 - [grpc] address = "/run/containerd/containerd.sock" uid = 0 From 934ac1f109326e7bf8b7228f087bb99e1691fe4e Mon Sep 17 00:00:00 2001 From: JacekDuszenko Date: Fri, 4 Jun 2021 00:05:37 +0100 Subject: [PATCH 035/153] add json deserialization to embed-certs from global config --- pkg/minikube/config/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index aee9b1ac2840..274d5d3e8302 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -34,7 +34,7 @@ type Profile struct { type ClusterConfig struct { Name string KeepContext bool // used by start and profile command to or not to switch kubectl's current context - EmbedCerts bool // used by kubeconfig.Setup + EmbedCerts bool `json:"embed-certs"` // used by kubeconfig.Setup MinikubeISO string // ISO used for VM-drivers. KicBaseImage string // base-image used for docker/podman drivers. Memory int From 13e02b1924486ea30958513e527656768d8afe5b Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Fri, 4 Jun 2021 10:27:35 -0700 Subject: [PATCH 036/153] Fix logs --- test/integration/status_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/status_test.go b/test/integration/status_test.go index 3b78642a96c8..6bebab499866 100644 --- a/test/integration/status_test.go +++ b/test/integration/status_test.go @@ -65,7 +65,7 @@ func TestInsufficientStorage(t *testing.T) { verifyClusterState(t, stdout) } -// runStatusCmd runs the status command and returns stdout +// runStatusCmd runs the status command expecting non-zero exit code and returns stdout func runStatusCmd(ctx context.Context, t *testing.T, profile string, increaseEnv bool) []byte { // make sure minikube status shows insufficient storage c := exec.CommandContext(ctx, Target(), "status", "-p", profile, "--output=json", "--layout=cluster") @@ -76,7 +76,7 @@ func runStatusCmd(ctx context.Context, t *testing.T, profile string, increaseEnv rr, err := Run(t, c) // status exits non-0 if status isn't Running if err == nil { - t.Fatalf("expected command to fail, but it succeeded: %v\n%v", rr.Command(), err) + t.Fatalf("expected command to fail, but it succeeded: %v", rr.Command()) } return rr.Stdout.Bytes() } From b39f171268d05dad12a48b66f4e0a2d4be670870 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Fri, 4 Jun 2021 14:08:37 -0700 Subject: [PATCH 037/153] ensure Windows integration tests are ephemeral --- hack/jenkins/windows_integration_setup.ps1 | 20 +++++++++++++++++++ hack/jenkins/windows_integration_teardown.ps1 | 18 +++++++++++++++++ .../windows_integration_test_docker.ps1 | 6 ++++++ .../windows_integration_test_hyperv.ps1 | 8 +++++++- .../windows_integration_test_virtualbox.ps1 | 8 +++++++- 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 hack/jenkins/windows_integration_setup.ps1 create mode 100644 hack/jenkins/windows_integration_teardown.ps1 diff --git a/hack/jenkins/windows_integration_setup.ps1 b/hack/jenkins/windows_integration_setup.ps1 new file mode 100644 index 000000000000..e1bcb027e559 --- /dev/null +++ b/hack/jenkins/windows_integration_setup.ps1 @@ -0,0 +1,20 @@ +# 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. + +$test_root="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" +$test_home="$test_root\$env:COMMIT" +$env:KUBECONFIG="$test_home\kubeconfig" +$env:MINIKUBE_HOME="$test_home\.minikube" + +mkdir -p $test_home diff --git a/hack/jenkins/windows_integration_teardown.ps1 b/hack/jenkins/windows_integration_teardown.ps1 new file mode 100644 index 000000000000..49f8e1272b0a --- /dev/null +++ b/hack/jenkins/windows_integration_teardown.ps1 @@ -0,0 +1,18 @@ +# 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. + +$test_root="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" +$test_home="$test_root\$env:COMMIT" + +rm -r $test_home diff --git a/hack/jenkins/windows_integration_test_docker.ps1 b/hack/jenkins/windows_integration_test_docker.ps1 index 0dcd4f8f53c5..244279a2362c 100644 --- a/hack/jenkins/windows_integration_test_docker.ps1 +++ b/hack/jenkins/windows_integration_test_docker.ps1 @@ -21,6 +21,8 @@ gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/minikube-windows-am gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/e2e-windows-amd64.exe out/ gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/testdata . gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/setup_docker_desktop_windows.ps1 out/ +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_setup.ps1 out/ +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_teardown.ps1 out/ $env:SHORT_COMMIT=$env:COMMIT.substring(0, 7) $gcs_bucket="minikube-builds/logs/$env:MINIKUBE_LOCATION/$env:SHORT_COMMIT" @@ -43,6 +45,8 @@ docker system prune --all --force ./out/minikube-windows-amd64.exe delete --all +./out/windows_integration_setup.ps1 + docker ps -aq | ForEach -Process {docker rm -fv $_} $started=Get-Date -UFormat %s @@ -96,4 +100,6 @@ docker system prune --all --force # Just shutdown Docker, it's safer than anything else Get-Process "*Docker Desktop*" | Stop-Process +./out/windows_integration_teardown.ps1 + Exit $env:result diff --git a/hack/jenkins/windows_integration_test_hyperv.ps1 b/hack/jenkins/windows_integration_test_hyperv.ps1 index f6c2282d4c13..067e64b695cf 100644 --- a/hack/jenkins/windows_integration_test_hyperv.ps1 +++ b/hack/jenkins/windows_integration_test_hyperv.ps1 @@ -18,9 +18,13 @@ mkdir -p out gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/minikube-windows-amd64.exe out/ gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/e2e-windows-amd64.exe out/ gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/testdata . +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_setup.ps1 out/ +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_teardown.ps1 out/ ./out/minikube-windows-amd64.exe delete --all +./out/windows_integration_setup.ps1 + out/e2e-windows-amd64.exe -minikube-start-args="--driver=hyperv" -binary=out/minikube-windows-amd64.exe -test.v -test.timeout=65m $env:result=$lastexitcode # If the last exit code was 0->success, x>0->error @@ -33,4 +37,6 @@ $env:target_url="https://storage.googleapis.com/minikube-builds/logs/$env:MINIKU $json = "{`"state`": `"$env:status`", `"description`": `"Jenkins`", `"target_url`": `"$env:target_url`", `"context`": `"Hyper-V_Windows`"}" Invoke-WebRequest -Uri "https://api.github.com/repos/kubernetes/minikube/statuses/$env:COMMIT`?access_token=$env:access_token" -Body $json -ContentType "application/json" -Method Post -usebasicparsing -Exit $env:result \ No newline at end of file +./out/windows_integration_teardown.ps1 + +Exit $env:result diff --git a/hack/jenkins/windows_integration_test_virtualbox.ps1 b/hack/jenkins/windows_integration_test_virtualbox.ps1 index f17084ab0b94..e4100ddf83ef 100644 --- a/hack/jenkins/windows_integration_test_virtualbox.ps1 +++ b/hack/jenkins/windows_integration_test_virtualbox.ps1 @@ -19,9 +19,13 @@ mkdir -p out gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/minikube-windows-amd64.exe out/ gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/e2e-windows-amd64.exe out/ gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/testdata . +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_setup.ps1 out/ +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_teardown.ps1 out/ ./out/minikube-windows-amd64.exe delete +./out/windows_integration_setup.ps1 + out/e2e-windows-amd64.exe -minikube-start-args="--driver=virtualbox" -binary=out/minikube-windows-amd64.exe -test.v -test.timeout=30m $env:result=$lastexitcode # If the last exit code was 0->success, x>0->error @@ -34,4 +38,6 @@ $env:target_url="https://storage.googleapis.com/minikube-builds/logs/$env:MINIKU $json = "{`"state`": `"$env:status`", `"description`": `"Jenkins`", `"target_url`": `"$env:target_url`", `"context`": `"VirtualBox_Windows`"}" Invoke-WebRequest -Uri "https://api.github.com/repos/kubernetes/minikube/statuses/$env:COMMIT`?access_token=$env:access_token" -Body $json -ContentType "application/json" -Method Post -usebasicparsing -Exit $env:result \ No newline at end of file +./out/windows_integration_teardown.ps1 + +Exit $env:result From 03b793c7d040dbffa2a608d8b0f2e833e94d9137 Mon Sep 17 00:00:00 2001 From: Vishal Jain Date: Wed, 2 Jun 2021 20:00:45 -0700 Subject: [PATCH 038/153] Fix names. --- cmd/minikube/cmd/delete.go | 4 ++-- cmd/minikube/cmd/delete_test.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/minikube/cmd/delete.go b/cmd/minikube/cmd/delete.go index 3104e57bfbfa..ec657fe817a6 100644 --- a/cmd/minikube/cmd/delete.go +++ b/cmd/minikube/cmd/delete.go @@ -87,7 +87,7 @@ func (error DeletionError) Error() string { return error.Err.Error() } -var DeleteHostAndDirectoriesGetter = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { +var hostAndDirsDeleter = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { if err := killMountProcess(); err != nil { out.FailureT("Failed to kill mount process: {{.error}}", out.V{"error": err}) } @@ -300,7 +300,7 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error { } } - if err := DeleteHostAndDirectoriesGetter(api, cc, profile.Name); err != nil { + if err := hostAndDirsDeleter(api, cc, profile.Name); err != nil { return err } diff --git a/cmd/minikube/cmd/delete_test.go b/cmd/minikube/cmd/delete_test.go index c878a1a2ca6e..fff2ffabf88c 100644 --- a/cmd/minikube/cmd/delete_test.go +++ b/cmd/minikube/cmd/delete_test.go @@ -117,7 +117,7 @@ func TestDeleteProfile(t *testing.T) { t.Logf("load failure: %v", err) } - DeleteHostAndDirectoriesGetter = DeleteHostAndDirectoriesMock + hostAndDirsDeleter = hostAndDirsDeleterMock errs := DeleteProfiles([]*config.Profile{profile}) if len(errs) > 0 { HandleDeletionErrors(errs) @@ -158,7 +158,7 @@ func TestDeleteProfile(t *testing.T) { } } -var DeleteHostAndDirectoriesMock = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { +var hostAndDirsDeleterMock = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { return deleteContextTest() } @@ -222,7 +222,7 @@ func TestDeleteAllProfiles(t *testing.T) { } profiles := append(validProfiles, inValidProfiles...) - DeleteHostAndDirectoriesGetter = DeleteHostAndDirectoriesMock + hostAndDirsDeleter = hostAndDirsDeleterMock errs := DeleteProfiles(profiles) if errs != nil { From b7a6dd0b5e141bcf33df6a0f0042746a837509a9 Mon Sep 17 00:00:00 2001 From: JacekDuszenko Date: Sat, 5 Jun 2021 23:52:40 +0100 Subject: [PATCH 039/153] implement embed certs global config as EmbedCerts --- cmd/minikube/cmd/config/config.go | 2 +- cmd/minikube/cmd/root.go | 1 + cmd/minikube/cmd/start.go | 1 - pkg/minikube/config/config.go | 2 ++ pkg/minikube/config/types.go | 2 +- site/content/en/docs/commands/config.md | 2 +- 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index 8ef3630915f1..bc9c5d6d8456 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -172,7 +172,7 @@ var settings = []Setting{ setMap: SetMap, }, { - name: "embed-certs", + name: config.EmbedCerts, set: SetBool, }, { diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index cfcd7f02763e..b702496a6cce 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -301,6 +301,7 @@ func setupViper() { viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) viper.AutomaticEnv() + viper.RegisterAlias(config.EmbedCerts, embedCerts) viper.SetDefault(config.WantUpdateNotification, true) viper.SetDefault(config.ReminderWaitPeriodInHours, 24) viper.SetDefault(config.WantReportError, false) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 0d4f574e29a8..bd0c4f162d6e 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -169,7 +169,6 @@ func runStart(cmd *cobra.Command, args []string) { out.WarningT("Profile name '{{.name}}' is not valid", out.V{"name": ClusterFlagValue()}) exit.Message(reason.Usage, "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.") } - existing, err := config.Load(ClusterFlagValue()) if err != nil && !config.IsNotExist(err) { kind := reason.HostConfigLoad diff --git a/pkg/minikube/config/config.go b/pkg/minikube/config/config.go index f194099266a5..22e99f1e3b6b 100644 --- a/pkg/minikube/config/config.go +++ b/pkg/minikube/config/config.go @@ -58,6 +58,8 @@ const ( AddonRegistries = "addon-registries" // AddonListFlag represents the key for addons parameter AddonListFlag = "addons" + // EmbedCerts represents the config for embedding certificates in kubeconfig + EmbedCerts = "EmbedCerts" ) var ( diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index 274d5d3e8302..aee9b1ac2840 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -34,7 +34,7 @@ type Profile struct { type ClusterConfig struct { Name string KeepContext bool // used by start and profile command to or not to switch kubectl's current context - EmbedCerts bool `json:"embed-certs"` // used by kubeconfig.Setup + EmbedCerts bool // used by kubeconfig.Setup MinikubeISO string // ISO used for VM-drivers. KicBaseImage string // base-image used for docker/podman drivers. Memory int diff --git a/site/content/en/docs/commands/config.md b/site/content/en/docs/commands/config.md index 51ff431b204b..16f8f5a382db 100644 --- a/site/content/en/docs/commands/config.md +++ b/site/content/en/docs/commands/config.md @@ -41,7 +41,7 @@ Configurable fields: * hyperv-virtual-switch * disable-driver-mounts * cache - * embed-certs + * EmbedCerts * native-ssh ```shell From d330b11f9fb2ede8989d3e98c188cc733d7b16c4 Mon Sep 17 00:00:00 2001 From: JacekDuszenko Date: Sun, 6 Jun 2021 13:54:38 +0100 Subject: [PATCH 040/153] add more polish translations --- translations/pl.json | 300 +++++++++++++++++++++---------------------- 1 file changed, 150 insertions(+), 150 deletions(-) diff --git a/translations/pl.json b/translations/pl.json index e8eb780ae80f..eb047b1d2d8b 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -23,9 +23,9 @@ "--kvm-numa-count range is 1-8": "", "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", - "==\u003e Audit \u003c==": "", - "==\u003e Last Start \u003c==": "", - "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "", + "==\u003e Audit \u003c==": "==> Audyt <==", + "==\u003e Last Start \u003c==": "==> Ostatni start <==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN lub zapora sieciowa przeszkadza w komunikacji protokołem HTTP z maszyną wirtualną minikube. Spróbuj użyć innego sterownika: https://minikube.sigs.k8s.io/docs/start/", "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", @@ -36,57 +36,57 @@ "Access the kubernetes dashboard running within the minikube cluster": "Dostęp do dashboardu uruchomionego w klastrze kubernetesa w minikube", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", "Add SSH identity key to SSH authentication agent": "", - "Add an image to local cache.": "", - "Add host key to SSH known_hosts file": "", - "Add image to cache for all running minikube clusters": "", - "Add machine IP to NO_PROXY environment variable": "", - "Add, delete, or push a local image into minikube": "", - "Add, remove, or list additional nodes": "", - "Adding node {{.name}} to cluster {{.cluster}}": "", + "Add an image to local cache.": "Dodaj obraz do lokalnego cache", + "Add host key to SSH known_hosts file": "Dodaj klucz hosta do pliku known_hosts", + "Add image to cache for all running minikube clusters": "Dodaj obraz do cache'a dla wszystkich uruchomionych klastrów minikube", + "Add machine IP to NO_PROXY environment variable": "Dodaj IP serwera do zmiennej środowiskowej NO_PROXY", + "Add, delete, or push a local image into minikube": "Dodaj, usuń lub wypchnij lokalny obraz do minikube", + "Add, remove, or list additional nodes": "Dodaj, usuń lub wylistuj pozostałe węzły", + "Adding node {{.name}} to cluster {{.cluster}}": "Dodawanie węzła {{.name}} do klastra {{.cluster}}", "Additional help topics": "Dodatkowe tematy pomocy", "Additional mount options, such as cache=fscache": "Dodatkowe opcje montowania, jak na przykład cache=fscache", - "Adds a node to the given cluster config, and starts it.": "", - "Adds a node to the given cluster.": "", + "Adds a node to the given cluster config, and starts it.": "Dodaje węzeł do konfiguracji danego klastra i wystartowuje go", + "Adds a node to the given cluster.": "Dodaje węzeł do danego klastra", "Advanced Commands:": "Zaawansowane komendy", - "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Po włączeniu addona wykonaj komendę \"minikube tunnel\". Twoje zasoby będą dostępne pod adresem \"127.0.0.1\"", "Aliases": "Aliasy", - "All existing scheduled stops cancelled": "", + "All existing scheduled stops cancelled": "Wszystkie zaplanowane zatrzymania zostały anulowane", "Allow user prompts for more information": "", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", - "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or )", - "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or )", + "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], gdzie jednostka to = b, k, m lub g)", + "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], gdzie jednostka to = b, k, m or g)", "Amount of RAM to allocate to Kubernetes (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "", "Amount of time to wait for a service in seconds": "Czas oczekiwania na serwis w sekundach", "Amount of time to wait for service in seconds": "Czas oczekiwania na serwis w sekundach", - "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", - "Another minikube instance is downloading dependencies... ": "", - "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", - "At least needs control plane nodes to enable addon": "", - "Automatically selected the {{.driver}} driver": "", - "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Inny hiperwizor, taki jak Virtualbox, powoduje konflikty z KVM. Zatrzymaj innego hiperwizora lub użyj flagi --driver żeby go zmienić.", + "Another minikube instance is downloading dependencies... ": "Inny program minikube już pobiera zależności...", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Inny program używa pliku wymaganego przez minikube. Jeśli używasz Hyper-V, spróbuj zatrzymać maszynę wirtualną minikube z poziomu managera Hyper-V", + "At least needs control plane nodes to enable addon": "Wymaga węzłów z płaszczyzny kontrolnej do włączenia addona", + "Automatically selected the {{.driver}} driver": "Automatycznie wybrano sterownik {{.driver}}", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Automatycznie wybrano sterownik {{.driver}}. Inne możliwe sterowniki: {{.alternates}}", "Available Commands": "Dostępne polecenia", "Basic Commands:": "Podstawowe polecenia", - "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Z powodu użycia sterownika dockera na systemie operacyjnym {{.operating_system}}, terminal musi zostać uruchomiony.", "Bind Address: {{.Address}}": "", - "Booting up control plane ...": "", + "Booting up control plane ...": "Uruchamianie płaszczyzny kontrolnej", "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", "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 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", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", "Cache image from docker daemon": "", "Cache image from remote registry": "", - "Cannot find directory {{.path}} for copy": "", + "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": "", - "Check if you have unnecessary pods running by running 'kubectl get po -A": "", + "Cannot use both --output and --format options": "Nie można użyć obydwu opcji --output i --format jednocześnie", + "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": "", + "Check that libvirt is setup properly": "Sprawdź czy bibliteka libvirt jest poprawnie zainstalowana", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "Upewnij się, że minikube zostało uruchomione i że podano poprawną przestrzeń nazw (flaga -n) celem zamontowania", "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "Upewnij się, że --kubernetes-version ma 'v' z przodu. Na przykład `v1.1.14`", "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", - "Choose a smaller value for --memory, such as 2000": "", + "Choose a smaller value for --memory, such as 2000": "Wybierz mniejszą wartość dla --memory, przykładowo 2000", "ChromeOS is missing the kernel support necessary for running Kubernetes": "", "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", "Configuration and Management Commands:": "Polecenia konfiguracji i zarządzania", @@ -95,17 +95,17 @@ "Configure environment to use minikube's Docker daemon": "", "Configure environment to use minikube's Podman service": "", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", - "Configuring RBAC rules ...": "", + "Configuring RBAC rules ...": "Konfigurowanie zasad RBAC ...", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Konfigurowanie środowiska dla Kubernetesa w wersji {{.k8sVersion}} na {{.runtime}} {{.runtimeVersion}}", "Configuring local host environment ...": "Konfigurowanie lokalnego środowiska hosta...", "Configuring {{.name}} (Container Networking Interface) ...": "", "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", - "Connect to LoadBalancer services": "", + "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.": "", + "Consider increasing Docker Desktop's memory size.": "Rozważ przydzielenie większej ilości pamięci RAM dla programu Docker Desktop", "Continuously listing/getting the status with optional interval duration.": "", - "Copy the specified file into minikube": "", + "Copy the specified file into minikube": "Skopiuj dany plik do minikube", "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", "Could not determine a Google Cloud project, which might be ok.": "", "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.": "", @@ -119,22 +119,22 @@ "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Tworzenie {{.driver_name}} (CPUs={{.number_of_cpus}}, Pamięć={{.memory_size}}MB, Dysk={{.disk_size}}MB)...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "Current context is \"{{.context}}\"": "", - "DEPRECATED, use `driver` instead.": "", - "DEPRECATED: Replaced by --cni=bridge": "", + "Current context is \"{{.context}}\"": "Obecny kontekst to \"{{.context}}\"", + "DEPRECATED, use `driver` instead.": "PRZESTARZAŁE, użyj zamiast tego `driver`", + "DEPRECATED: Replaced by --cni=bridge": "PRZESTARZAŁE, zostało zastąpione przez --cni=bridge", "Default group id used for the mount": "Domyślne id groupy użyte dla montowania", "Default user id used for the mount": "Domyślne id użytkownika użyte dla montowania ", - "Delete an image from the local cache.": "", - "Deletes a local Kubernetes cluster": "", + "Delete an image from the local cache.": "Usuń obraz z lokalnego cache'a", + "Deletes a local Kubernetes cluster": "Usuwa lokalny klaster Kubernetesa", "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", - "Deletes a local kubernetes cluster": "Usuwa lokalny klaster kubernetesa", + "Deletes a local kubernetes cluster": "Usuwa lokalny klaster Kubernetesa", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Usuwa lokalny klaster kubernetesa. Ta komenda usuwa maszynę wirtualną i wszystkie powiązane pliki.", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all associated files.": "Usuwa lokalny klaster kubernetesa. Ta komenda usuwa maszynę wirtualną i wszystkie powiązane pliki.", - "Deletes a node from a cluster.": "", + "Deletes a node from a cluster.": "Usuwa węzeł z klastra", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Usuwanie \"{{.profile_name}}\" - {{.driver_name}}...", - "Deleting container \"{{.name}}\" ...": "", + "Deleting container \"{{.name}}\" ...": "Usuwanie kontenera \"{{.name}}\" ...", "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", - "Deleting node {{.name}} from cluster {{.cluster}}": "", + "Deleting node {{.name}} from cluster {{.cluster}}": "Usuwanie węzła {{.name}} z klastra {{.cluster}}", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", @@ -356,109 +356,109 @@ "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", "Kubernetes {{.version}} is not supported by this release of minikube": "", "Launching Kubernetes ...": "Uruchamianie Kubernetesa...", - "Launching proxy ...": "", + "Launching proxy ...": "Uruchamianie proxy", "List all available images from the local cache.": "", - "List existing minikube nodes.": "", + "List existing minikube nodes.": "Wylistuj istniejące węzły minikube", "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", - "List images": "", - "List nodes.": "", + "List images": "Wylistuj obrazy", + "List nodes.": "Wylistuj węzły", "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "", - "List of ports that should be exposed (docker and podman driver only)": "", + "List of ports that should be exposed (docker and podman driver only)": "Lista portów, które powinny zostać wystawione (tylko dla sterowników docker i podman)", "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "", - "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "", - "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Nasłuchiwanie na adresie {{.listenAddr}}. Jest to niezalecane i może spowodować powstanie podaności bezpieczeństwa. Używaj na własne ryzyko", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Wylistuj wszystkie dostępne addony minikube razem z ich obecnymi statusami (włączony/wyłączony)", "Lists all minikube profiles.": "Wylistuj wszystkie profile minikube", - "Lists all valid default values for PROPERTY_NAME": "", - "Lists all valid minikube profiles and detects all possible invalid profiles.": "", - "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", - "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "", + "Lists all valid default values for PROPERTY_NAME": "Wylistuj wszystkie prawidłowe domyślne wartości dla opcji konfiguracyjnej NAZWA_OPCJI", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "Wylistuj wszystkie prawidłowe profile minikube i wykryj wszystkie nieprawidłowe profile.", + "Lists the URLs for the services in your local cluster": "Wylistuj adresy URL serwisów w twoim lokalnym klastrze", + "Load a image into minikube": "Załaduj obraz do minikube", + "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Lokalne katalogi do współdzielenia z Guestem poprzez NFS (tylko sterownik hyperkit)", "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "", "Location of the minikube iso": "Ścieżka do obrazu iso minikube", "Location of the minikube iso.": "Ścieżka do obrazu iso minikube", - "Locations to fetch the minikube ISO from.": "", + "Locations to fetch the minikube ISO from.": "Ścieżki, z których pobrany będzie obra ISO minikube", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'": "Zaloguj się i wykonaj polecenie w maszynie za pomocą ssh. Podobne do 'docker-machine ssh'", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Zaloguj się i wykonaj polecenie w maszynie za pomocą ssh. Podobne do 'docker-machine ssh'", - "Log into the minikube environment (for debugging)": "", - "Manage images": "", - "Message Size: {{.size}}": "", - "Modify persistent configuration values": "", - "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", - "Most users should use the newer 'docker' driver instead, which does not require root!": "", + "Log into the minikube environment (for debugging)": "Zaloguj się do środowiska minikube (do debugowania)", + "Manage images": "Zarządzaj obrazami", + "Message Size: {{.size}}": "Rozmiar wiadomości: {{.size}}", + "Modify persistent configuration values": "Modyfikuj globalne opcje konfiguracyjne", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Więcej informacji: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "Większość użytkowników powinna używać nowszego sterownika docker, ktory nie wymaga uruchamiania z poziomu roota!", "Mount type: {{.name}}": "", "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", "Mounts the specified directory into minikube": "Montuje podany katalog wewnątrz minikube", "Mounts the specified directory into minikube.": "Montuje podany katalog wewnątrz minikube", - "Multiple errors deleting profiles": "", - "Multiple minikube profiles were found - ": "", + "Multiple errors deleting profiles": "Wystąpiło wiele błędów podczas usuwania profili", + "Multiple minikube profiles were found - ": "Znaleziono wiele profili minikube", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "Networking and Connectivity Commands:": "", - "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", - "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", - "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", - "No such addon {{.name}}": "", - "Node {{.name}} failed to start, deleting and trying again.": "", - "Node {{.name}} was successfully deleted.": "", - "Node {{.nodeName}} does not exist.": "", - "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "", - "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Nie znaleziono adresu IP. Spróbuj przekazać adres IP za pomocą flagi --ssh-ip-address lub odwiedź https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "Żadne zmiany nie są wymagane dla kontekstu \"{{.context}}\"", + "No minikube profile was found. ": "Nie znaleziono żadnego profilu minikube", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Nie znaleziono żadnego możliwego sterownika. Spróbuj przekazać sterownik za pomocą flagi --driver lub odwiedź https://minikube.sigs.k8s.io/docs/start/", + "No such addon {{.name}}": "Nie istnieje addon {{.name}}", + "Node {{.name}} failed to start, deleting and trying again.": "Węzeł {{.name}} nie uruchomił się pomyślnie. Usuwam i próbuję uruchomić węzeł ponownie", + "Node {{.name}} was successfully deleted.": "Węzeł {{.name}} został pomyślnie usunięty", + "Node {{.nodeName}} does not exist.": "Węzeł {{.name}} nie istnieje", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Żadne znane repozytorium nie jest osiągalne. Rozważ wyspecyfikowanie alternatywnego repozytorium za pomocą flagi --image-repository", + "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Żadne znane repozytorium w twojej lokalizacji nie jest osiągalne. Używam zamiast tego {{.image_repository_name}}", "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 Kubernetes.": "", + "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 CPUs allocated to the minikube VM.": "Liczba procesorów przypisana do maszyny wirtualnej minikube", "Number of lines back to go within the log": "", - "OS release is {{.pretty_name}}": "", - "One of 'yaml' or 'json'.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", - "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", - "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening {{.url}} in your default browser...": "", + "OS release is {{.pretty_name}}": "Wersja systemu operacyjnego to {{.pretty_name}}", + "One of 'yaml' or 'json'.": "Jeden z dwóćh formatów - 'yaml' lub 'json'", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Tylko znaki alfanumeryczne oraz myślniki '-' są dozwolone. Co najmniej jeden znak, zaczynając od znaku alfanumerycznego", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Tylko znaki alfanumeryczne oraz myślniki '-' są dozwolone. Co najmniej dwa znaki, zaczynając od znaku alfanumerycznego", + "Open the addons URL with https instead of http": "Otwórz URL addonów używając protokołu https zamiast http", + "Open the service URL with https instead of http (defaults to \\\"false\\\")": "Otwórz URL serwisu używając protokołu https zamiast http (domyślnie ma wartość fałsz)", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Otwieranie serwisu Kubernetesa {{.namespace_name}}/{{.service_name}} w domyślnej przeglądarce...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Otwieranie serwisu {{.namespace_name}}/{{.service_name}} w domyślnej przeglądarce...", + "Opening {{.url}} in your default browser...": "Otwieranie {{.url}} w domyślnej przeglądarce...", "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", - "Operations on nodes": "", - "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", + "Operations on nodes": "Operacje na węzłach", + "Options: {{.options}}": "Opcje: {{.options}}", + "Output format. Accepted values: [json]": "Format wyjściowy. Akceptowane wartości: [json]", "Outputs minikube shell completion for the given shell (bash or zsh)": "Zwraca autouzupełnianie poleceń minikube dla danej powłoki (bash, zsh)", "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", - "Overwrite image even if same image:tag name exists": "", - "Path to the Dockerfile to use (optional)": "", - "Pause": "", - "Paused {{.count}} containers": "", - "Paused {{.count}} containers in: {{.namespaces}}": "", - "Pausing node {{.name}} ... ": "", + "Overwrite image even if same image:tag name exists": "Nadpisuje obraz nawet jeśli istnieje obraz o tej samej nazwie i tagu.", + "Path to the Dockerfile to use (optional)": "Ścieżka pliku Dockerfile, którego należy użyć (opcjonalne)", + "Pause": "Stop", + "Paused {{.count}} containers": "Zatrzymane kontenery: {{.count}}", + "Paused {{.count}} containers in: {{.namespaces}}": "Zatrzymane kontenery: {{.count}} w przestrzeniach nazw: {{.namespaces}}", + "Pausing node {{.name}} ... ": "Zatrzymywanie węzła {{.name}} ... ", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please 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 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.", "Please enter a value:": "Wprowadź wartość", - "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", - "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", - "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", + "Please free up disk or prune images.": "Zwolnij miejsce na dysku lub usuń niepotrzebne obrazy", + "Please increse Desktop's disk size.": "Zwiększ miejsce na dysku dla programu Docker Desktop", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Zainstaluj sterownik hyperkit lub wybierz inny sterownik używając flagi --driver", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Zainstaluj sterownik kvm2 lub wybierz inny sterownik używając flagi --driver", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Proszę upewnij się, że serwis którego szukasz znajduje się w prawidłowej przestrzeni nazw", "Please provide a path or url to build": "", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", "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 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 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 : (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\")": "", - "Please try purging minikube using `minikube delete --all --purge`": "", + "Please try purging minikube using `minikube delete --all --purge`": "Spróbuj wyczyścic minikube używając: `minikube delete --all --purge`", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Proszę zaktualizować '{{.driver_executable}}'. {{.documentation_url}}", "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", - "Populates the specified folder with documentation in markdown about minikube": "", - "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", - "Powering off \"{{.profile_name}}\" via SSH ...": "", + "Populates the specified folder with documentation in markdown about minikube": "Umieszcza dokumentację minikube w formacie markdown w podanym katalogu", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell jest uruchomiony w trybie ograniczonym, co jest niekompatybilne ze skryptowaniem w wirtualizacji z użyciem Hyper-V", + "Powering off \"{{.profile_name}}\" via SSH ...": "Wyłączanie klastra \"{{.profile_name}}\" przez SSH ...", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Przygotowywanie Kubernetesa {{.k8sVersion}} na {{.runtime}} {{.runtimeVersion}}...", "Print current and latest version number": "Wyświetl aktualną i najnowszą wersję", - "Print just the version number.": "", + "Print just the version number.": "Wyświetl tylko numer wersji", "Print the version of minikube": "Wyświetl wersję minikube", "Print the version of minikube.": "Wyświetl wersję minikube.", "Problems detected in {{.entry}}:": "Wykryto problem w {{.name}}", @@ -865,10 +865,10 @@ "failed to start node": "", "fish completion failed": "", "fish completion.": "", - "if true, will embed the certs in kubeconfig.": "", + "if true, will embed the certs in kubeconfig.": "Jeśli ta opcja będzie miała wartoś true, zakodowane w base64 certyfikaty zostaną osadzone w pliku konfiguracyjnym kubeconfig zamiast ścieżek do plików z certyfikatami", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", - "invalid kubernetes version": "", + "invalid kubernetes version": "Nieprawidłowa wersja Kubernetesa", "keep the kube-context active after cluster is stopped. Defaults to false.": "", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "konfiguracja minikube i kubectl będzie przechowywana w katalogu {{.home_dir}}", @@ -877,17 +877,17 @@ "kubectl proxy": "", "libmachine failed": "", "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", - "loading profile": "", + "loading profile": "Ładowanie profilu", "max time to wait per Kubernetes or host to be healthy.": "", "minikube addons list --output OUTPUT. json, list": "", "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", - "minikube is not meant for production use. You are opening non-local traffic": "", - "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", + "minikube is not meant for production use. You are opening non-local traffic": "minikube nie jest przeznaczony do użycia w środowisku produkcyjnym. Otwierasz klaster na ruch nielokalny", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "uzyskanie dostępu do Google Container Registry poprzez minikube nie powiodło się. Możliwe, że musisz skonfigurować ustawienia proxy HTTP w minikube", "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", - "minikube profile was successfully set to {{.profile_name}}": "", - "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", - "minikube quickly sets up a local Kubernetes cluster": "", - "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", + "minikube profile was successfully set to {{.profile_name}}": "profil minikube został z powodzeniem zmieniony na: {{.profile_name}}", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube dostarcza lokalne klastry Kubernetesa zoptymalizowane do celów rozwoju oprogramowania oraz zarządza nimi", + "minikube quickly sets up a local Kubernetes cluster": "minikube szybko inicjalizuje lokalny klaster Kubernetesa", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "użycie flagi --force sprawia, że minikube pomija pewne walidacje, co może skutkować niespodziewanym zachowaniem", "minikube status --output OUTPUT. json, text": "", "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} jest dostępne! Pobierz je z: {{.url}}", "mkcmp is used to compare performance of two minikube binaries": "", @@ -896,8 +896,8 @@ "namespaces to pause": "", "namespaces to unpause": "", "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", - "none driver does not support multi-node clusters": "", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "none driver does not support multi-node clusters": "sterownik none nie wspiera klastrów składających się z więcej niż jednego węzła", + "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "Niewystarczająca ilośc argumentów ({{.ArgCount}}). \\nużycie: minikube config set PROPERTY_NAME PROPERTY_VALUE", "numa node is only supported on k8s v1.18 and later": "", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", "pause Kubernetes": "", @@ -906,38 +906,38 @@ "provisioning host for node": "", "reload cached images.": "", "reloads images previously added using the 'cache add' subcommand": "", - "retrieving node": "", + "retrieving node": "przywracanie węzła", "scheduled stop is not supported on the none driver, skipping scheduling": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", - "stat failed": "", + "stat failed": "wykonanie komendy stat nie powiodło się", "status json failure": "", "status text failure": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", "unable to daemonize: {{.err}}": "", - "unable to delete minikube config folder": "", - "unpause Kubernetes": "", - "unset failed": "", - "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", - "unsets an individual value in a minikube config file": "", + "unable to delete minikube config folder": "Usuwanie katalogu z plikami konfiguracyjnymi minikube nie powiodło się", + "unpause Kubernetes": "Wznów działanie Kubernetesa", + "unset failed": "Usuwanie wartości nie powiodło się", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "Usuwa wartość o nazwie PROPERTY_NAME z globalnej konfiguracji minikube. Wartość może zostać nadpisana za pomocą flag lub zmiennych środowiskowych", + "unsets an individual value in a minikube config file": "Usuwa pojedynczą wartość w globalnej konfiguracji minikube", "unsupported driver: {{.name}}": "nie wspierany sterownik: {{.name}}", - "unsupported or missing driver: {{.name}}": "", + "unsupported or missing driver: {{.name}}": "nie wspierany lub brakujący sterownik: {{.name}}", "update config": "", - "usage: minikube addons configure ADDON_NAME": "", - "usage: minikube addons disable ADDON_NAME": "", - "usage: minikube addons enable ADDON_NAME": "", - "usage: minikube addons images ADDON_NAME": "", - "usage: minikube addons list": "", - "usage: minikube addons open ADDON_NAME": "", - "usage: minikube config unset PROPERTY_NAME": "", - "usage: minikube delete": "", - "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", + "użycie: minikube addons configure ADDON_NAME": "", + "użycie: minikube addons disable ADDON_NAME": "", + "użycie: minikube addons enable ADDON_NAME": "", + "użycie: minikube addons images ADDON_NAME": "", + "użycie: minikube addons list": "", + "użycie: minikube addons open ADDON_NAME": "", + "użycie: minikube config unset PROPERTY_NAME": "", + "użycie: minikube delete": "", + "użycie: minikube profile [MINIKUBE_PROFILE_NAME]": "", "using metrics-server addon, heapster is deprecated": "", "version json failure": "", "version yaml failure": "", - "zsh completion failed": "", - "zsh completion.": "", + "zsh completion failed": "autouzupełnianie zsh nie powiodło się", + "zsh completion.": "autouzupełnianie zsh", "{{ .name }}: Suggestion: {{ .suggestion}}": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", @@ -947,20 +947,20 @@ "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", "{{.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": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", + "{{.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", + "{{.extra_option_component_name}}.{{.key}}={{.value}}": "{{.extra_option_component_name}}.{{.key}}={{.value}}", "{{.name}} cluster does not exist": "Klaster {{.name}} nie istnieje", - "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", + "{{.name}} doesn't have images.": "{{.name}} nie ma obrazów.", + "{{.name}} has following images:": "{{.name}} ma następujące obrazy:", "{{.name}} has no available configuration options": "{{.name}} nie posiada opcji konfiguracji", - "{{.name}} is already running": "", + "{{.name}} is already running": "{{.name}} został już wcześniej uruchomiony", "{{.name}} was successfully configured": "{{.name}} skonfigurowano pomyślnie", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} prawie nie ma wolnej przestrzeni dyskowej, co może powodować, że wdrożenia nie powiodą się ({{.p}}% zużycia przestrzeni dyskowej)", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} nie ma wolnej przestrzeni dyskowej! (/var jest w {{.p}}% pełny)", + "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "Czas odpowiedzi od {{.ocibin}} jest niespotykanie długi, rozważ ponowne uruchomienie {{.ocibin}}", + "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} jest w wersji {{.client_version}}, co może być niekompatybilne z Kubernetesem w wersji {{.cluster_version}}.", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} na {{.platform}}", - "{{.profile}} profile is not valid: {{.err}}": "", + "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} profil nie jest poprawny: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} nie jest wspierany przez system plików. I tak spróbujemy!", - "{{.url}} is not accessible: {{.error}}": "" + "{{.url}} is not accessible: {{.error}}": "{{.url}} nie jest osiągalny: {{.error}}" } \ No newline at end of file From 7589e1c15d772fdf4680f0a227de6496538cf7bf Mon Sep 17 00:00:00 2001 From: JacekDuszenko Date: Mon, 7 Jun 2021 20:54:43 +0100 Subject: [PATCH 041/153] fix keys in translations file --- translations/pl.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/translations/pl.json b/translations/pl.json index eb047b1d2d8b..42c1e2ee21b8 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -924,15 +924,15 @@ "unsupported driver: {{.name}}": "nie wspierany sterownik: {{.name}}", "unsupported or missing driver: {{.name}}": "nie wspierany lub brakujący sterownik: {{.name}}", "update config": "", - "użycie: minikube addons configure ADDON_NAME": "", - "użycie: minikube addons disable ADDON_NAME": "", - "użycie: minikube addons enable ADDON_NAME": "", - "użycie: minikube addons images ADDON_NAME": "", - "użycie: minikube addons list": "", - "użycie: minikube addons open ADDON_NAME": "", - "użycie: minikube config unset PROPERTY_NAME": "", - "użycie: minikube delete": "", - "użycie: minikube profile [MINIKUBE_PROFILE_NAME]": "", + "usage: minikube addons configure ADDON_NAME": "użycie: minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "użycie: minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "użycie: minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "użycie: minikube addons images ADDON_NAME", + "usage: minikube addons list": "użycie: minikube addons list", + "usage: minikube addons open ADDON_NAME": "użycie: minikube addons open ADDON_NAME", + "usage: minikube config unset PROPERTY_NAME": "użycie: minikube config unset PROPERTY_NAME", + "usage: minikube delete": "użycie: minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "użycie: minikube profile [MINIKUBE_PROFILE_NAME]", "using metrics-server addon, heapster is deprecated": "", "version json failure": "", "version yaml failure": "", From a80f3bc5aead4e45f19c94419c8ebb9ce6a48c3e Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 13:49:05 -0700 Subject: [PATCH 042/153] Add license to upload_tests script. --- .../test-flake-chart/jenkins_upload_tests.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh b/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh index e609893b808f..28db50692fd6 100755 --- a/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh +++ b/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh @@ -1,5 +1,19 @@ #!/bin/bash +# 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. + set -x -o pipefail if [ "$#" -ne 1 ]; then From 9e7f1ebbf07bfcf8d9b2199cd7b8de6a2e5bb841 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 13:49:40 -0700 Subject: [PATCH 043/153] Make computing flake rates print out percentages (with fixed 2 decimal precision) rather than floats. --- hack/jenkins/test-flake-chart/compute_flake_rate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index 55f81bae15d8..4f71aa3cf571 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -48,7 +48,7 @@ func main() { fmt.Println("Environment,Test,Flake Rate") for environment, environmentSplit := range flakeRates { for test, flakeRate := range environmentSplit { - fmt.Printf("%s,%s,%f\n", environment, test, flakeRate) + fmt.Printf("%s,%s,%.2f\n", environment, test, flakeRate*100) } } } From 7338e3745bb307d6e77299ea919f3e0d8d16f8d6 Mon Sep 17 00:00:00 2001 From: JacekDuszenko Date: Mon, 7 Jun 2021 22:00:17 +0100 Subject: [PATCH 044/153] review fixes --- translations/pl.json | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/translations/pl.json b/translations/pl.json index 42c1e2ee21b8..76bd872c815b 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -23,8 +23,8 @@ "--kvm-numa-count range is 1-8": "", "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", - "==\u003e Audit \u003c==": "==> Audyt <==", - "==\u003e Last Start \u003c==": "==> Ostatni start <==", + "==\u003e Audit \u003c==": "==\u003e Audyt \u003c==", + "==\u003e Last Start \u003c==": "==\u003e Ostatni start \u003c==", "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN lub zapora sieciowa przeszkadza w komunikacji protokołem HTTP z maszyną wirtualną minikube. Spróbuj użyć innego sterownika: https://minikube.sigs.k8s.io/docs/start/", "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", @@ -54,7 +54,6 @@ "Allow user prompts for more information": "", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], gdzie jednostka to = b, k, m lub g)", - "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], gdzie jednostka to = b, k, m or g)", "Amount of RAM to allocate to Kubernetes (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "", "Amount of time to wait for a service in seconds": "Czas oczekiwania na serwis w sekundach", "Amount of time to wait for service in seconds": "Czas oczekiwania na serwis w sekundach", @@ -68,7 +67,7 @@ "Basic Commands:": "Podstawowe polecenia", "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Z powodu użycia sterownika dockera na systemie operacyjnym {{.operating_system}}, terminal musi zostać uruchomiony.", "Bind Address: {{.Address}}": "", - "Booting up control plane ...": "Uruchamianie płaszczyzny kontrolnej", + "Booting up control plane ...": "Uruchamianie płaszczyzny kontrolnej ...", "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "Zbuduj obraz kontenera w minikube", @@ -355,8 +354,8 @@ "Kubernetes requires at least 2 CPU's to start": "", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", "Kubernetes {{.version}} is not supported by this release of minikube": "", - "Launching Kubernetes ...": "Uruchamianie Kubernetesa...", - "Launching proxy ...": "Uruchamianie proxy", + "Launching Kubernetes ...": "Uruchamianie Kubernetesa ...", + "Launching proxy ...": "Uruchamianie proxy ...", "List all available images from the local cache.": "", "List existing minikube nodes.": "Wylistuj istniejące węzły minikube", "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", @@ -368,7 +367,7 @@ "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Nasłuchiwanie na adresie {{.listenAddr}}. Jest to niezalecane i może spowodować powstanie podaności bezpieczeństwa. Używaj na własne ryzyko", "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Wylistuj wszystkie dostępne addony minikube razem z ich obecnymi statusami (włączony/wyłączony)", "Lists all minikube profiles.": "Wylistuj wszystkie profile minikube", - "Lists all valid default values for PROPERTY_NAME": "Wylistuj wszystkie prawidłowe domyślne wartości dla opcji konfiguracyjnej NAZWA_OPCJI", + "Lists all valid default values for PROPERTY_NAME": "Wylistuj wszystkie prawidłowe domyślne wartości dla opcji konfiguracyjnej PROPERTY_NAME", "Lists all valid minikube profiles and detects all possible invalid profiles.": "Wylistuj wszystkie prawidłowe profile minikube i wykryj wszystkie nieprawidłowe profile.", "Lists the URLs for the services in your local cluster": "Wylistuj adresy URL serwisów w twoim lokalnym klastrze", "Load a image into minikube": "Załaduj obraz do minikube", @@ -391,7 +390,7 @@ "Mounts the specified directory into minikube": "Montuje podany katalog wewnątrz minikube", "Mounts the specified directory into minikube.": "Montuje podany katalog wewnątrz minikube", "Multiple errors deleting profiles": "Wystąpiło wiele błędów podczas usuwania profili", - "Multiple minikube profiles were found - ": "Znaleziono wiele profili minikube", + "Multiple minikube profiles were found - ": "Znaleziono wiele profili minikube - ", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", @@ -403,7 +402,7 @@ "No such addon {{.name}}": "Nie istnieje addon {{.name}}", "Node {{.name}} failed to start, deleting and trying again.": "Węzeł {{.name}} nie uruchomił się pomyślnie. Usuwam i próbuję uruchomić węzeł ponownie", "Node {{.name}} was successfully deleted.": "Węzeł {{.name}} został pomyślnie usunięty", - "Node {{.nodeName}} does not exist.": "Węzeł {{.name}} nie istnieje", + "Node {{.nodeName}} does not exist.": "Węzeł {{.nodeName}} nie istnieje", "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Żadne znane repozytorium nie jest osiągalne. Rozważ wyspecyfikowanie alternatywnego repozytorium za pomocą flagi --image-repository", "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Żadne znane repozytorium w twojej lokalizacji nie jest osiągalne. Używam zamiast tego {{.image_repository_name}}", "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", @@ -448,7 +447,7 @@ "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 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 : (przykład: \"/host-home:/vm-home\")", + "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\")": "", "Please try purging minikube using `minikube delete --all --purge`": "Spróbuj wyczyścic minikube używając: `minikube delete --all --purge`", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Proszę zaktualizować '{{.driver_executable}}'. {{.documentation_url}}", @@ -948,7 +947,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", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "{{.extra_option_component_name}}.{{.key}}={{.value}}", + "{{.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.", "{{.name}} has following images:": "{{.name}} ma następujące obrazy:", From 501b238841278647eb940562838dc4dc90ce4c50 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 14:09:32 -0700 Subject: [PATCH 045/153] Use "set -eu -o pipefail" for all scripts. Previously failing commands in scripts wouldn't make them actually fail. Now it does! --- hack/jenkins/test-flake-chart/jenkins_upload_tests.sh | 2 +- hack/jenkins/test-flake-chart/optimize_data.sh | 2 ++ hack/jenkins/test-flake-chart/process_data.sh | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh b/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh index 28db50692fd6..7d310f94862a 100755 --- a/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh +++ b/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -x -o pipefail +set -eu -o pipefail if [ "$#" -ne 1 ]; then echo "Wrong number of arguments. Usage: jenkins_upload_tests.sh " 1>&2 diff --git a/hack/jenkins/test-flake-chart/optimize_data.sh b/hack/jenkins/test-flake-chart/optimize_data.sh index 1fd93f1901a4..67dae593e28e 100755 --- a/hack/jenkins/test-flake-chart/optimize_data.sh +++ b/hack/jenkins/test-flake-chart/optimize_data.sh @@ -14,5 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +set -eu -o pipefail + # Take input CSV. For each field, if it is the same as the previous row, replace it with an empty string. awk -F, 'BEGIN {OFS = FS} { for(i=1; i<=NF; i++) { if($i == j[i]) { $i = ""; } else { j[i] = $i; } } printf "%s\n",$0 }' diff --git a/hack/jenkins/test-flake-chart/process_data.sh b/hack/jenkins/test-flake-chart/process_data.sh index b3a6e26a9efa..7907e6967385 100755 --- a/hack/jenkins/test-flake-chart/process_data.sh +++ b/hack/jenkins/test-flake-chart/process_data.sh @@ -14,6 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +set -eu -o pipefail + # Print header. printf "Commit Hash,Test Date,Environment,Test,Status,Duration\n" From 7c4615460088198629851054473970ba3daa363c Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 14:12:31 -0700 Subject: [PATCH 046/153] Rename jenkins_upload_tests.sh to upload_tests.sh. Since these scripts are already in the jenkins folder, having the jenkins prefix is redundant. --- hack/jenkins/common.sh | 2 +- .../{jenkins_upload_tests.sh => upload_tests.sh} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename hack/jenkins/test-flake-chart/{jenkins_upload_tests.sh => upload_tests.sh} (100%) diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh index 0832b6b3e237..9d080baa8861 100755 --- a/hack/jenkins/common.sh +++ b/hack/jenkins/common.sh @@ -442,7 +442,7 @@ if [ -z "${EXTERNAL}" ]; then echo ">> uploading ${SUMMARY_OUT}" gsutil -qm cp "${SUMMARY_OUT}" "gs://${JOB_GCS_BUCKET}_summary.json" || true if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then - ./test-flake-chart/jenkins_upload_tests.sh "${SUMMARY_OUT}" + ./test-flake-chart/upload_tests.sh "${SUMMARY_OUT}" fi else # Otherwise, put the results in a predictable spot so the upload job can find them diff --git a/hack/jenkins/test-flake-chart/jenkins_upload_tests.sh b/hack/jenkins/test-flake-chart/upload_tests.sh similarity index 100% rename from hack/jenkins/test-flake-chart/jenkins_upload_tests.sh rename to hack/jenkins/test-flake-chart/upload_tests.sh From 8f953781a2fc31ffed2ca5f8c38007de30717cc5 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 14:18:53 -0700 Subject: [PATCH 047/153] Create report_flakes script to comment on PRs about flake rates of failed tests. --- hack/jenkins/common.sh | 2 + .../jenkins/test-flake-chart/report_flakes.sh | 74 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100755 hack/jenkins/test-flake-chart/report_flakes.sh diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh index 9d080baa8861..b153185ee321 100755 --- a/hack/jenkins/common.sh +++ b/hack/jenkins/common.sh @@ -443,6 +443,8 @@ if [ -z "${EXTERNAL}" ]; then gsutil -qm cp "${SUMMARY_OUT}" "gs://${JOB_GCS_BUCKET}_summary.json" || true if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then ./test-flake-chart/upload_tests.sh "${SUMMARY_OUT}" + elif [[ "${JOB_NAME}" == "Docker_Linux" ]]; then + ./test-flake-chart/report_flakes.sh "${MINIKUBE_LOCATION}" "${SUMMARY_OUT}" "${JOB_NAME}" fi else # Otherwise, put the results in a predictable spot so the upload job can find them diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh new file mode 100755 index 000000000000..86a4e35e8f46 --- /dev/null +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# 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. + +set -eu -o pipefail + +if [ "$#" -ne 2 ]; then + echo "Wrong number of arguments. Usage: report_flakes.sh " 1>&2 + exit 1 +fi + +PR_NUMBER=$1 +SUMMARY_DATA=$2 +ENVIRONMENT=$3 + +# To prevent having a super-long comment, add a maximum number of tests to report. +MAX_REPORTED_TESTS=30 + +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +TMP_DATA=$(mktemp) +# 1) Process the data in the gopogh summary. +# 2) Filter tests to only include failed tests on the environment (and only get their names). +# 3) Sort the names of the tests. +# 4) Store in file $TMP_DATA. +< "$SUMMARY_DATA" $DIR/process_data.sh \ + | sed -n -r -e "s/[0-9a-f]*,[0-9-]*,$ENVIRONMENT,([a-zA-Z\/_-]*),Failed,[.0-9]*/\1/p" \ + | sort \ + > "$TMP_DATA" + +# Download the precomputed flake rates from the GCS bucket into file $TMP_FLAKE_RATES. +TMP_FLAKE_RATES=$(mktemp) +gsutil cp gs://minikube-flake-rate/flake_rates.csv "$TMP_FLAKE_RATES" + +TMP_FAILED_RATES="$TMP_FLAKE_RATES\_filtered" +# 1) Parse/filter the flake rates to only include the test name and flake rates for environment. +# 2) Sort the flake rates based on test name. +# 3) Join the flake rates with the failing tests to only get flake rates of failing tests. +# 4) Sort failed test flake rates based on the flakiness of that test - stable tests should be first on the list. +# 5) Store in file $TMP_FAILED_RATES. +< "$TMP_FLAKE_RATES" sed -n -r -e "s/$ENVIRONMENT,([a-zA-Z\/_-]*),([.0-9]*)/\1,\2/p" \ + | sort -t, -k1,1 \ + | join -t , -j 1 "$TMP_DATA" - \ + | sort -g -t, -k2,2 \ + > "$TMP_FAILED_RATES" + +# Create the comment template. +TMP_COMMENT=$(mktemp) +printf "These are the flake rates of all failed tests on %s.\n|Failed Tests|Flake Rate (%%)|\n|---|---|\n" "$ENVIRONMENT" > "$TMP_COMMENT" +# 1) Get the first $MAX_REPORTED_TESTS lines. +# 2) Print a row in the table with the test name, flake rate, and a link to the flake chart for that test. +# 3) Append these rows to file $TMP_COMMENT. +< "$TMP_FAILED_RATES" head -n $MAX_REPORTED_TESTS \ + | sed -n -r -e "s/([a-zA-Z\/_-]*),([.0-9]*)/|\1|\2 ([chart](https:\/\/storage.googleapis.com\/minikube-flake-rate\/flake_chart.html?env=$ENVIRONMENT\&test=\1))|/p" \ + >> "$TMP_COMMENT" + +# If there are too many failing tests, add an extra row explaining this, and a message after the table. +if [[ $(wc -l < "$TMP_FAILED_RATES") -gt 30 ]]; then + printf "|More tests...|Continued...|\n\nToo many tests failed - See test logs for more details." >> "$TMP_COMMENT" +fi + +gh issue comment "https://github.com/kubernetes/minikube/pull/$PR_NUMBER" --body "$(cat $TMP_COMMENT)" From 01221e056610e6af120b4a6d06b8b0c8f4aacfc9 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 7 Jun 2021 15:09:08 -0700 Subject: [PATCH 048/153] prevent misleading message from being logged --- pkg/minikube/image/cache.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/minikube/image/cache.go b/pkg/minikube/image/cache.go index ba544b6e332a..3a87114274f5 100644 --- a/pkg/minikube/image/cache.go +++ b/pkg/minikube/image/cache.go @@ -74,6 +74,7 @@ func SaveToDir(images []string, cacheDir string, overwrite bool) error { if err := saveToTarFile(image, dst, overwrite); err != nil { if err == errCacheImageDoesntExist { out.WarningT("The image you are trying to add {{.imageName}} doesn't exist!", out.V{"imageName": image}) + return nil } else { return errors.Wrapf(err, "caching image %q", dst) } From 103d7a683639c15a004ac9cc849818618f27252d Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 7 Jun 2021 16:31:26 -0700 Subject: [PATCH 049/153] removed return from else --- pkg/minikube/image/cache.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/minikube/image/cache.go b/pkg/minikube/image/cache.go index 3a87114274f5..17889265f77a 100644 --- a/pkg/minikube/image/cache.go +++ b/pkg/minikube/image/cache.go @@ -75,9 +75,8 @@ func SaveToDir(images []string, cacheDir string, overwrite bool) error { if err == errCacheImageDoesntExist { out.WarningT("The image you are trying to add {{.imageName}} doesn't exist!", out.V{"imageName": image}) return nil - } else { - return errors.Wrapf(err, "caching image %q", dst) } + return errors.Wrapf(err, "caching image %q", dst) } klog.Infof("save to tar file %s -> %s succeeded", image, dst) return nil From 139d7e37710ee729955ae2afd910a176a20251c9 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 16:32:20 -0700 Subject: [PATCH 050/153] Fix lints in compute_flake_rate.go and compute_flake_rate_test.go. --- .../test-flake-chart/compute_flake_rate.go | 2 +- .../compute_flake_rate_test.go | 126 +++++++++--------- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index 4f71aa3cf571..c8c9806382de 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -79,7 +79,7 @@ func ReadData(file io.Reader) []TestEntry { fields := strings.Split(line, ",") if firstLine { if len(fields) != 6 { - exit(fmt.Sprintf("Data CSV in incorrect format. Expected 6 columns, but got %d", len(fields)), fmt.Errorf("Bad CSV format")) + exit(fmt.Sprintf("Data CSV in incorrect format. Expected 6 columns, but got %d", len(fields)), fmt.Errorf("bad CSV format")) } firstLine = false } diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go index 22c1f6b47669..0154ee3b02e6 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go @@ -23,8 +23,8 @@ import ( "time" ) -func simpleDate(year int, month time.Month, day int) time.Time { - return time.Date(year, month, day, 0, 0, 0, 0, time.UTC) +func simpleDate(year int, day int) time.Time { + return time.Date(year, time.January, day, 0, 0, 0, 0, time.UTC) } func compareEntrySlices(t *testing.T, actualData, expectedData []TestEntry, extra string) { @@ -62,31 +62,31 @@ func TestReadData(t *testing.T) { { name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Passed", }, { name: "test2", environment: "env2", - date: simpleDate(2001, time.January, 1), + date: simpleDate(2001, 1), status: "Failed", }, { name: "test1", environment: "env2", - date: simpleDate(2001, time.January, 1), + date: simpleDate(2001, 1), status: "Failed", }, { name: "test1", environment: "env2", - date: simpleDate(2002, time.January, 1), + date: simpleDate(2002, 1), status: "Passed", }, { name: "test3", environment: "env3", - date: simpleDate(2003, time.January, 1), + date: simpleDate(2003, 1), status: "Passed", }, } @@ -129,44 +129,44 @@ func compareSplitData(t *testing.T, actual, expected map[string]map[string][]Tes } func TestSplitData(t *testing.T) { - entry_e1_t1_1, entry_e1_t1_2 := TestEntry{ + entryE1T1_1, entryE1T1_2 := TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Passed", }, TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 2), + date: simpleDate(2000, 2), status: "Passed", } - entry_e1_t2 := TestEntry{ + entryE1T2 := TestEntry{ name: "test2", environment: "env1", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Passed", } - entry_e2_t1 := TestEntry{ + entryE2T1 := TestEntry{ name: "test1", environment: "env2", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Passed", } - entry_e2_t2 := TestEntry{ + entryE2T2 := TestEntry{ name: "test2", environment: "env2", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Passed", } - actual := SplitData([]TestEntry{entry_e1_t1_1, entry_e1_t1_2, entry_e1_t2, entry_e2_t1, entry_e2_t2}) + actual := SplitData([]TestEntry{entryE1T1_1, entryE1T1_2, entryE1T2, entryE2T1, entryE2T2}) expected := map[string]map[string][]TestEntry{ "env1": { - "test1": {entry_e1_t1_1, entry_e1_t1_2}, - "test2": {entry_e1_t2}, + "test1": {entryE1T1_1, entryE1T1_2}, + "test2": {entryE1T2}, }, "env2": { - "test1": {entry_e2_t1}, - "test2": {entry_e2_t2}, + "test1": {entryE2T1}, + "test2": {entryE2T2}, }, } @@ -174,85 +174,85 @@ func TestSplitData(t *testing.T) { } func TestFilterRecentEntries(t *testing.T) { - entry_e1_t1_r1, entry_e1_t1_r2, entry_e1_t1_r3, entry_e1_t1_o1, entry_e1_t1_o2 := TestEntry{ + entryE1T1R1, entryE1T1R2, entryE1T1R3, entryE1T1O1, entryE1T1O2 := TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 4), + date: simpleDate(2000, 4), status: "Passed", }, TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 3), + date: simpleDate(2000, 3), status: "Passed", }, TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 3), + date: simpleDate(2000, 3), status: "Passed", }, TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 2), + date: simpleDate(2000, 2), status: "Passed", }, TestEntry{ name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Passed", } - entry_e1_t2_r1, entry_e1_t2_r2, entry_e1_t2_o1 := TestEntry{ + entryE1T2R1, entryE1T2R2, entryE1T2O1 := TestEntry{ name: "test2", environment: "env1", - date: simpleDate(2001, time.January, 3), + date: simpleDate(2001, 3), status: "Passed", }, TestEntry{ name: "test2", environment: "env1", - date: simpleDate(2001, time.January, 2), + date: simpleDate(2001, 2), status: "Passed", }, TestEntry{ name: "test2", environment: "env1", - date: simpleDate(2001, time.January, 1), + date: simpleDate(2001, 1), status: "Passed", } - entry_e2_t2_r1, entry_e2_t2_r2, entry_e2_t2_o1 := TestEntry{ + entryE2T2R1, entryE2T2R2, entryE2T2O1 := TestEntry{ name: "test2", environment: "env2", - date: simpleDate(2003, time.January, 3), + date: simpleDate(2003, 3), status: "Passed", }, TestEntry{ name: "test2", environment: "env2", - date: simpleDate(2003, time.January, 2), + date: simpleDate(2003, 2), status: "Passed", }, TestEntry{ name: "test2", environment: "env2", - date: simpleDate(2003, time.January, 1), + date: simpleDate(2003, 1), status: "Passed", } actualData := FilterRecentEntries(map[string]map[string][]TestEntry{ "env1": { "test1": { - entry_e1_t1_r1, - entry_e1_t1_r2, - entry_e1_t1_r3, - entry_e1_t1_o1, - entry_e1_t1_o2, + entryE1T1R1, + entryE1T1R2, + entryE1T1R3, + entryE1T1O1, + entryE1T1O2, }, "test2": { - entry_e1_t2_r1, - entry_e1_t2_r2, - entry_e1_t2_o1, + entryE1T2R1, + entryE1T2R2, + entryE1T2O1, }, }, "env2": { "test2": { - entry_e2_t2_r1, - entry_e2_t2_r2, - entry_e2_t2_o1, + entryE2T2R1, + entryE2T2R2, + entryE2T2O1, }, }, }, 2) @@ -260,19 +260,19 @@ func TestFilterRecentEntries(t *testing.T) { expectedData := map[string]map[string][]TestEntry{ "env1": { "test1": { - entry_e1_t1_r1, - entry_e1_t1_r2, - entry_e1_t1_r3, + entryE1T1R1, + entryE1T1R2, + entryE1T1R3, }, "test2": { - entry_e1_t2_r1, - entry_e1_t2_r2, + entryE1T2R1, + entryE1T2R2, }, }, "env2": { "test2": { - entry_e2_t2_r1, - entry_e2_t2_r2, + entryE2T2R1, + entryE2T2R2, }, }, } @@ -287,27 +287,27 @@ func TestComputeFlakeRates(t *testing.T) { { name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 4), + date: simpleDate(2000, 4), status: "Passed", }, { name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 3), + date: simpleDate(2000, 3), status: "Passed", }, { name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 3), + date: simpleDate(2000, 3), status: "Passed", }, { name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 2), + date: simpleDate(2000, 2), status: "Passed", }, { name: "test1", environment: "env1", - date: simpleDate(2000, time.January, 1), + date: simpleDate(2000, 1), status: "Failed", }, }, @@ -315,17 +315,17 @@ func TestComputeFlakeRates(t *testing.T) { { name: "test2", environment: "env1", - date: simpleDate(2001, time.January, 3), + date: simpleDate(2001, 3), status: "Failed", }, { name: "test2", environment: "env1", - date: simpleDate(2001, time.January, 2), + date: simpleDate(2001, 2), status: "Failed", }, { name: "test2", environment: "env1", - date: simpleDate(2001, time.January, 1), + date: simpleDate(2001, 1), status: "Failed", }, }, @@ -335,12 +335,12 @@ func TestComputeFlakeRates(t *testing.T) { { name: "test2", environment: "env2", - date: simpleDate(2003, time.January, 3), + date: simpleDate(2003, 3), status: "Passed", }, TestEntry{ name: "test2", environment: "env2", - date: simpleDate(2003, time.January, 2), + date: simpleDate(2003, 2), status: "Failed", }, }, From 716f6901890ae3882f4710f0fcd7c8ffc080df47 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Mon, 7 Jun 2021 16:39:06 -0700 Subject: [PATCH 051/153] Change copyright to 2021. --- hack/jenkins/test-flake-chart/collect_data.sh | 2 +- hack/jenkins/test-flake-chart/compute_flake_rate.go | 2 +- hack/jenkins/test-flake-chart/compute_flake_rate_test.go | 2 +- hack/jenkins/test-flake-chart/optimize_data.sh | 2 +- hack/jenkins/test-flake-chart/process_data.sh | 2 +- hack/jenkins/test-flake-chart/report_flakes.sh | 2 +- hack/jenkins/test-flake-chart/upload_tests.sh | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hack/jenkins/test-flake-chart/collect_data.sh b/hack/jenkins/test-flake-chart/collect_data.sh index 44273f6d802b..a03b72682576 100755 --- a/hack/jenkins/test-flake-chart/collect_data.sh +++ b/hack/jenkins/test-flake-chart/collect_data.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2018 The Kubernetes Authors All rights reserved. +# 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. diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index c8c9806382de..b3e4c2013f02 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -1,5 +1,5 @@ /* -Copyright 2020 The Kubernetes Authors All rights reserved. +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. diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go index 0154ee3b02e6..c6407c16bde1 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go @@ -1,5 +1,5 @@ /* -Copyright 2020 The Kubernetes Authors All rights reserved. +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. diff --git a/hack/jenkins/test-flake-chart/optimize_data.sh b/hack/jenkins/test-flake-chart/optimize_data.sh index 67dae593e28e..2bc140fc28e0 100755 --- a/hack/jenkins/test-flake-chart/optimize_data.sh +++ b/hack/jenkins/test-flake-chart/optimize_data.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2018 The Kubernetes Authors All rights reserved. +# 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. diff --git a/hack/jenkins/test-flake-chart/process_data.sh b/hack/jenkins/test-flake-chart/process_data.sh index 7907e6967385..25c6ba5ec695 100755 --- a/hack/jenkins/test-flake-chart/process_data.sh +++ b/hack/jenkins/test-flake-chart/process_data.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2018 The Kubernetes Authors All rights reserved. +# 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. diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index 86a4e35e8f46..1cd4490c848c 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2018 The Kubernetes Authors All rights reserved. +# 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. diff --git a/hack/jenkins/test-flake-chart/upload_tests.sh b/hack/jenkins/test-flake-chart/upload_tests.sh index 7d310f94862a..508d76f9ad10 100755 --- a/hack/jenkins/test-flake-chart/upload_tests.sh +++ b/hack/jenkins/test-flake-chart/upload_tests.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2018 The Kubernetes Authors All rights reserved. +# 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. From b4cc318d85a96989fd46abf3f7a4c64408b41d3f Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 7 Jun 2021 17:16:29 -0700 Subject: [PATCH 052/153] reword warning message --- pkg/minikube/image/cache.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/image/cache.go b/pkg/minikube/image/cache.go index 17889265f77a..03bd1dcdc00e 100644 --- a/pkg/minikube/image/cache.go +++ b/pkg/minikube/image/cache.go @@ -73,7 +73,7 @@ func SaveToDir(images []string, cacheDir string, overwrite bool) error { dst = localpath.SanitizeCacheDir(dst) if err := saveToTarFile(image, dst, overwrite); err != nil { if err == errCacheImageDoesntExist { - out.WarningT("The image you are trying to add {{.imageName}} doesn't exist!", out.V{"imageName": image}) + out.WarningT("The image '{{.imageName}}' was not found; unable to add it to cache.", out.V{"imageName": image}) return nil } return errors.Wrapf(err, "caching image %q", dst) From 3aa922813c86644510c2db7e6789dda4fa2447a7 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 8 Jun 2021 11:50:14 -0700 Subject: [PATCH 053/153] Fix wrong number of parameters for report_flakes.sh. --- hack/jenkins/test-flake-chart/report_flakes.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index 1cd4490c848c..951e929183d1 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -16,7 +16,7 @@ set -eu -o pipefail -if [ "$#" -ne 2 ]; then +if [ "$#" -ne 3 ]; then echo "Wrong number of arguments. Usage: report_flakes.sh " 1>&2 exit 1 fi From fcbae7eaa143ae6e1a330518a73f0191de132f50 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 8 Jun 2021 11:54:08 -0700 Subject: [PATCH 054/153] Make sure gh is present when running report_flakes.sh. --- hack/jenkins/test-flake-chart/report_flakes.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index 951e929183d1..b0933fa56a84 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -71,4 +71,7 @@ if [[ $(wc -l < "$TMP_FAILED_RATES") -gt 30 ]]; then printf "|More tests...|Continued...|\n\nToo many tests failed - See test logs for more details." >> "$TMP_COMMENT" fi +# install gh if not present +sudo $DIR/../installers/check_install_gh.sh || true + gh issue comment "https://github.com/kubernetes/minikube/pull/$PR_NUMBER" --body "$(cat $TMP_COMMENT)" From 693cd7c6da4829463d7fb823996b8873bc67a56c Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 7 Jun 2021 19:30:32 -0700 Subject: [PATCH 055/153] restructure TestErrorSpam to decrease test duration --- test/integration/error_spam_test.go | 104 +++++++++++++++------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index 24248a3a38c5..f0504119f847 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -119,92 +119,96 @@ func TestErrorSpam(t *testing.T) { } logTests := []struct { - command string - args []string - runCount int // number of times to run command - expectedLogFiles int // number of logfiles expected after running command runCount times + command string + args []string }{ { - command: "start", - args: []string{"--dry-run"}, - runCount: 175, // calling this 175 times should create 2 files with 1 greater than 1M - expectedLogFiles: 2, + command: "start", + args: []string{"--dry-run"}, }, { - command: "status", - runCount: 100, - expectedLogFiles: 1, + command: "status", }, { - command: "pause", - runCount: 5, - expectedLogFiles: 1, + command: "pause", }, { - command: "unpause", - runCount: 1, - expectedLogFiles: 1, + command: "unpause", }, { - command: "stop", - runCount: 1, - expectedLogFiles: 1, + command: "stop", }, } for _, test := range logTests { t.Run(test.command, func(t *testing.T) { - - // flags can be before subcommand - args := []string{"-p", profile, "--log_dir", logDir, test.command} - args = append(args, test.args...) - // before starting the test, ensure no other logs from the current command are written logFiles, err := filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", test.command))) if err != nil { - t.Errorf("failed to get old log files for command %s : %v", test.command, err) + t.Fatalf("failed to get old log files for command %s : %v", test.command, err) } cleanupLogFiles(t, logFiles) - // run command runCount times - for i := 0; i < test.runCount; i++ { + args := []string{"-p", profile, "--log_dir", logDir, test.command} + args = append(args, test.args...) + + // run command twice + for i := 0; i < 2; i++ { rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("%q failed: %v", rr.Command(), err) } } - // get log files generated above + // check if one log file exists + if err := checkLogFileCount(test.command, logDir, 1); err != nil { + t.Fatal(err) + } + + // get log file generated above logFiles, err = filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", test.command))) if err != nil { - t.Errorf("failed to get new log files for command %s : %v", test.command, err) + t.Fatalf("failed to get new log files for command %s : %v", test.command, err) } - // if not the expected number of files, throw err - if len(logFiles) != test.expectedLogFiles { - t.Errorf("failed to find expected number of log files: cmd %s: expected: %d got %d", test.command, test.expectedLogFiles, len(logFiles)) + // make file at least 1024 KB in size + f, err := os.OpenFile(logFiles[0], os.O_APPEND|os.O_WRONLY, 0644) + if err != nil { + t.Fatalf("failed to open newly created log file: %v", err) + } + if err := f.Truncate(2e7); err != nil { + t.Fatalf("failed to increase file size to 1024KB: %v", err) + } + if err := f.Close(); err != nil { + t.Fatalf("failed to close log file: %v", err) } - // if more than 1 logfile is expected, only one file should be less than 1M - if test.expectedLogFiles > 1 { - foundSmall := false - var maxSize int64 = 1024 * 1024 // 1M - for _, logFile := range logFiles { - finfo, err := os.Stat(logFile) - if err != nil { - t.Logf("logfile %q for command %q not found:", logFile, test.command) - continue - } - isSmall := finfo.Size() < maxSize - if isSmall && !foundSmall { - foundSmall = true - } else if isSmall && foundSmall { - t.Errorf("expected to find only one file less than 1MB: cmd %s:", test.command) - } - } + // run commmand again + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("%q failed: %v", rr.Command(), err) + } + + // check if two log files exist now + if err := checkLogFileCount(test.command, logDir, 2); err != nil { + t.Fatal(err) } }) } } +func checkLogFileCount(command string, logDir string, expectedNumberOfLogFiles int) error { + // get log files generated above + logFiles, err := filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", command))) + if err != nil { + return fmt.Errorf("failed to get new log files for command %s : %v", command, err) + } + + if len(logFiles) != expectedNumberOfLogFiles { + return fmt.Errorf("Running cmd %q resulted in %d log file(s); expected: %d", command, len(logFiles), expectedNumberOfLogFiles) + } + + return nil +} + // cleanupLogFiles removes logfiles generated during testing func cleanupLogFiles(t *testing.T, logFiles []string) { t.Logf("Cleaning up %d logfile(s) ...", len(logFiles)) From 44d0312a8a6d23968c55b5663a0b53e093aa23bd Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 7 Jun 2021 19:43:05 -0700 Subject: [PATCH 056/153] fix typo in comment --- test/integration/error_spam_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index f0504119f847..a6ed815cf6c8 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -180,7 +180,7 @@ func TestErrorSpam(t *testing.T) { t.Fatalf("failed to close log file: %v", err) } - // run commmand again + // run command again rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("%q failed: %v", rr.Command(), err) From 7b65030ff125b3b08ac822a7a0bd1d26a952adf1 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 7 Jun 2021 19:51:04 -0700 Subject: [PATCH 057/153] added func to get log files --- test/integration/error_spam_test.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index a6ed815cf6c8..229e971a10df 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -140,7 +140,7 @@ func TestErrorSpam(t *testing.T) { for _, test := range logTests { t.Run(test.command, func(t *testing.T) { // before starting the test, ensure no other logs from the current command are written - logFiles, err := filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", test.command))) + logFiles, err := getLogFiles(logDir, test.command) if err != nil { t.Fatalf("failed to get old log files for command %s : %v", test.command, err) } @@ -163,7 +163,7 @@ func TestErrorSpam(t *testing.T) { } // get log file generated above - logFiles, err = filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", test.command))) + logFiles, err = getLogFiles(logDir, test.command) if err != nil { t.Fatalf("failed to get new log files for command %s : %v", test.command, err) } @@ -195,9 +195,13 @@ func TestErrorSpam(t *testing.T) { } } +func getLogFiles(logDir string, command string) ([]string, error) { + return filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", command))) +} + func checkLogFileCount(command string, logDir string, expectedNumberOfLogFiles int) error { // get log files generated above - logFiles, err := filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", command))) + logFiles, err := getLogFiles(logDir, command) if err != nil { return fmt.Errorf("failed to get new log files for command %s : %v", command, err) } From bcbf87306eb9e855b94af1f4edb623eaffc2f53e Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 8 Jun 2021 12:09:28 -0700 Subject: [PATCH 058/153] fix truncation on Windows --- test/integration/error_spam_test.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index 229e971a10df..ad405a6c3908 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -153,7 +153,7 @@ func TestErrorSpam(t *testing.T) { for i := 0; i < 2; i++ { rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { - t.Errorf("%q failed: %v", rr.Command(), err) + t.Logf("%q failed: %v", rr.Command(), err) } } @@ -169,21 +169,14 @@ func TestErrorSpam(t *testing.T) { } // make file at least 1024 KB in size - f, err := os.OpenFile(logFiles[0], os.O_APPEND|os.O_WRONLY, 0644) - if err != nil { - t.Fatalf("failed to open newly created log file: %v", err) - } - if err := f.Truncate(2e7); err != nil { + if err := os.Truncate(logFiles[0], 2e7); err != nil { t.Fatalf("failed to increase file size to 1024KB: %v", err) } - if err := f.Close(); err != nil { - t.Fatalf("failed to close log file: %v", err) - } // run command again rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { - t.Errorf("%q failed: %v", rr.Command(), err) + t.Logf("%q failed: %v", rr.Command(), err) } // check if two log files exist now From fb8e4d982bce78c88183e4360e6843a81f60380a Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 8 Jun 2021 13:06:28 -0700 Subject: [PATCH 059/153] Clean up compute_flake_rate.go. --- hack/jenkins/test-flake-chart/compute_flake_rate.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index b3e4c2013f02..69d40042f2f9 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -155,7 +155,7 @@ func FilterRecentEntries(splitEntries map[string]map[string][]TestEntry, dateRan return dates[j].Before(dates[i]) }) datesInRange := make([]time.Time, 0, dateRange) - var lastDate time.Time = time.Date(0, 0, 0, 0, 0, 0, 0, time.Local) + var lastDate time.Time // Go through each date. for _, date := range dates { // If date is the same as last date, ignore it. @@ -175,7 +175,7 @@ func FilterRecentEntries(splitEntries map[string]map[string][]TestEntry, dateRan for _, entry := range testSplit { // Look for the first element <= entry.date index := sort.Search(len(datesInRange), func(i int) bool { - return datesInRange[i].Before(entry.date) || datesInRange[i].Equal(entry.date) + return !datesInRange[i].After(entry.date) }) // If no date is <= entry.date, or the found date does not equal entry.date. if index == len(datesInRange) || !datesInRange[index].Equal(entry.date) { From 07b89c9b94c3006e686dca6a24f20e802855700a Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 8 Jun 2021 13:30:23 -0700 Subject: [PATCH 060/153] moved parentn logic into subtest --- test/integration/error_spam_test.go | 76 +++++++++++++++-------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index ad405a6c3908..6333e5eace6c 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -70,53 +70,55 @@ func TestErrorSpam(t *testing.T) { } defer os.RemoveAll(logDir) - // This should likely use multi-node once it's ready - // use `--log_dir` flag to run isolated and avoid race condition - ie, failing to clean up (locked) log files created by other concurently-run tests, or counting them in results - args := append([]string{"start", "-p", profile, "-n=1", "--memory=2250", "--wait=false", fmt.Sprintf("--log_dir=%s", logDir)}, StartArgs()...) - - rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err != nil { - t.Errorf("%q failed: %v", rr.Command(), err) - } + t.Run("setup", func(t *testing.T) { + // This should likely use multi-node once it's ready + // use `--log_dir` flag to run isolated and avoid race condition - ie, failing to clean up (locked) log files created by other concurently-run tests, or counting them in results + args := append([]string{"start", "-p", profile, "-n=1", "--memory=2250", "--wait=false", fmt.Sprintf("--log_dir=%s", logDir)}, StartArgs()...) + + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("%q failed: %v", rr.Command(), err) + } - stdout := rr.Stdout.String() - stderr := rr.Stderr.String() + stdout := rr.Stdout.String() + stderr := rr.Stderr.String() - for _, line := range strings.Split(stderr, "\n") { - if stderrAllowRe.MatchString(line) { - t.Logf("acceptable stderr: %q", line) - continue - } + for _, line := range strings.Split(stderr, "\n") { + if stderrAllowRe.MatchString(line) { + t.Logf("acceptable stderr: %q", line) + continue + } - if len(strings.TrimSpace(line)) > 0 { - t.Errorf("unexpected stderr: %q", line) + if len(strings.TrimSpace(line)) > 0 { + t.Errorf("unexpected stderr: %q", line) + } } - } - for _, line := range strings.Split(stdout, "\n") { - keywords := []string{"error", "fail", "warning", "conflict"} - for _, keyword := range keywords { - if strings.Contains(line, keyword) { - t.Errorf("unexpected %q in stdout: %q", keyword, line) + for _, line := range strings.Split(stdout, "\n") { + keywords := []string{"error", "fail", "warning", "conflict"} + for _, keyword := range keywords { + if strings.Contains(line, keyword) { + t.Errorf("unexpected %q in stdout: %q", keyword, line) + } } } - } - if t.Failed() { - t.Logf("minikube stdout:\n%s", stdout) - t.Logf("minikube stderr:\n%s", stderr) - } + if t.Failed() { + t.Logf("minikube stdout:\n%s", stdout) + t.Logf("minikube stderr:\n%s", stderr) + } - steps := []string{ - "Generating certificates and keys ...", - "Booting up control plane ...", - "Configuring RBAC rules ...", - } - for _, step := range steps { - if !strings.Contains(stdout, step) { - t.Errorf("missing kubeadm init sub-step %q", step) + steps := []string{ + "Generating certificates and keys ...", + "Booting up control plane ...", + "Configuring RBAC rules ...", } - } + for _, step := range steps { + if !strings.Contains(stdout, step) { + t.Errorf("missing kubeadm init sub-step %q", step) + } + } + }) logTests := []struct { command string From 64a41824c53cd396e29af8e40a1e5ab125aa9bf4 Mon Sep 17 00:00:00 2001 From: minikube-bot Date: Wed, 9 Jun 2021 00:28:52 +0000 Subject: [PATCH 061/153] Update kicbase to v0.0.23 --- pkg/drivers/kic/types.go | 8 ++++---- site/content/en/docs/commands/start.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go index e71836de8a12..627e54775e36 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.22-1620785771-11384" + Version = "v0.0.23" // SHA of the kic base image - baseImageSHA = "f5844fe35994179bbad8dda27d4912304a2fedccdf0bf93ce8b2ec2b3b83af1c" + baseImageSHA = "baf6d94b2050bcbecd98994e265cf965a4f4768978620ccf5227a6dcb75ade45" // 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 = "kicbase/build" + dockerhubRepo = "kicbase/stable" ) var ( diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md index ceb8509316e1..f0a4b7770eed 100644 --- a/site/content/en/docs/commands/start.md +++ b/site/content/en/docs/commands/start.md @@ -26,7 +26,7 @@ minikube start [flags] --apiserver-names strings A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine --apiserver-port int The apiserver listening port (default 8443) --auto-update-drivers If set, automatically updates drivers to the latest version. Defaults to true. (default true) - --base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.22-1620785771-11384@sha256:f5844fe35994179bbad8dda27d4912304a2fedccdf0bf93ce8b2ec2b3b83af1c") + --base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase:v0.0.23@sha256:baf6d94b2050bcbecd98994e265cf965a4f4768978620ccf5227a6dcb75ade45") --cache-images If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none. (default true) --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") From 0bf3855ee1455a7ab711f01afdc3de893b3f0a6d Mon Sep 17 00:00:00 2001 From: minikube-bot Date: Wed, 9 Jun 2021 01:11:03 +0000 Subject: [PATCH 062/153] Update ISO to v1.21.0 --- Makefile | 2 +- site/content/en/docs/commands/start.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0c072af78258..1802a9657512 100644 --- a/Makefile +++ b/Makefile @@ -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.20.0 +ISO_VERSION ?= v1.21.0 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta DEB_VERSION ?= $(subst -,~,$(RAW_VERSION)) DEB_REVISION ?= 0 diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md index ceb8509316e1..00c7e663ef7e 100644 --- a/site/content/en/docs/commands/start.md +++ b/site/content/en/docs/commands/start.md @@ -64,7 +64,7 @@ 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/iso/minikube-v1.20.0.iso,https://github.com/kubernetes/minikube/releases/download/v1.20.0/minikube-v1.20.0.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.20.0.iso]) + --iso-url strings Locations to fetch the minikube ISO from. (default [https://storage.googleapis.com/minikube/iso/minikube-v1.21.0.iso,https://github.com/kubernetes/minikube/releases/download/v1.21.0/minikube-v1.21.0.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.21.0.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.20.7, 'latest' for v1.22.0-alpha.2). Defaults to 'stable'. --kvm-gpu Enable experimental NVIDIA GPU support in minikube From 5bfde7ab389229d90b0262ba27debb06ec29d3fe Mon Sep 17 00:00:00 2001 From: Medya Ghazizadeh Date: Wed, 9 Jun 2021 14:29:35 -0400 Subject: [PATCH 063/153] Update triage.md --- site/content/en/docs/contrib/triage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/en/docs/contrib/triage.md b/site/content/en/docs/contrib/triage.md index e8627516de59..b0a0d5a757d4 100644 --- a/site/content/en/docs/contrib/triage.md +++ b/site/content/en/docs/contrib/triage.md @@ -9,7 +9,7 @@ description: > Community triage takes place **every Wednesday** from **11AM-12PM PST**. -- Hangouts link: https://meet.google.com/ikf-fvrs-eer +- Hangouts link: https://meet.google.com/sss-wdet-gwe - Google Group: https://groups.google.com/forum/#!forum/minikube-dev All community members are welcome and encouraged to join and help us triage minikube! From 3b27578610df513b975bc9199eaf66b8cb751f9a Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Wed, 9 Jun 2021 15:11:03 -0700 Subject: [PATCH 064/153] delete `minikube-integration` folder in case last test failed to delete it --- hack/jenkins/windows_integration_setup.ps1 | 5 +++-- hack/jenkins/windows_integration_teardown.ps1 | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hack/jenkins/windows_integration_setup.ps1 b/hack/jenkins/windows_integration_setup.ps1 index e1bcb027e559..e36def6b4563 100644 --- a/hack/jenkins/windows_integration_setup.ps1 +++ b/hack/jenkins/windows_integration_setup.ps1 @@ -12,9 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -$test_root="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" -$test_home="$test_root\$env:COMMIT" +$test_home="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" $env:KUBECONFIG="$test_home\kubeconfig" $env:MINIKUBE_HOME="$test_home\.minikube" +# delete in case previous test was unexpectedly ended and teardown wasn't run +rm -r $test_home mkdir -p $test_home diff --git a/hack/jenkins/windows_integration_teardown.ps1 b/hack/jenkins/windows_integration_teardown.ps1 index 49f8e1272b0a..bd838bfcf668 100644 --- a/hack/jenkins/windows_integration_teardown.ps1 +++ b/hack/jenkins/windows_integration_teardown.ps1 @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -$test_root="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" -$test_home="$test_root\$env:COMMIT" +$test_home="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" rm -r $test_home From e089973f6530a2f598a9ae041b8717523fd479cf Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 9 Jun 2021 15:21:43 -0700 Subject: [PATCH 065/153] Create SplitEntryMap type to simplify some definitions. --- .../test-flake-chart/compute_flake_rate.go | 15 +++++++++------ .../test-flake-chart/compute_flake_rate_test.go | 10 +++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index 69d40042f2f9..4da2e48ab468 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -60,6 +60,9 @@ type TestEntry struct { status string } +// A map with keys of (environment, test_name) to values of slcies of TestEntry. +type SplitEntryMap map[string]map[string][]TestEntry + // Reads CSV `file` and consumes each line to be a single TestEntry. func ReadData(file io.Reader) []TestEntry { testEntries := []TestEntry{} @@ -110,8 +113,8 @@ func ReadData(file io.Reader) []TestEntry { } // Splits `testEntries` up into maps indexed first by environment and then by test. -func SplitData(testEntries []TestEntry) map[string]map[string][]TestEntry { - splitEntries := make(map[string]map[string][]TestEntry) +func SplitData(testEntries []TestEntry) SplitEntryMap { + splitEntries := make(SplitEntryMap) for _, entry := range testEntries { appendEntry(splitEntries, entry.environment, entry.name, entry) @@ -121,7 +124,7 @@ func SplitData(testEntries []TestEntry) map[string]map[string][]TestEntry { } // Appends `entry` to `splitEntries` at the `environment` and `test`. -func appendEntry(splitEntries map[string]map[string][]TestEntry, environment, test string, entry TestEntry) { +func appendEntry(splitEntries SplitEntryMap, environment, test string, entry TestEntry) { // Lookup the environment. environmentSplit, ok := splitEntries[environment] if !ok { @@ -141,8 +144,8 @@ func appendEntry(splitEntries map[string]map[string][]TestEntry, environment, te } // Filters `splitEntries` to include only the most recent `date_range` dates. -func FilterRecentEntries(splitEntries map[string]map[string][]TestEntry, dateRange uint) map[string]map[string][]TestEntry { - filteredEntries := make(map[string]map[string][]TestEntry) +func FilterRecentEntries(splitEntries SplitEntryMap, dateRange uint) SplitEntryMap { + filteredEntries := make(SplitEntryMap) for environment, environmentSplit := range splitEntries { for test, testSplit := range environmentSplit { @@ -189,7 +192,7 @@ func FilterRecentEntries(splitEntries map[string]map[string][]TestEntry, dateRan } // Computes the flake rates over each entry in `splitEntries`. -func ComputeFlakeRates(splitEntries map[string]map[string][]TestEntry) map[string]map[string]float32 { +func ComputeFlakeRates(splitEntries SplitEntryMap) map[string]map[string]float32 { flakeRates := make(map[string]map[string]float32) for environment, environmentSplit := range splitEntries { for test, testSplit := range environmentSplit { diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go index c6407c16bde1..897d32311a8a 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go @@ -94,7 +94,7 @@ func TestReadData(t *testing.T) { compareEntrySlices(t, actualData, expectedData, "") } -func compareSplitData(t *testing.T, actual, expected map[string]map[string][]TestEntry) { +func compareSplitData(t *testing.T, actual, expected SplitEntryMap) { for environment, actualTests := range actual { expectedTests, environmentOk := expected[environment] if !environmentOk { @@ -159,7 +159,7 @@ func TestSplitData(t *testing.T) { status: "Passed", } actual := SplitData([]TestEntry{entryE1T1_1, entryE1T1_2, entryE1T2, entryE2T1, entryE2T2}) - expected := map[string]map[string][]TestEntry{ + expected := SplitEntryMap{ "env1": { "test1": {entryE1T1_1, entryE1T1_2}, "test2": {entryE1T2}, @@ -233,7 +233,7 @@ func TestFilterRecentEntries(t *testing.T) { status: "Passed", } - actualData := FilterRecentEntries(map[string]map[string][]TestEntry{ + actualData := FilterRecentEntries(SplitEntryMap{ "env1": { "test1": { entryE1T1R1, @@ -257,7 +257,7 @@ func TestFilterRecentEntries(t *testing.T) { }, }, 2) - expectedData := map[string]map[string][]TestEntry{ + expectedData := SplitEntryMap{ "env1": { "test1": { entryE1T1R1, @@ -281,7 +281,7 @@ func TestFilterRecentEntries(t *testing.T) { } func TestComputeFlakeRates(t *testing.T) { - actualData := ComputeFlakeRates(map[string]map[string][]TestEntry{ + actualData := ComputeFlakeRates(SplitEntryMap{ "env1": { "test1": { { From e37f4e4014d2fe9b51649b5f14791f684370ac4d Mon Sep 17 00:00:00 2001 From: ilya-zuyev <69652564+ilya-zuyev@users.noreply.github.com> Date: Wed, 9 Jun 2021 15:26:01 -0700 Subject: [PATCH 066/153] Revert "Restore "containerd: upgrade io.containerd.runtime.v1.linux to io.containerd.runc.v2 (suppot cgroup v2)"" --- pkg/minikube/cruntime/containerd.go | 22 ++++++++++++---------- test/integration/docker_test.go | 2 +- test/integration/status_test.go | 4 ++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index 0ce5207646b0..ccd8a679eca3 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -49,6 +49,7 @@ const ( containerdConfigTemplate = `root = "/var/lib/containerd" state = "/run/containerd" oom_score = 0 + [grpc] address = "/run/containerd/containerd.sock" uid = 0 @@ -78,21 +79,16 @@ oom_score = 0 enable_selinux = false sandbox_image = "{{ .PodInfraContainerImage }}" stats_collect_period = 10 + systemd_cgroup = {{ .SystemdCgroup }} enable_tls_streaming = false max_container_log_line_size = 16384 - - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = {{ .SystemdCgroup }} - [plugins.cri.containerd] snapshotter = "overlayfs" + no_pivot = true [plugins.cri.containerd.default_runtime] - runtime_type = "io.containerd.runc.v2" + runtime_type = "io.containerd.runtime.v1.linux" + runtime_engine = "" + runtime_root = "" [plugins.cri.containerd.untrusted_workload_runtime] runtime_type = "" runtime_engine = "" @@ -111,6 +107,12 @@ oom_score = 0 {{ end -}} [plugins.diff-service] default = ["walking"] + [plugins.linux] + shim = "containerd-shim" + runtime = "runc" + runtime_root = "" + no_shim = false + shim_debug = false [plugins.scheduler] pause_threshold = 0.02 deletion_threshold = 0 diff --git a/test/integration/docker_test.go b/test/integration/docker_test.go index c7db90f6c29d..c20e05126c02 100644 --- a/test/integration/docker_test.go +++ b/test/integration/docker_test.go @@ -114,7 +114,7 @@ func validateContainerdSystemd(ctx context.Context, t *testing.T, profile string if err != nil { t.Errorf("failed to get docker cgroup driver. args %q: %v", rr.Command(), err) } - if !strings.Contains(rr.Output(), "SystemdCgroup = true") { + if !strings.Contains(rr.Output(), "systemd_cgroup = true") { t.Fatalf("expected systemd cgroup driver, got: %v", rr.Output()) } } diff --git a/test/integration/status_test.go b/test/integration/status_test.go index 6bebab499866..3b78642a96c8 100644 --- a/test/integration/status_test.go +++ b/test/integration/status_test.go @@ -65,7 +65,7 @@ func TestInsufficientStorage(t *testing.T) { verifyClusterState(t, stdout) } -// runStatusCmd runs the status command expecting non-zero exit code and returns stdout +// runStatusCmd runs the status command and returns stdout func runStatusCmd(ctx context.Context, t *testing.T, profile string, increaseEnv bool) []byte { // make sure minikube status shows insufficient storage c := exec.CommandContext(ctx, Target(), "status", "-p", profile, "--output=json", "--layout=cluster") @@ -76,7 +76,7 @@ func runStatusCmd(ctx context.Context, t *testing.T, profile string, increaseEnv rr, err := Run(t, c) // status exits non-0 if status isn't Running if err == nil { - t.Fatalf("expected command to fail, but it succeeded: %v", rr.Command()) + t.Fatalf("expected command to fail, but it succeeded: %v\n%v", rr.Command(), err) } return rr.Stdout.Bytes() } From 22ca607c6a71ba3bfecd9506f965714b30cbf960 Mon Sep 17 00:00:00 2001 From: Felipe Crescencio de Oliveira Date: Thu, 10 Jun 2021 00:31:02 -0300 Subject: [PATCH 067/153] Fix: Certificates folder for x509 error For x509: certificate signed by unknown authority problem in minikube since version v1.20.0 I just found `~/.minikube/certs` dir. I pasted my PEM files over there and it solve my problem. --- site/content/en/docs/handbook/vpn_and_proxy.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/site/content/en/docs/handbook/vpn_and_proxy.md b/site/content/en/docs/handbook/vpn_and_proxy.md index bcd92ee5c8e5..5b9260185346 100644 --- a/site/content/en/docs/handbook/vpn_and_proxy.md +++ b/site/content/en/docs/handbook/vpn_and_proxy.md @@ -93,6 +93,10 @@ Ask your IT department for the appropriate PEM file, and add it to: `~/.minikube/files/etc/ssl/certs` +or + +`~/.minikube/certs` + Then run `minikube delete` and `minikube start`. #### downloading binaries: proxyconnect tcp: tls: oversized record received with length 20527 From cc89907cca07d176f281ebcf968dfce69d094fbd Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Thu, 10 Jun 2021 10:40:49 -0700 Subject: [PATCH 068/153] add -Force to folder rm --- hack/jenkins/windows_integration_setup.ps1 | 2 +- hack/jenkins/windows_integration_teardown.ps1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hack/jenkins/windows_integration_setup.ps1 b/hack/jenkins/windows_integration_setup.ps1 index e36def6b4563..510cccbfc37f 100644 --- a/hack/jenkins/windows_integration_setup.ps1 +++ b/hack/jenkins/windows_integration_setup.ps1 @@ -17,5 +17,5 @@ $env:KUBECONFIG="$test_home\kubeconfig" $env:MINIKUBE_HOME="$test_home\.minikube" # delete in case previous test was unexpectedly ended and teardown wasn't run -rm -r $test_home +rm -r -Force $test_home mkdir -p $test_home diff --git a/hack/jenkins/windows_integration_teardown.ps1 b/hack/jenkins/windows_integration_teardown.ps1 index bd838bfcf668..2dc1248f7e66 100644 --- a/hack/jenkins/windows_integration_teardown.ps1 +++ b/hack/jenkins/windows_integration_teardown.ps1 @@ -14,4 +14,4 @@ $test_home="$env:HOMEDRIVE$env:HOMEPATH\minikube-integration" -rm -r $test_home +rm -r -Force $test_home From e9e7b85e025878bc83279d9afbf1553b6de3f59d Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 11:08:44 -0700 Subject: [PATCH 069/153] Make types and functions private. --- .../test-flake-chart/compute_flake_rate.go | 34 ++++++------ .../compute_flake_rate_test.go | 52 +++++++++---------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index 4da2e48ab468..be741f5bb135 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -41,10 +41,10 @@ func main() { exit("Unable to read data CSV", err) } - testEntries := ReadData(file) - splitEntries := SplitData(testEntries) - filteredEntries := FilterRecentEntries(splitEntries, *dateRange) - flakeRates := ComputeFlakeRates(filteredEntries) + testEntries := readData(file) + splitEntries := splitData(testEntries) + filteredEntries := filterRecentEntries(splitEntries, *dateRange) + flakeRates := computeFlakeRates(filteredEntries) fmt.Println("Environment,Test,Flake Rate") for environment, environmentSplit := range flakeRates { for test, flakeRate := range environmentSplit { @@ -53,7 +53,7 @@ func main() { } } -type TestEntry struct { +type testEntry struct { name string environment string date time.Time @@ -61,11 +61,11 @@ type TestEntry struct { } // A map with keys of (environment, test_name) to values of slcies of TestEntry. -type SplitEntryMap map[string]map[string][]TestEntry +type splitEntryMap map[string]map[string][]testEntry // Reads CSV `file` and consumes each line to be a single TestEntry. -func ReadData(file io.Reader) []TestEntry { - testEntries := []TestEntry{} +func readData(file io.Reader) []testEntry { + testEntries := []testEntry{} fileReader := bufio.NewReaderSize(file, 256) previousLine := []string{"", "", "", "", "", ""} @@ -101,7 +101,7 @@ func ReadData(file io.Reader) []TestEntry { if err != nil { fmt.Printf("Failed to parse date: %v\n", err) } - testEntries = append(testEntries, TestEntry{ + testEntries = append(testEntries, testEntry{ name: fields[3], environment: fields[2], date: date, @@ -113,8 +113,8 @@ func ReadData(file io.Reader) []TestEntry { } // Splits `testEntries` up into maps indexed first by environment and then by test. -func SplitData(testEntries []TestEntry) SplitEntryMap { - splitEntries := make(SplitEntryMap) +func splitData(testEntries []testEntry) splitEntryMap { + splitEntries := make(splitEntryMap) for _, entry := range testEntries { appendEntry(splitEntries, entry.environment, entry.name, entry) @@ -124,12 +124,12 @@ func SplitData(testEntries []TestEntry) SplitEntryMap { } // Appends `entry` to `splitEntries` at the `environment` and `test`. -func appendEntry(splitEntries SplitEntryMap, environment, test string, entry TestEntry) { +func appendEntry(splitEntries splitEntryMap, environment, test string, entry testEntry) { // Lookup the environment. environmentSplit, ok := splitEntries[environment] if !ok { // If the environment map is missing, make a map for this environment and store it. - environmentSplit = make(map[string][]TestEntry) + environmentSplit = make(map[string][]testEntry) splitEntries[environment] = environmentSplit } @@ -137,15 +137,15 @@ func appendEntry(splitEntries SplitEntryMap, environment, test string, entry Tes testSplit, ok := environmentSplit[test] if !ok { // If the test is missing, make a slice for this test. - testSplit = make([]TestEntry, 0) + testSplit = make([]testEntry, 0) // The slice is not inserted, since it will be replaced anyway. } environmentSplit[test] = append(testSplit, entry) } // Filters `splitEntries` to include only the most recent `date_range` dates. -func FilterRecentEntries(splitEntries SplitEntryMap, dateRange uint) SplitEntryMap { - filteredEntries := make(SplitEntryMap) +func filterRecentEntries(splitEntries splitEntryMap, dateRange uint) splitEntryMap { + filteredEntries := make(splitEntryMap) for environment, environmentSplit := range splitEntries { for test, testSplit := range environmentSplit { @@ -192,7 +192,7 @@ func FilterRecentEntries(splitEntries SplitEntryMap, dateRange uint) SplitEntryM } // Computes the flake rates over each entry in `splitEntries`. -func ComputeFlakeRates(splitEntries SplitEntryMap) map[string]map[string]float32 { +func computeFlakeRates(splitEntries splitEntryMap) map[string]map[string]float32 { flakeRates := make(map[string]map[string]float32) for environment, environmentSplit := range splitEntries { for test, testSplit := range environmentSplit { diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go index 897d32311a8a..2f458daad97f 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go @@ -27,7 +27,7 @@ func simpleDate(year int, day int) time.Time { return time.Date(year, time.January, day, 0, 0, 0, 0, time.UTC) } -func compareEntrySlices(t *testing.T, actualData, expectedData []TestEntry, extra string) { +func compareEntrySlices(t *testing.T, actualData, expectedData []testEntry, extra string) { if extra != "" { extra = fmt.Sprintf(" (%s)", extra) } @@ -50,7 +50,7 @@ func compareEntrySlices(t *testing.T, actualData, expectedData []TestEntry, extr } func TestReadData(t *testing.T) { - actualData := ReadData(strings.NewReader( + actualData := readData(strings.NewReader( `A,B,C,D,E,F hash,2000-01-01,env1,test1,Passed,1 hash,2001-01-01,env2,test2,Failed,1 @@ -58,7 +58,7 @@ func TestReadData(t *testing.T) { hash,2002-01-01,,,Passed,1 hash,2003-01-01,env3,test3,Passed,1`, )) - expectedData := []TestEntry{ + expectedData := []testEntry{ { name: "test1", environment: "env1", @@ -94,7 +94,7 @@ func TestReadData(t *testing.T) { compareEntrySlices(t, actualData, expectedData, "") } -func compareSplitData(t *testing.T, actual, expected SplitEntryMap) { +func compareSplitData(t *testing.T, actual, expected splitEntryMap) { for environment, actualTests := range actual { expectedTests, environmentOk := expected[environment] if !environmentOk { @@ -129,37 +129,37 @@ func compareSplitData(t *testing.T, actual, expected SplitEntryMap) { } func TestSplitData(t *testing.T) { - entryE1T1_1, entryE1T1_2 := TestEntry{ + entryE1T1_1, entryE1T1_2 := testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 1), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 2), status: "Passed", } - entryE1T2 := TestEntry{ + entryE1T2 := testEntry{ name: "test2", environment: "env1", date: simpleDate(2000, 1), status: "Passed", } - entryE2T1 := TestEntry{ + entryE2T1 := testEntry{ name: "test1", environment: "env2", date: simpleDate(2000, 1), status: "Passed", } - entryE2T2 := TestEntry{ + entryE2T2 := testEntry{ name: "test2", environment: "env2", date: simpleDate(2000, 1), status: "Passed", } - actual := SplitData([]TestEntry{entryE1T1_1, entryE1T1_2, entryE1T2, entryE2T1, entryE2T2}) - expected := SplitEntryMap{ + actual := splitData([]testEntry{entryE1T1_1, entryE1T1_2, entryE1T2, entryE2T1, entryE2T2}) + expected := splitEntryMap{ "env1": { "test1": {entryE1T1_1, entryE1T1_2}, "test2": {entryE1T2}, @@ -174,66 +174,66 @@ func TestSplitData(t *testing.T) { } func TestFilterRecentEntries(t *testing.T) { - entryE1T1R1, entryE1T1R2, entryE1T1R3, entryE1T1O1, entryE1T1O2 := TestEntry{ + entryE1T1R1, entryE1T1R2, entryE1T1R3, entryE1T1O1, entryE1T1O2 := testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 4), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 3), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 3), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 2), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test1", environment: "env1", date: simpleDate(2000, 1), status: "Passed", } - entryE1T2R1, entryE1T2R2, entryE1T2O1 := TestEntry{ + entryE1T2R1, entryE1T2R2, entryE1T2O1 := testEntry{ name: "test2", environment: "env1", date: simpleDate(2001, 3), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test2", environment: "env1", date: simpleDate(2001, 2), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test2", environment: "env1", date: simpleDate(2001, 1), status: "Passed", } - entryE2T2R1, entryE2T2R2, entryE2T2O1 := TestEntry{ + entryE2T2R1, entryE2T2R2, entryE2T2O1 := testEntry{ name: "test2", environment: "env2", date: simpleDate(2003, 3), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test2", environment: "env2", date: simpleDate(2003, 2), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test2", environment: "env2", date: simpleDate(2003, 1), status: "Passed", } - actualData := FilterRecentEntries(SplitEntryMap{ + actualData := filterRecentEntries(splitEntryMap{ "env1": { "test1": { entryE1T1R1, @@ -257,7 +257,7 @@ func TestFilterRecentEntries(t *testing.T) { }, }, 2) - expectedData := SplitEntryMap{ + expectedData := splitEntryMap{ "env1": { "test1": { entryE1T1R1, @@ -281,7 +281,7 @@ func TestFilterRecentEntries(t *testing.T) { } func TestComputeFlakeRates(t *testing.T) { - actualData := ComputeFlakeRates(SplitEntryMap{ + actualData := computeFlakeRates(splitEntryMap{ "env1": { "test1": { { @@ -337,7 +337,7 @@ func TestComputeFlakeRates(t *testing.T) { environment: "env2", date: simpleDate(2003, 3), status: "Passed", - }, TestEntry{ + }, testEntry{ name: "test2", environment: "env2", date: simpleDate(2003, 2), From 79f8de1bcbf8a7d260d5b4158930912230a5a660 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 11:11:34 -0700 Subject: [PATCH 070/153] Add comment for testEntry. --- hack/jenkins/test-flake-chart/compute_flake_rate.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index be741f5bb135..ccecf4f8109d 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -53,6 +53,13 @@ func main() { } } +// One entry of a test run. +// Example: TestEntry { +// name: "TestFunctional/parallel/LogsCmd", +// environment: "Docker_Linux", +// date: time.Now, +// status: "Passed", +// } type testEntry struct { name string environment string From ecaee4d932cf64f7d3d45c1e1a82c0892f013178 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 11:16:44 -0700 Subject: [PATCH 071/153] Add better comments for optimize_data and process_data. --- hack/jenkins/test-flake-chart/optimize_data.sh | 8 ++++++++ hack/jenkins/test-flake-chart/process_data.sh | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/optimize_data.sh b/hack/jenkins/test-flake-chart/optimize_data.sh index 2bc140fc28e0..e92f5e0df2e6 100755 --- a/hack/jenkins/test-flake-chart/optimize_data.sh +++ b/hack/jenkins/test-flake-chart/optimize_data.sh @@ -17,4 +17,12 @@ set -eu -o pipefail # Take input CSV. For each field, if it is the same as the previous row, replace it with an empty string. +# This is to compress the input CSV. Example: +# Input: +# hash,2021-06-10,Docker_Linux,TestFunctional,Passed,0.5 +# hash,2021-06-10,Docker_Linux_containerd,TestFunctional,Failed,0.6 +# +# Output: +# hash,2021-06-10,Docker_Linux,TestFunctional,Passed,0.5 +# ,,DockerLinux_containerd,,Failed,0.6 awk -F, 'BEGIN {OFS = FS} { for(i=1; i<=NF; i++) { if($i == j[i]) { $i = ""; } else { j[i] = $i; } } printf "%s\n",$0 }' diff --git a/hack/jenkins/test-flake-chart/process_data.sh b/hack/jenkins/test-flake-chart/process_data.sh index 25c6ba5ec695..dc0e66e4b352 100755 --- a/hack/jenkins/test-flake-chart/process_data.sh +++ b/hack/jenkins/test-flake-chart/process_data.sh @@ -19,7 +19,9 @@ set -eu -o pipefail # Print header. printf "Commit Hash,Test Date,Environment,Test,Status,Duration\n" -# Turn each test in each summary file to a CSV line containing its commit hash, date, environment, test, and status. +# Turn each test in each summary file to a CSV line containing its commit hash, date, environment, test, status, and duration. +# Example line: +# 247982745892,2021-06-10,Docker_Linux,TestFunctional,Passed,0.5 jq -r '((.PassedTests[]? as $name | {commit: (.Detail.Details | split(":") | .[0]), date: (.Detail.Details | split(":") | .[1]), environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Passed"}), (.FailedTests[]? as $name | {commit: (.Detail.Details | split(":") | .[0]), date: (.Detail.Details | split(":") | .[1]), environment: .Detail.Name, test: $name, duration: .Durations[$name], status: "Failed"}), (.SkippedTests[]? as $name | {commit: (.Detail.Details | split(":") | .[0]), date: (.Detail.Details | split(":") | .[1]), environment: .Detail.Name, test: $name, duration: 0, status: "Skipped"})) From 941d8f6518da169568f660e19b8ed596ec016cb9 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 10 Jun 2021 11:22:47 -0700 Subject: [PATCH 072/153] update time-to-k8s chart --- .../docs/benchmarks/timeToK8s/v1.21.0-beta.0.md | 7 +++++++ .../benchmarks/timeToK8s/v1.21.0-beta.0.png | Bin 0 -> 35990 bytes 2 files changed, 7 insertions(+) create mode 100644 site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md create mode 100644 site/static/images/benchmarks/timeToK8s/v1.21.0-beta.0.png diff --git a/site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md b/site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md new file mode 100644 index 000000000000..010c3b44f1f3 --- /dev/null +++ b/site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md @@ -0,0 +1,7 @@ +--- +title: "v1.21.0-beta.0 Benchmark" +linkTitle: "v1.21.0-beta.0 Benchmark" +weight: 1 +--- + +![time-to-k8s](/images/benchmarks/timeToK8s/v1.21.0-beta.0.png) diff --git a/site/static/images/benchmarks/timeToK8s/v1.21.0-beta.0.png b/site/static/images/benchmarks/timeToK8s/v1.21.0-beta.0.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b9d96de097ae9cfd554fba9a96218d851c5092 GIT binary patch literal 35990 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 literal 0 HcmV?d00001 From 79e1b4e99d55a74bb4272055274ef300baaf2594 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 10 Jun 2021 11:34:06 -0700 Subject: [PATCH 073/153] Bump Makefile for 1.21.0 release --- CHANGELOG.md | 31 ++++++++++++++++++++++++++ Makefile | 2 +- hack/benchmark/time-to-k8s/time-to-k8s | 1 - 3 files changed, 32 insertions(+), 2 deletions(-) delete mode 160000 hack/benchmark/time-to-k8s/time-to-k8s diff --git a/CHANGELOG.md b/CHANGELOG.md index 5de17385e3af..4e2531559c6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Release Notes +## Version 1.21.0 - 2021-06-10 +* add more polish translations [#11587](https://github.com/kubernetes/minikube/pull/11587) +* Modify MetricsServer to use v1 api version (instead of v1beta1). [#11584](https://github.com/kubernetes/minikube/pull/11584) + +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! + +- Andriy Dzikh +- Ilya Zuyev +- JacekDuszenko +- Medya Ghazizadeh +- Sharif Elgamal +- Steven Powell + +Thank you to our PR reviewers for this release! + +- spowelljr (11 comments) +- medyagh (2 comments) +- sharifelgamal (2 comments) +- andriyDev (1 comments) + +Thank you to our triage members for this release! + +- RA489 (12 comments) +- andriyDev (10 comments) +- sharifelgamal (10 comments) +- JacekDuszenko (7 comments) +- spowelljr (5 comments) + + ## Version 1.21.0-beta.0 - 2021-06-02 Features: * Support setting addons from environmental variables [#11469](https://github.com/kubernetes/minikube/pull/11469) diff --git a/Makefile b/Makefile index 1802a9657512..ce1c5dd24709 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ # Bump these on release - and please check ISO_VERSION for correctness. VERSION_MAJOR ?= 1 VERSION_MINOR ?= 21 -VERSION_BUILD ?= 0-beta.0 +VERSION_BUILD ?= 0 RAW_VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) VERSION ?= v$(RAW_VERSION) diff --git a/hack/benchmark/time-to-k8s/time-to-k8s b/hack/benchmark/time-to-k8s/time-to-k8s deleted file mode 160000 index 72506e948764..000000000000 --- a/hack/benchmark/time-to-k8s/time-to-k8s +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 72506e948764aeeafc01e58e6bec0ea741c61ca0 From af00210a203615d19c161dc80e8db962f6670659 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 10 Jun 2021 11:36:13 -0700 Subject: [PATCH 074/153] link to leaderboard --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e2531559c6a..947990df5587 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Thank you to our triage members for this release! - JacekDuszenko (7 comments) - spowelljr (5 comments) +Check out our [contributions leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/v1.21.0/) for this release! ## Version 1.21.0-beta.0 - 2021-06-02 Features: From 23128e7bd48450639b06540c3c737a6401b7b169 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 10 Jun 2021 11:37:20 -0700 Subject: [PATCH 075/153] remove beta time to k8s --- .../content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md diff --git a/site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md b/site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md deleted file mode 100644 index 010c3b44f1f3..000000000000 --- a/site/content/en/docs/benchmarks/timeToK8s/v1.21.0-beta.0.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "v1.21.0-beta.0 Benchmark" -linkTitle: "v1.21.0-beta.0 Benchmark" -weight: 1 ---- - -![time-to-k8s](/images/benchmarks/timeToK8s/v1.21.0-beta.0.png) From 95ac619b96c3c6b12968b6e78705f995bde91b5d Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 10 Jun 2021 11:39:28 -0700 Subject: [PATCH 076/153] remove beta time to k8s image --- .../benchmarks/timeToK8s/v1.21.0-beta.0.png | Bin 35990 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 site/static/images/benchmarks/timeToK8s/v1.21.0-beta.0.png diff --git a/site/static/images/benchmarks/timeToK8s/v1.21.0-beta.0.png b/site/static/images/benchmarks/timeToK8s/v1.21.0-beta.0.png deleted file mode 100644 index c9b9d96de097ae9cfd554fba9a96218d851c5092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35990 zcmeFZc{rAB7d@;}R5BNpS!F6z%1qrdM41aEltfYHc`6Z7NC}xTg%nAK%rch%cA&5|TaV70#)X zkdWRdA=ySkz7_wavBU2w3CVqu^XJZLIz)_h*lW^jwTNuwDP4Uv=PxwO9N$7+_K2H} zV`~HbQx58@7oHplHaN@KqNuicc2a-?7*5 zMpPYZRG7H^M0?n^x>j%JKcC-`o@K)o|NiK+&R@01KNXTkDsMJjTT=g18)?vII+~5 zD&W#X_werSZrjl&FE20G5#MLeo*g`GCgM2L-#pAfLgG@#hUZ<2^Lq5?ZBmlt$iWvM0r(}$*;GU8WUAEn_Sm8e0_bVr>ALXXvW9K_2&u6$;l^g z)wHA=R{l)Z=V^b+QhlJhrWjk%TQj+vA90b z{y8Edf=?^eWo3?se{ON{Pha2c!h+j$Z@D-BoqP9`6V#tSe_lCvd4rPg@;it169h+bAUoNpa>&<*@K@PS4Y3Efx!7tx6&MJu*t2 z#Lu?qrKhG&;MzNO>@aK_^FAjpKRPn<@xup~U(?TXbHxrG3~z7Om6a_Y8M(7(&z@7K zPF=kCo&6X8wcMMAhO_gz)0qXXs|$nQ!;NbruzX=6mc5Bl6W!fEa4WNe-^bgszkU76 z;kmN98ZGV4!o-yCFx{KhI8djir`Orocyg_8HNbhgce}7~wui@;>Y8v2BRa$D;^iJpAy?dop$BR0|dc#v$9oJ8>v9X;zX+1Z8o?^!~_7~yd2We?f ztXShWL`6h4K6=Nw=r79r`chiTbs_Y1Qj!mKP;hXhh~*6ni>W}d$Qr1NU!m6zi;-^+Z>zSnU@O>H_^i;U!c5i6+y$$fVrNlD4;*L!HFeEt0L za&xa-xx(Rj;NZc6f`X?{o~*5}XMXx5A}Sgg8ChCdYFrofy|OYfK3-E@-J|YnRaNM5 z!-|ha-v(YA<=FUAk z9;RFNRV>f`advVV85+U~tqD6x7UI6vzOk`!w=HWg14CtHrMRf*wa-=qbHj}|&gajc zPr3X)C?rIl{FIQ;QJs%BhZ_>`>?e(DYrcIe&AuN#KQ$Hj;srfDy@bm7oSc@{*4Cz`ee6Hm+w-meDB~7C zempU=pa04y1tldVWo3V+y0OvGt9f?sgM))JGG>DgE9K_pUA=l$*sSGsV&Ys;U-WJa=y2zI|!#=TFU(Co=}Vh17+e{DWm7kJ&~>c}`ZA zS=_Fsy4ttIfWn-W{l)X=52N1(2k&(|BGaC0YuXTh-p8XQrmiet#NXn(jMtc}2wmMn%KThhWbAWo=0(>EoNVi&ByppR1M(Ck zBwZ9+NJutmN1N0B^z>Zk7q#m5iH+sxRK9TG=Jo5zX=%oSjM%cJU>32+&L2P6xVW-$ zEIinLx3yud%-eI$QkNm;-WIxY?OI1*3U+{O$By1{{3kvhp82^sYSQVIc~gFVei!}> zB>%^LepD0`)TEa4BbQE}&O*SbMJZ8xK6vmTEluDv5>&3;`0xDu{7lnkTGH$H?iJo{ zJmSJFD5$Eg{xL5voQ<4;A!PgReKs~Wb8~Y!pFi&;Cl@+>x|fp8lSRTou%Guimx`UO z?O}VI&_es zxm~0#`x?y0z_07W*IwYvAb*1NtXX@Gn!Y}(7P95s)D#j?{9j<@m{yCkJUg*es6XYXa=;Cp+J#r1)j0 zynSmyDoagDInvPB=qgTlVc~DzzNP6Eykhft^k~PudlQIp+}rHnMWp?#tkWKB4h{}CZrqs4lr!sUZ)cLG z6N}vV6YWm<*=uIT3R{GO(brM##~^Su>j|4rZ|@B|y9NA>2ODm^_H>&yCIt?A2 zxK%&-!xD$ph4*jYzRk-MKTC~NE~3Z05w?}2SbEQs`&&o~`S48iyNpn&$HvBRi<-Qb zG&OC0f4aStJu^Sr+*RN#?7U#+8TjBqNpbNRgqr-7-ISDBpFYLcn~<~b-08dj>tY5~*j~t%#d-vjK-??)~&T+zm^lVM&aTz70(V_adOP4MIB&BC$lzK-*M&cwz z1_gPfSXx^Hp5RGk{q|*MWg!W$c^*A>OjJ~K`umB|iHTdr#$5KOkW;GF-V&}WLekRF z%MA#rn|iz66%`e|f4?Wdwxz92NkPG-|BZ5_*g#LugJ{~_yT2`rw@o|5J%3I|MMaf5 z_~(yzX;5p1aYlMNyXTRMujZzDWL)0o*-xGp5@Pe5BG-0zcUM!RVWBNMY*+;(Q1N8H zk&zK9&4G0t`d!=2Ltni@DeNoSdQML6inez5ZMXh$10=GqU%#SMIfS5`vmZKi=;oa} zk0*tWAAk1nVQEVXV{}`6{c#DJDxdMi#l^0C$BfL(V8w)$r6mf{f%ebVK|w+L_U)7T zYKT49yLVb#^ZAjB2s$?7xt^-x z%=Qzwd3kr$S>81@<&?jHT#rT3(bi^SW~L!5<;A>y{W>LOb>tV{8W}wn^YG!r?a^=E z9I^WFEId4%5JOH*9vT+bW4s+njU&)=8_5)NY`%OU2TrR;w&|TaNQM#;5*DBR{gr`3 z<$ou?efu#h>xli~Lx&!1Zf$C4cb2CmlAtvghnUH8r*TZ?i1? zWx_t+rUkT!dolIq+_`hPxw%yx{{ECqAD+%Mh~(f*z7o1kt5b>S`2PKF&lj&(uU<(> zNlC9wm3m(R(z8`j35bYb(&6CZl22?zGI&JaTbGoPLAPmPe)sNPdirzZce@H*adZKb zo0^&m3k&g`EG#U52nZ~s)~=66yQ3CFFH{K%ew>l+Oy3zm$! z8XDF}u@Vn5l9PP{0wx9Oj5cy9DJYKW7c!Bh^{C0dFfp4l*+S`1K30a(rr)Kn|d$clQ|mZfQ>(+|5ikhu#M?h>*qk z`Db~6d8PUa$e>D!imy=p9zBxN)6>(`q~D;CcxAmgGqO}BaGUh`vu7o7yR;1rIX4ck zhlC9F_HwKW_BUwq0xj9#1{0Mdv0NPFy)u2WIj1DfKPkhOS67S1Q@hLEx^+v&ih!aU z^73V8j-?^E3RW@g-8*_}Y6TS)cL4DR+sKe5P_GyE-=>l#?HaC=-UN((z@?%bc4FZ9 z6<~ULTG}t!hDJu20C06fJ5Z6I%B?OH5BrRVzj_4vnyL)?S_w8f(o^u?yJFl4j z97(ae&*R66C_iC=eKHnOG7{(HYMlt=d-v|Wef##FWL*H5U%!H1zO)-_NhhOX2^2jj zXFXBL!^ek86!i2(NC*n8%N@=ZV6Q3h(+F!6Yek5@b1i@W`t%_l!! zB0s3aC;Ox#QVdF5X)~YU#$&f3OC->?)>c`0d96#APMtn|f)#o7dtIHee@NB0;E<4$ z0WT=EG&K+L^Gn^#Ue*2bp`R;y3Ms7Yn&Z1))Z!Xj~H2luBO~D1Co{1B`9ZOY8 zwl3x2aunxJWe4&6bv;l{w70iE$w)EC>a%3jR4;tOwCSjfjEu4IpKl=o4D|FwEVooA zj%Ol5qQSw_r%tUew3(y0Qn5%dGBHu?-tGJkt@ZvH@bszc+ERLEW@cPm9BNQN0M*7> zoLNh`$34q&sp5xk^rsl9F<;zn=)WXm}$w zo-ti&Y-j)<7qRFr#x0b7`6BoH5OdLi=GNBpZluT!@87@2uPpf`CL~+}_c!ka{$? z=OgEjX00c%DL^xcZ{8Gw|NhQ2?dMr~HaIZAEa6}QSbXz~>&!l^5i>2Vy1IHpTU(xK zGrz5^EmGW!4GIR%#K}KgOdH#8b(XiKrl#VefJTMTE%1L+_JcAaA|f|$-b4XJXh`wg z+D0Uyeraiw*%R9k*j_-N*dRoxa+Jh!$wRVj+qOM^{8;#2JNL0;zkdF#sjYn(6r_0Z zVx)wl)#b~8c1_qApzzIw@vAg6&j8-+?d*Uhs7X->kuy#R3R-|eW4jd;74IM~g!w1E zd#4LFqoHAFVDS3gJ2OMW=YfG1Jzut;JzKKAx=5vR3T)3}wCNb+1CZ3|nHedEscxh@ z-6FSwPoL)WqnuafZsYXv2EU4ol(g(E18xV26*_ea(Oq3t#pYR4Q{(CBNgxm=x{9PB zH|V=9dnqPJxhzeAOnG>CU{8=t5i*T$E&|gxG&M=Nt>r{T={Y;+d3bD{l{k))b+bAM zw;dtvj#NJf7zNZXBgT2;NX3^gGjqclVE$kf!1`>&3q?t}-Z3|y92htizma3vrx*hc9%^*T7BO}ASGhgTG zRZ}1h9v%=)V`F12ZSByYAaymhn3NPg0RaI%K2sy3OQ3OpaAo}#(D^M$ni;DpnUc7jL7`3vt=AnOF zP$0?5s&8bJ5E=^f(E|Pq98&T0VC7njZjMDvem>Nt;pOFJB8Xjon3IErVhL9KURCu2 zKTS<90|TqRe=kp#$FCqYCV=_J#g*39vM@6Pq8K4Q5#!xl?_y(-%HBb*`t<43!omXJ zz;VVW@$vCI8gGDRs=s{;I4I1|!9h5Cwg7i5EBHPZ*+l3!fW5a%6PEq->C?#O&8gS= z1_uG7k@3qX`N6w|PoI91kbpY%HaWQ`liI=xOY>rFZ4DWyJH4^0stQjFxE&Nki!2OL z%h0e7{}Gy7Qc4O=c6iNu4-M1!goK_NKJpl-08;K7x)(3LPf9WYT?cc*uB5(u7a@3^ zaN`CCIM2a@2U%I8asPRF&Ztcg!gD^qUN zKKXUU0)^s~YWMghsCKk~snBKmX)DUh%K>MO9Xl3xJ{tssm5*-}DJ1OVSC_XrIU@Ob zUqTmllaOq@H`v7isS;~GbAV zQj+@udl?yXtpC&^(^69Umz11!bX-}oA*Ge{!nJSgSkwE4hRTLf~{^=q`Dp< zFD^F0=c*uP@$pef6ZMv7eMR_URC1B+?YQxgk&#eS@T+|c3zfP$Q>j-)y}YiMjtwR<-tBNV}}H8mGhRDggN=I5al+bJr31x;*9 zy(aEBbJJ55pi)6WK}M#uyBh>+6kBuPzyaiP#5n#L@-2u8lFQ4ZIv%UQ;xsHQ8xtMk z5D@|@4YYw$&r&;7m!KRD4Vgsj|5jSshm?+jk2M!Oew>}WcdRu7$O4H14-YB6I8oYZ zj+=ucHX*?)JiP7a&$*P;h%L8=N=$}FMh@)Xzh{$*nx6iqsj2wAc9HzizCM{F-BQpC z1JeYkr~<$m0l%%;_q$%Yd>I=-q5p2*--UC@LVfWJeEW99n^*U5NN?cVLjDeq6ZeLK4+?zA>S)EcD_5E$^u z`_UtQ?GFYP7Km#vM47+8{}L@KPG4mJfOdqidFR^lERs)oSs4HTAjCC2Jz~JIv2~A) z=|cXY&PBDwDunP~!}B?!u84QYF6d0CB{{=m~L zmt`x@Kve8==RDC$2@3-&7ZZEs^4*gV1LdQ%qGAU-k#&LNS+RX}YM>?|tFjJJ#LWERs&B zQeM=&e0<_=Ya%*Qt}AocBYyot2_d05Xt7(iY!L}5sgINAg>V_Xb7-v$yhdv~sa4AH#0K)8*cB8OgTbd3H4Xw|9q+xj>RPg$k*gt7A z5ULU(>HYhQ+S(3fyC5`xt@WqI#`XrIdTwKqV|!W&&0|smE@JE+Owda?{M~!1*HZ0-3YT-aPuQ4y3Jj3v~Y><_BMD<${SNF{$}=jVUb*O$Z_&xl^mCKS=fZ@o(NdqUIG4U_DO4Ngi8N6zy1I z18wWLK3@yue*&R5MBnW?x<#|Is|u?&Vg*G-tYqeK#^&bI@fU&AnVBPjcAh+;khs&_ z)fGT}1@I&$hMiE=*!Wy7uIG!&t55S@Y)H3&?2^t@>~lCkcp745CmHK5d58=ZXFdWd zfcQY^)Xyj)-WJKGEMi{VZcM~=dCC0HI8z ztEUHrH;xtTAl~(odC%aW6e=RRnuxk;!j6Z~9zk+EDm{>d(Uzbg)J01R96LtjCM|aN z2{CBQ__(l-_xbL*d-pEj3~=65O?AEg(8l_zNNXFAf7|ch`;KaZvjQ_!cNe(l-w6eJ9v1(^gThk&&TK8c)))-SRv>fz}4c<{4lxDvWFqoboJ z@_hpXdv@*|hWs!w5hZGU*na%CEtHm_p`mQ^ zt`l5CtS&Q8)E1p6q<4P}t(znzE+g9TlQMPnblX%;R(>dPFQG33UY+PHSiQRVH}m2H zg+Ghfc9KC7x7OY2iP#NfsyphTPy7B;^3R5>y2T3%LsJUC7~*psMeYeT~fnj>AkwW>-= zeh`8J16A+dJ*GT4z2|OczUYY)K{eUatx=)7wGO8Et0hvSFZ=gr%@v7X=jhuQ2pi-L;kkEflgAq z$j-rW18E01T+)4GEl@^8m}MhGF#%03NKPoKF8L);Y_S3-Qt|==e>~cAFq98`7^s;- z`Wc%Kut0!tXIGcLzP@yC3@TlZ7b4Z0iuL8QXZzjk<0~pE&=VaD0{h251}xspdGKJ% zVCJ_+ix<(Z`Tg6eihajJwX0W^5*x#IBM#9x#h+j=i{ovJ$&$;O)c=Bcdqzgas=7Ml zOIvGe=jE9Jzz=ElFvW!4mhQg0K;5@)-gIzud{*xR$3Q1H4-Wt#U}s25N(zM6NM!+j zevmVvlP6dE0;Hkq1MnJwHyt`;vov+xgAGf+Fxi!sl;kkkDe1v>`tENb!~hP4iK(fv zkx@^=Q`8-RLV#kNQSZ6<*jNGq2?&f4h>$!cDk=(=22WLBPxGSnTP7wxtiPdg-KvcMNK!*4)wNn% zvIG+cJ_!vEPf1G3cUf*|ZPn4$WfJ~qH+}^m6kx)2uqF(J6qjAf6cdXqgx2Hiyb3r< zNB10b&Dp`hWuj92%Kw%U%%=hfkD7o?gUZgj{|JHnTAtlSb@iYpZ=}l5EJ08}Rz4u@ zwuYYVy{^KGELYNRcm)Ulf{z3Ym_^#nWw2)drAxn%fPvu9$(05>y?V8+xfwf`4UvF; z7trlhm^MKCe*P4KqQJqyarm$i(jx?YWF`l7eJw35NE^txZfnz(?2^7up4eDf5y+u! z%`YtIfR5p(@2X$Ej7nRf#0y!9U*}_d zMuv4qt}XZg1Oo1(NAc)K{3(F6aB-L`zzTkMc5du9w2a>MPci}Zr9|aNjxDdIKrTl& z{YP`NaC|L_Dax)eB8p2Ts;sio+QPymA2`Dw?7ltEzV7??aojkd;_o7N>00k;w65}B z3wjaifBtmYSQC}<0&7Huf(}<+ZiL+h35Nhy>0KKszF0~n&E^T2?a7lT@B`2gVCsNF z;LyqANFkKzEkriKP52Zx6_L`vE^@3k_O`R8Y8;r${06y~ALip)D=CEc=wtsGfwRpzpviI525JVnGQ#oZ z(b@N=VB2wD>LC*s7e|z%tl^ORK7Q;bCmv1uhV7rCKJ^RG;+W1y&-QXhO6+@~Ma)|S z+Tb~6!~*;UIHWj-NSds5vk&S`K3z(=459&q_AEUjE6Wba%V(I*`ydQi?wf_l$vis9 z52sKOr=~2JF1b~qS-qd)QD|rjdQ+b=Gpk<&;C2B)+|YOcEJAjg%uGxS{N+GJu#vz;0ZgI|5IUQi zwe11O&3o?g_6Qv11-@DHaJt+>ZD~&WDEP`t9X0w7lX}xp8@Pi?BJs z`8gnuL=J3s`YbghJYcZP?ZLez9B0bv z>e6tg(GmFd>sP-)ByuO}5T!Td&ndq<&|j945)-)?7@DETL8Aco^7Q^j&+qxO^PLWgN`16u&iupWyNjO ze~ojl{MwjO?%I3jX@Ls5Zk1r_&87n4p)Ynh=}$;wO6PGh<0ENZ1Q(74a1~uDxMyE0aBU(E8!!<~~CX ztzS$;r27l5qLrrCa~F^ip$@UzGcY;%Ht@#v>+A#tu(K;yR)Fmx-l0q*AJj+|S@d|| zY}Rr{M@7|^lw7}g^Bl`Ks(U~Hx~TX%-46y2K7F!ra1g0AiH(ahG%*Q%_6)quldmpP zT=?)|FP9DUgB<3}K=)7qA-$Xy7EV;%*!;i^TbQWm=d7&D7cM->ziczzx;8kbvQ{I# zW9tX^{p7`k|HX={P}|YcBW6DPt5>cd;_sN6TFRX>tJx+9j`ugwkemUl{rHiV>!vZw zu2ug6$5}a5Rcdp%6oB@NA*PG2tQ-J?{rlnW)%x~!7hnsqNPn%JtK->S)CAa1>+9>u z*#WpwzWg0H9+rT2rDtas0WIhcDzAB)+`jGWuR3pxHA#Fkob0@T0L2(#e~5@5cK3VP8X&9`ii9fglL&FTXx0qaiH8-bS$$SfEUez;B zl+}k1A3~wTIZIUKu31*lYu>+C^R3%-!G=K9e+1@YdoNIHPzLA#d%agzRv_s}NJ>IJ zsy^jYB#OKMW+-sG2liTI6aZp0ZNU7lX5Tyf+?eQQgaRYt$e9di9urdnqtRrlUO{eQ z;RX-_3QgaiKWJwnNEQGAPYVi89WGc=65RTq>S3Rfo!wktZwY@d;QY<&_-=XmN<;?o zT?1N>DJj4O($<3)T;`B2!TQEWMqY{8@;dH2OAVq>_3az-@<-GYdU_;TH!wjgjHl;0 z0>L9D=DM3(;r;u?Xv@&i(gH!Fb5VWM7v}(#|ArtVNG34!*wB!O-Iz9#H82;HISLAj zN7(_-XXMYFLlPqT)^c(J!-lG_eygcLUM;p{0EYiOaS~cAm`4^osbK4|u^zjz($#Z8 z$i5d~RD{)p_L*|D6mwnYn$rdk&0lUtLSpcadJ@z^TSw=ZZcd=+$`^sN@2}-8K>H$( z0n+UJZ2bq@wsh1})y^&pH2{)ZUf$}VJ=WL5wOlz$m<-)ipIp=7;n+{e+CG=L20VF!W-4$$tGwgBWdTA}OG^&iU!Z6L0s)E% z=$zpz0i7F7gz`gAoCgeoAp4nAW%t=Ze<~9!aYE-b2$_yawyz(ixVBg!^7yM-TVyB5EDamQ6lKjjzMmzmO&ecJO+QL zxE|4`3_?4O_%kKBy1v-OD(!~Qgn?4&R=EMo@JitC-&Z^X(LDvaEiS%~Lz|Q|l&BY} zm;gMCMELBy)T8GwUNCh^MJj8lsxHmeNrNMSxf0JUJ$;$W%Sq?{R4CiZMJ2k#9#%(( z>-SfukQr(QkY!M%aD$-hH3PtLupR=5MmvSak#QOj?}<2*kfeFX#^%$94cNL4XULznY=A5S zs(CX6Tn2m4@8W9Sw5ZF42Rn}W@A~iV z=?l52v&to?OV6b;SbvyH1}G1W6Y!+|n^ z2jvEf$)Vu-_*8xUih^|+(h7e*_!^QA+UFrhb!NT^6tQ_?e;8O;_(4!aL{JP-^Chs4 zJz5erLqBj-aE>5x;bgRTbO5F?u(G<(^jBj*0Ot)Y$_Qo}cIZq!Nl8iAo6WgK6->j( z5*=;hE$I&lF;MX7NJ0L8Ha1#Mb)Q8po1tx5J3KpZr(%ldUn)t$xD8nu-5?M~-RyhJ zwcUd7!1R{w#A$}ogS*v8{%Q2>CG;s8QW_WnK&)<*?~0(;Q&kld5~7#a2lVYoHkD{ohq8r+7->;rshjtW{D`k%a~jaexB0 zZ8S!2euf|i33uv0n9W8Ygj)1(!iRgGJ{$KXQFbd zr2jKP5Ja?8a3-N3^wPqr-18l?E;zM)0C2!4IX7Vx?pH&4zyiR?9e5b@7=iB~4!;RN z0Q5(NaQqeAFZye;5hDXNE=Ulhwdii1=uC zgJD2i&4Y`h>@*r|NiZ`F3>@a<%zzsW#=gNgG(BGg1&P^?(097RG7IX6oY9H8QO@43 zmDfk*LGqttJ!QLd_io^Odm9_U$}7+mA&-NDqP!mNEDZ+TVwH4)b2BzM*>U7254bWi z8>P9%xpT0z{XteH3aAcKuXA&qpo2PsUj1rpoJ9u&sgOJdpH01z`B>tLzW%0{&iwy4 z^!>C^90ugWrFFhR?NJPt0cfCkh<-=SJm^=*v8%*VhdvgnC{__S)$<+Q7bizYC_w!% zY(o|xmKu4Yynq%R{HSQlKwf~K_PKZez(BR&m^sn1`1hxq4@eXUooFAU0xv-Uh=2W> zB=KRTmxCMIo77Y{lmj3^c*)rRoX|QcD7XZD7qASZx|(qO_;DaPIPB5f10;f_{<*hB zR4FJf``w1&xmT~!FNjGq{R>X+r=ioE`|+a{D6vDxvaLXbL0=`SJAkv4j@8hQ7-S8r z5O4uxB6s~!s6NKZ-6eo&-@fr3I#foiq=`WIm6gT{EVAhIz<_c8{(bhlFQKx@%Kq(W zkr)5-RPcEi7?804{P9B-zy_9(moKvrxp0#mh8~Y6%2D2Qt}%v^sshN~ewe)1o7Ih* zpZ^GXEQAxxwBcYL%4ooFTrQ}{bQJ(|YwcpFjJW5Ic-WtmBQQUB6Pqz;wad$DW6e=4 z5)FB+%a`S-Nuh*ub5G6B8yT(VDjn9SS`OLNhRp{n<-jBSgTX#sV0h+lXGZ0|^d-XD ze;PR5;+P5}qPwoHI)?x@aujIz&*5BNTVNn?3kiL~o(TLJn3zzG3XhDurly8woi|ZR zxuB>B0zNb{LQ79i1PqWM-9DoZLYnz|4p^}S za2+5q<0~-eC<}f1os7G~lj%E08E!lx8Pf+-79jo4QDH1NPF4KZi1c@j*De-LkjnqF z+{H!BeTy#z^Z}@akL-cy4ImfN4i<|lf;a}mFl>;@NK}bF!T1Er_tf#5{?`A-brryX zB}{{;S~q>)*B#;IMP4*AF%dxt;NnUg92`W%Lev#Fal#5N07I*t4gW}nu!t7MKO-xz z_$As`nX2(G>L-y?zjo~y2geE9k)Ob-0hdTBYHL&D;-Cz{2l?0RkMIEbnx30GiiY-c zr9j-KRNqmt$l5Po2oooUNL}wsJu3Kb9uV|ESpnH?`t=LrWV!M2o;CDcI9WP6JV%eV z*Vkh_fDgVu(DN8oDNU*T0d}PasNC@K^;U6-i|3`KsQ}R`C?uhX!Ep))rH;;Ld}Toa z_AwoecJy!o#Xw3#73 zDO6r1C6J3}K|w^1;0dFzfGb6v8eWH({@IoLH1J)zqAr8~^mKQV@7~S%4QG}p6$1f5 zp~m)OLbh=($|HxFr9Bc}Z{|3WL0M=)^0li{)y_2^LroC{Jfz7x=CRa6`SxsE$psX@Ja*DelD zPIt^g0N6kf34isa zQgR)eq=<5KdV!Wm&qB9imUNmk)u)jw{%1Q$HX&b-*3zh0+1QK$zXt@c>Mdg-fG9vB zng-L99WXccY_@lb(yU@j1p%adtKl+{S?wc^@;EvtL`M!|=5oJ#+ISIF`^?dU8-W6$JpgF{UVis?hv~?*K+p zlwxQWIAbtrOpcE;r{`nD5UC1=79O74=ntttl^Yw&2StS|%koPAA_;UxT>ogAs5H)3F-oG zShX0?22q@W*)h-F9CJXp^ZWNnr22=4MQ@10=RFDcPk$=tf2|{+>Ca!k%8~Yu9m8xQ zBvWqs$ABql-Z?vqQ&H7*cN-w_5EN8Z1C=oakli=;$VSYyYz8LM2oo0eLr0D@{rGX8 z8lxIWKA>pqX&b;}NNE6=eZpNH4Y-87`~QV(tf#JjfvH*>^%E0@f9j&q@v#Qn(4T+&Z+)0zhI`{4q5>fV zREp9L%@KJb_{9sP2p|c|NJuXjEy2~7mzG4t#rwVhL&4Xto~((bMhnMN6~F#>{uA9b zHu5jf^WktjbEX>;Qs^G_?>%|q1bUh{B;GIF>2MSQL=`SvSaZnqn}n^vLoorf4d{_~ zXU3oJB{1v0jWldI{x5b}qQs=)^wbnQHpID~5|8aT$mr`3J9e;DKI4?fZBi2;3)tJ* zLbSMwgbZjs-CvCU&mIbjA0|RfuG@F)fU$iAuGFol&`sD0rY{5}QBfv1vf*_NBX|~aZ2?oeu zBhQs#rpa}hAJH1E-~4y$?r#Rd41nefi~QJTGbB_X;xIjx|L>)nju8JO|DS67$h zAya_vm!_Z+p`ikv@Vli2`h{Sn6*LuaUvM4B<53Xe&=9IUuR!ey(F-4j@f78ehJay| zL_fc8L~q;DwBcX{ssqsU=PKf<11L%?|eM3JL_i(7JS`C6@9T=JoP<5G9c%n)W9k8F$oB~9JZxKRv4zRAf6 z{rm&o49xXor1vVM-@p}Uj2J^`Zf?&0@WIE|cX)D=HNACdX$k%UPNHKJP1wIS0V_MZ zLNviJ!Qt&)i8_ioU)ap_-B^GEoy2C%bS0B|*?}uHZ+49`!CYb;CAlW%FO`bboUnSRGOkyO(?b3)CljOH1~U zx-W1I;B^k8Jw4d89t^I%f4@F6@U7=A`c22Kd?IHTGOlI9Y#Vz9^-d2}xER#bFya0i z$rOfTY64O)Sc1bqDmsz9ul|m~9d}6YMK2aJUVXdJIwrcZ$RovU!8{dYWw)~^aUMHghMu_rqxO&HX z%l**O;M9ZuOQ)i0V_^Zz4l6YgqG2*hYUD4*BTCCnO%(=$2oLT(Ekplrcoy$TN>wh<$c*F9zm+B$7||ESMD)p*U@ z#?Gz@GeA)5mtrt}{0^Ewd{^*J-t;0K^4#O7UTCAjUou7S0|^cWqY6#~@)#sGsP-5| zka#d9gDc?7;70tJL}{6r*5EM(M?unnI0Ew;{sI&WWAmQg-cV(5Q2H{+Juu`6Bi{9U zZ!t`ElBFCYgTN4ouZtHhpmL-09vdG&w}0G)miR&t;!n49Ke8G6S3qYcI}dkq2B1>n z`zp)Jd)j@;V<0LDM)ULVoag71Q@n8D6R^^TJG57r<2Oz)+%PgCj@H7Mf&_;h0+ROq zhFHamS%61j7u1E>5c&>A#j(WQamZbqwGY-PfLxJP5ri0f!n_k|=wztSs^x!ch9r<# z*@Mfl+aRTG+qxBU6&D|$Ux0ciCvhtB5wYR1F?o*2ywK^8xJ?{aA{u-?R#`!AfpeT_ zDvv??(#c88?bnD5em^8E%$FKg=E>pVk~G`D3M1kcRR|RczlsXcQeS^onR2bin-#hu zI_uL+<$&xi3(t|{906gV69EZe(CeXx2U=}Xd6{ZArtzAb-_1(|xPtKbKxkdLoSWox zUpSnmTh6U*UL3Q&rRLyRXp6VU;HNMb5BkX4+wbvXSm2LhM<8=ZOY0K|9D;&Bs;bDF zTj3r;rv~5^>jkiC5rcUWY3WVRMQQ>p2nc)1UAu_>a}Xpz!@@hicu(9yqj)DJWkpyo zg2M7T@(36>{NoTKAQb?%Vo(O4mwxZ2^umOM#M_m7Ya8bkNQ^Am*|@pMdE42xmh*D& zYd_<6P(7uScNg#Dd2jUu#k(D&>dlvB-*N0B|H{D@oAbfvaqQ8pH%Onk2A?`ZxNi}a zq8#0BS(cz!DAPM?J0DPEUt6<$A(eKv7L&i7(1J0W0oU9!coXB~o~}+7xx*+AYhK>q zE7Mx>$^5cXD11dW!wr0?IlcF{Q7$bC6mQ>79A_L!ilbe;j9DxcSafMz=j!G4UFUy6 zayoUpp+CKn1y&b@h+~dF&XQe>5Sjii+|_R1inFzyC#*xkc z<9&m1S?1B70EffBG+r3&WzFF#sGxE`B1S@z(AlUWEeU{t$C9?R2Drwy!GPp;-A_*K z)9WtIgHp>D!V^DvkP(Un>R+FIc;M6>O$TedbH|(6PP=}Emok;uj$NbeuxY%AY3x_W z4dq}Xz%#%G_dC1ODJ93Aw-`25{a6iU(SiQwDnQ`#=&(|W4ZV(K;N-FS5w>}C{in5E zpYnEK^{L&M%X*pfv(la?&;3_Np8O;+yvffI-G-#S&@ai2;Xe>4TE^9l6D{d|7z+Zuw4;}0#Zu$J@Db+4!GxB@Ds~Zb3i;PdAF0v9xnqOYXfjJNX=AnVv$~nj08KxX%Rq9>!eo4a7p4f#RW(`jvY!# zD-^@0=oaxJplSSzV#g>+HyODgi9&jImzy&%2z7JMP%t;ramkO7l69f(7qu14`m<6Kk6GQO&SwK(XcAsS1eNCtF%;rv) z+3)x+_UT(6xE~)7GO_p*X)mWH1T|>aUS4|1wRwCOtIdzIzK7t`D#zHu^75bP=C_wj zkqdnHV1+ecMy4lzW$5DlEoZ(`FbW#rzfwugsa|(Qx7-drEZ;OTN~RX<4lL=g{ktsn zc&pK0O4D;ikIUB?Xg>#H1VCW4b*-qca~!wRWWl1C%}`*h*0y3QYxGSBMBAGW4QE9F zYY~tzal`SVg{KEj<<2!IAy+JA7p)&l{|@1y>%;X@IGJ@Fdc2?+>!sf)M?^5o)`M!O zNY4MnPP5v#TfV=NnTv6{@KdIzF)J%RkrP+Z>@PYP3g5%!x0<&xPXjchIB&YWTRfrM zGGb)E+ZnjmfC0?&#mK;9yHqmKUcL=wCA3)KUaGbXe zgaf*Lsy5+RM?@-wIsU6z?{N3Qyq9=g#xSHb`YRbL@T85}+e8xX5?w?a z2^%%SfP~tI=*9U@#^FHfBH2n~fIlDL_>tT{gKr@@!?qPt|NpHY&pTF((TgneEwTm42In?RDvqV(#K_i{zHmP*&so#YWKLR%yq~GO-*vEl!|xX%P?R)hsjLSZ>T1 z=FiqTBOMAr+mdH-yqP_Q_u{=KtzKGIIgVZ)7#E6QnWb)y10sn9DH*xw&d(v#z17C( zjk%$?fF^7%_yYj5H;dB{UMS>-fY@9szy`da&+8%A2C%A?n5}_ENuT-&5J62}jh@-A zK&(m2hwI3fKCwyApm8ZCL`q%PDeTWq^)ZH?Q1tfk`?1_tFbuP?IvK6~PCel( z;IyA}GxpQ@Mem*uV2Q+_gQGx=9#a9IF`(x=4@LpAZnC!h9ukrdiLHAkx2*Cb*Rx8w zI6!ix6UMuDXtnwj%Cw>Z>PEUBL5*a28`0x}Q!-!GW06-RNn{WGZ^uZM%|+6-KU zp*+OfKDQPv02g9Zi(Y{gi(|Br>k|IMNN|KI!n6$yHOGK&ENNKPk2uP@;s zzF=P}!{-o7c_mSd24pM_-KeO$&G7;*hJu|4MuO=7tLu^C6XbTyfT;{(NqkMph{T9Q zi-K;8YCwFYjBh#m(2x;@Oq<5q+KN_2QdakYKLtO3-U#dy>j&sVvBrC1>m+o-?xMYw zmM}KrT@uZhCxNQ24@3<~VGxAo%yKdaS9 zav}i6Y0LN&%vpBi*$2c9`HN2|ywgn8bwoP>`I~%=KrHwl5@DjuA9Ua%n3q zQDyWT2ZC=f&XTR^-+vDiQJwq7Ebv|tpjP}-WwGIS=ZVjMP+TdcSWs0yVO!AJ0^^A_ zYyC*j#Q@7jMe|_qX)VH{BHN&B6;&fXiJMT8&je zjKDC^rOUbV>+NBsmqbkn^~jsas_Hyfq>#yv*Hg220vB*xGA4^NkSOE0e}l~u`71^T zSZ9j?5#rHBlhx`Kfflm3S4&sTtkf;~N!h?z{`{#g=nZ1ha=NQC7R=W;!mygdQPa70<$y6d7+n$ zcA2RLg?pa66DL5?w}0{e{BWZ&`hy^}I8{9EwjvrzM=Ji4Dd8;gV_L|bOQW|!)l(?+ic=TNNwhv_kN+yLGrW42L!TmdY^ zEg6*N;Q&NT#E%!lPb07S_c>rwqR}b9u~7fdW!6LuLay1hg2ZA_uN-f_LEt39QUnS5 z9umdB-xY9QR?TLn`Ee@osNgkhTN3dY++IQ3jtUFgBhElAd3AmJ9Dvgys+dl-5?3j> zpF|w01782D4TS#W$!7cB%IWP4x`B`X`D=4hZKg_GC`!!s4w^lWQz4DcmXHze{%)Zq zjX$QSVbMPFON*ZPB3TOYy;vBY7cRSQfcBv`&xh#9p{<-Qez0wGE>U`WG;rc;&GUs6 zu80>9WYr8GU{T^Q?Y~nTej_>zlM873cddCV-Qaya_EICW?01HXT-Zt?AM@f zY;0Ve8@3)xuO!N35Mvm0ElTiah>h_>xXbRMU?zjb4*M?R|1k7N)Kwy^Yg;kvh{^z; zM?U>i912yZL(v{fkVjnc>TcOIk0t0pMKfRd&{`&!!YgUcB+oqMG_Yg>S5GlrsH{pPl|~JUB$Ud+s+5FOnxlb4gAl^fuq2g`qG(VwsFeBHpR3=@)vHPQg2hVfg*L_{*@IAlh_w>cxDa=ta{(7H>Km4ETUR|!+r-?hJri(!?kMI zY>|$lGy_$C=BOXfXrHg!^wf;l~WC|O^E|L&xu9`(;=KD13OzaIR%l0!NqL^rMO zl4K>YEES!99>(4KsN?;)cD^SE*?1e{zk}JHl>>yqpQovcqwF($yD_*$Byw{-FL>5NN9-RE!Aq|u( zZ6M~X-Zd6ubb%NtID(H!$6CZk{V>c;e=e@6HcTMDFP`J9VQxo(KqV9;)aml_S%2^F z8*62e=~xBKPsw8B{4&TsrtS56*o~_E0rz{>nfYstn6bHZ(gyNV<`zXzG#5ta-+UUZH)<%* z%Z3V{#(5Ws?DM5oN*AdNWb!zP>Aa`>>Hi_5x)FnKnYWS!JY~gE0Ac6c#*SJ3D6YmQ z)?~{zW#O%#40PU!F8686h92g2K}s4oXLRJ%E`x9jX_ajsh%rFYb;M`gKRRJ-rSJOx z=|9V1ax4teIFRDa_LfyA`8w)p<)>WAk~|_j0aZz?F*lsDt53w=Mh2hCT2PS!$zI^- z-1*;`nIoPp=acU}N#C^oK@}j3%x*T1?YKdiax3YZCI%jgmw92Oo{z=1`a8^dDMbm$ zoeEA-gyC)^ZIt)(6h2k55c51TF0*Eqp*Zd?hAQl=xBGqFYs7=&Y(ozy;C=;q>QV+%DliU7robC>$AjBI?L@Q9MFpbzX{l5?K?;EF030`Y;P2 zdGFzG1j`X$Sm9H9AunYGS7>aXBwGqIaOAb;+aeeE#6zvOQ{_~wuv0Z|t~p_$vEh+H z$^7p5Yq9j>h{#F1s!EN-$HhC&nBYr{Lp>=xE^$c645RlcLqZn#HNBz~GA`seF`8Hl zdKB`KetgpGBz5VS(MxAw)do*LIEJ=P>IGErQUT5BeJ0y&Q|apvKXWls=KtWdQs1_ADLg$0U^`bc1i)Bj$tYVq=3Y zKc^tHdnk32R}@a1uWiXs+)|Rf7(F=6@z)Grb6DiXVvK*a-=1Ch1;p0E?rX*7kB2=U zSPGAe_iTVfV_}zq#o-FJ*sK*M%PMc(52FUTf`m~*D}xs@_vE9wm%CD7_xV#Ms=xI1p>;tK9q%yZeJ(FSpV;?9sc(#IE4M- zK-T)g?c}PK4TqNrtA$yL9%lqtLsUc;D1ZU;{ z`9kl1zlZf-P+;HI35<)ToZnK{ExvV_NVM+fn;lER7i>(LUZPdom;fr+^g1T+J;iAk zx#;TEV5c+!BMyV7-Y6%T+p1Bf*<>Lc(PZX!yc)VGkwa|`GvHr z_fWbJ`>tDnYWW-gg9n~@NrVxEi=n>6X6fM#kE53!DI;MU5;FJd>MgG#<}85kvG7Nf zGg#iMiz~#Jor=9x%!|NuN&kKB{rX1s?+bp~4W7%C-Rez0A}!D2S#uB#8(ix5V;LrN z5E)sd&QrnslFD53zw9N2rCpg&vhyUxuv9QGe@QaUfC-?~G{coYTjUo@ z7J&MpYOOA{m@l6{Z`>qcI6;Y~Ng(A0Db7b9^kxo$0B_lx0eOiwBZ|;Dg-5>k<+sua z%%8O!vK$vE-1#7D!iA7rp~1Hw^fG83ic-*bko*40j9qTx0JDN%11d z@Jh+`kcu>_`v&H9U;)djDZmi=0vtANKJtkS?#7FqePMQe9-ZHQq~EO_>oUKEdyN9n z?dy?V4>mDmei?89+*2OY-jr9Ar~vTz6(|FR^ry@5{A?xEn4d_W0xfYiH7 z(@0r1H@q`&&HY`V92*u9?F&ZRnh?k zTS^vcj$UHj)@<7Pb7sT4V$>OYz7&l0UvpP%)0+DWDOre;8|h~Fhr`6v@HmVJvjHC) zYKp2eed_jH1#1+=r{{sn?ce(C*|_OroZX3cY!Qj%D%<{exyYT;$ch9+BUo@0wVD#{ zx{C-u7BX3(MB&*k>L;M;{*qsS0X~x2_Y|eo@ov0qaTa5irHFs`C z*Zh=K#N_!Jpjs#pwibB!*?WHkvnr?hm1|ngfJ?#Cp{m%tchB@oydSU?hl5^(EAB;A zX?}&JuQJ$nMollny;8SOG({#kdhgz~*&Ta1Fx<^6v&D%m?4RpZHTZha zp_|XpTF^Q;)_32L8!^fwVY$DC#MPc)>fM&Ixnt>vB$k1skv4rV%6g(e!j)l0f)smS zBDqCT>~W&AKZPf;aw3J~1_c3*5+z6_Y@``rCDi9qum&OthiS^08`+!!{sfb_0uJIR zOgY#V1o9X28d zrNr}w+LkEnkkg_Ix+zOqj><(x9x*H=cc3@F?`f49Tqhv#Q%(SQXeEjd=Mt{Jdm7CqwaoEI?P1#m=FB!_y9nESOZxsV3^Re(vs{uev*RV{QZ zJS;6K914MvDw{Mu-`;(O+9=n_;7Q%fQ&8puGBF>poSLv##ipfIvF|$%KBUJd9GCvq zwr6^)bPcHQQ%)V$U6h|$E-z7Rp?<|96>^X`6zu89kmHq-_V1P!Ng>Vcn={{s3{RNq zn?%uMHU*OMH*&k__@>$r9Gejw0ns#*+oXL9)YS0HU!z6+5=_pMMr9xkI{$-{M+jpE zi&pzeAyX{aM=Yofm=6Y(Qu@zSV!rWwN1-(?Y&Ad;?*<5u)>g=Icgl;vKF}ZN6->O* z%s{NwoRmV~bj;(N1)Bs|!wVoY73RI1RP*aWLtr(pzW(+!mej&-475BjU&^w$Ndwz*lCC2)brQEfP+On3-;{E zhkpP-iDSdoczaV}`He|1&Xh=}kA1e^JJ}LUw3m*fEw%(6+9j)qVU-Q*b?SS@&>@cdPW@L6 zOM<5nLZZCCcKeA>BASDD4HouA*ZH$e`q(97H$C4fNAzU?Oa^3r>dcuRNd0MRz_Drg zPL;kCwq9Zi0Gipmq6z`Lk7#xcEl^Y(baqz@dV#;>yMOn2nrpJ8u`o;@NrMW)^Y5Ks zKVZ-JeT~Y5pyDKrx520io&e;JZ*Uxdjd>L9@6IK{*h_^>!Rt^Shu4>GClCPz<)IH; zP2qY2h7Me8F(v35kYxx_1SOs8Lq4j4Eg@Lrf*Hv3$Hj{Cia}S&{CRqm-Z5bKwdypw z39bz;Ahf!XvYja)T9qLZ2ni1HV*FYqJlPy2qdI3v^Bnbjfcvu$M~D$Z{1W{nEtOvM zIMp|V{X9t+JMTGoA6k+m#+7e4-~(r*TSl2|@qw&+BcrU?d77^=t&)&4OqT_+>v+!S z>3LC7fG%^b?$X^VL%$b0dJ%wMMSL66CipMGQesPB)~XEK%PZTzQJ@eV@fbHz1880; zxE5?;`)jo~=g9d+QoBTj(UYCbc6o)pt}7y!Bw-*mH3@0MRr z1axlJxo^a=gAZQdQ_W*nQM`fd4JNoqJs<6jsZY!4UFhZPJ1QxA)zxQ@k4*|Xt}Mus z5NBc=n@`8AzW#ihLP$kR+a3))m#jnzY*=J#3JjE-c_N8$Rv?tKzX}a^V_`PucC%1z ze>&~ZF>#kpe*N}+(9n0gMTzNiDR3B;09nlAk1ESJXH5iLBX!-Mnd1(NAVAFi`1)ZkKIHG zHq_+ysC@PHlD6-IZ?v~yafuA5;AvtKF(b?H5g_OEvvfBN{m}LVv&I`FyB8fNbCB!j ztGBzFg*mIYO80ur@k~kE$F=H2fb~>ar`LH#n&zu8sB{7LrdZN%^HR-6j~c$!$84{Q zpDxom_m;`;+onbhi%~T{(;|sqS zk93}^bAaaON3Z*#5)YK0kZ_OT9_~4nX{xUS+MKHxEJDkCR8-BYS9#U-qO$0ATg9`t zN}g*H^PlOy^`|b6ib~Ge$x+s)A>5$f#9Wx&wkLvug6Ilcw@!c86q?u#y*?a5Zh@*3 zIu*37(Xd`Lz;fUNtQfP z>DBlQ4Vrl+n~A!ZUqH|4wjRGFIVv8|3!YpBq(5=eq$Xbz_c_+qfcl{ga}9p~Y`U>d z?bhAv6h!H^s7MN;6^*K>V$TZ}rxO$Rm}v!+OzywdT`4ZlHM_bVxgNSM*|V6Ju`vbo z(mv#`))>yGEt+;qr66Qm-So>UDl{jAkw&5ndeKowH*!VyTBetW&bH9%I_1{eATuqg z(7fYxmyt~|HRid_rG+T7jMp4FXi!JBaAc1)_w-Ux(LaA~ypGOFd^6{@gI}GfA79w$ zf-F17ubjY+|51((P*k~d>kS&9$QRs38#}*R+RL6nhP0+m2*`r0Q?O+Hh7ApyJ?|1V z;rV)KXiPuz5bd!%*ZPY=Vvt~2a{lQ`wk90#XzSA(dcny%Qm}-1esurSNFJ!%v@aTe8MNr{`T@qj|)UXJvj0GbjnRb)I06+$l z(5GCmX8AqGA6Nmw5G0Dan51bu8@#ES2Fxh ztM1flA9VD~Pey51zkZ6Dc|=H5IyrG;mk@x+d^`WI6p9y($nK|vPt=EY1MD09y?+WPT>2Z$Ld9m!YilGl9Km^n&h@KI6dqQufii@xsx z`W6)%%B$+V5mPHGTV^~*J@o|(D#VwN)pT<^i9GMPJH31Fnv#r_rol_eXm;|}JlA74 zUFq@F>8bG7#I1M5+{MQ^3bgj0D2gj`chmn3k#c18wrSDpb*XpQ`-%+4%QD(oFYt1_ zQjb9o-+CS$Coiinqo$~BY@ESdt`Q@CQp^qNXrN7#uh#wM>GHDM;9^17timb=DQU>~ zTYFY*eO5vh zRR8`}tnK9fqu4vchbxSqaK4}1FGsyz(s$M2%R<=+=&ukITW-geUu^X)J$C2Pp9nSVBWqlrVGEN0Z> zM$-~bHALZ#b03wJ1?RaIy{NJc9ABq5ORKBsaDV`2vgtE(O~*uALxGrXW0Q$?1KX|0 zJ)M4Sde;rV7w*5=xztouu@ge_`qaQdpf~~wPcQ6URN13T$H==HYHFw)N!^}0>BYKK zZjbog>XgdwKImbkUAyLJwBL5ON+GSRumtl?Lt zXm#am&C(7Z;e4ajX?NspH?mB$llm;2vb+Eg2c1}@1=CK=Jh~r69fj-Nf^vSl>Jaa+ zZ|Xqp@MX-wfha@VsMK~7e+Xv_3FL)Ir8LqjT~KoR%1C0?+9xt}yIFgV<@D(d_4U7{ zdnY;S_?_#*J5A6q%-M(LK8amyEMnDN4s19tiJBSj8K=}Ec(RO)3I^bD{8iWS!IlUjR zTW6@=H?IV$A(niIYM1ev{x5IsUAO`f<_Y+2Gc)E{&las;1u@wVKF)(Er+DkK?J({u z!C_bg!?nq|KCb(4f7<2bWyALVwIms_41+$q ztWNbAR~Ucp+{5LUQA1|%#M#8e$f*Ohj;)F7dd5tPO@R83l*iVy77P)-H9IA`8X08t z{4_)J(9=79_j&-K6Ssrv&j9)UD#5L7ZBFy&?_714h}%r}K*1Z3Ee6$msHu6rF4g0m zT!a;E;Ou&QD5n5f@qsFq^($8T+7Dr90lc{p+qBrn$d#{4ed?No>a2>p_wzM|X(gqK z4P6wF%bL$=WhS9gKa=wg!?N#5%WwOmkAanLWZ=~)Cz8&bvA8h%#MS3S>tbR<*MZCl z23D5ehP2MKQx7sHypxk@y4peU8TiwzVZ~`H-*x;};f?yO_m!WF1I)AtEfi#B9vP&N z3Gt7(=+sOmU>fp|M}OgX$#0`) z(Ac*z49_r4zUoiAMqj@P6Sii%==Ir^WsP|czm2-1m;s(LZw^B@?Cry`{G9@SyS8Q_ znn!6X$GZL!gFTS<)yp`YmNxIq!;I<$dwoqL(20FAD%|vs_1u8nAWhFID`pV6hQd%+SBb`%yWE9U5r9-VDlu<{q@>z+udcG{DV;L*$1ueWuq zUzk^gMxXZHsZrM2Y8$6ao_y=oXC6sF`p~|1vjelGUN2z}9W8QyJY&Q!F=FcC-l?*W z-ZDj=X&dum0&-r^ESu!hu>4ckg?efcnc*=pcir?6Kp z9U`8J{Z2^uK)T|VTxP9}`iUMRad9|kf}o5lyY`&SvIN|GkI}7?Pf{NwAPeSFnaa>~`^w7#5~=?^RO#S5g4Sc{UmN%)fz*UVAZ~TL&xnOq;i}7jLx##CLTk5RzY6g_FOSp z&S8TU2WFpRmd!q^Q<4TFBCmleZ+ZMszg_gBIZo^Y#tXt-L$?4G5m}iRV5BH`#GgNp z{>=2LQ!l12mX*nNA9DamZvTGH)N+DQE&>TlM4^DRFPuI5VEN_ontSfP;=+RSsu~-; zlgk(xESg_1#~Zx7`#>aB7k~DoqHAN+dN}Vg93NvFQ}ZJZXf9 z&N`f>_aBcUY$TiH%tKVRfv=Ox&}nv_JJ(99t4ZspNnx)BsdmBBB4hQ}k}pv1SIJxu zawH|SMJY4Gx?=sr@H2AZ0LfdRM0weXE-ueWzCrB3cZ+Gp=*fVGsRL`pS?z7?BXCyQ zjmiGJ5I_x{jB>_P9tO4)%H~)D0|KJHrCa%ykP^Xk97bHR7^BOzGA0lZML95AafCs% zHC$np;K>737{Vr%(((Kbav|o-%sOU!^g!5cx49nM)q3{)M(Z#*4PX+}nwcSqii`4( z`IC%~XkrP9m+MFCL|Dmn>NMZUDSO-)%{?V=JqgShQU)~Qrr%rV0fyn?>C>G~-eerG zTHPHckG9f+Suwr3b(5}E z{yEIQ4-Or7m9>r=Fc>?Qyg@0bgLUt&QSdf<^bCFVr3sZWtjo;!M+F5x1!gH!b&a7DxyELfMUFsb0y}sV=TrnW?#bqZJB+iLYrF z(}xLSK!2JgEg@RC%g>3@K3U=mnWjZGp4UOpaVLSs<~#3fHv92&?dP(J;)BGm@Q&K; d@a80vvy;*#b_p4Gs7^{*n$MV=Fwte({{SactO@`C From 9d0f1f6d8efdd397b90081648b2d1aa8248b2601 Mon Sep 17 00:00:00 2001 From: Medya Ghazizadeh Date: Thu, 10 Jun 2021 14:51:22 -0400 Subject: [PATCH 077/153] Update _index.md --- site/content/en/docs/faq/_index.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 68445b3db84b..2e818ecb75a2 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -7,6 +7,7 @@ description: > --- + ## How to run an older Kubernetes version with minikube ? You do not need to download an older minikube to run an older kubernetes version. @@ -82,3 +83,12 @@ Simply run the following command to be enrolled into beta notifications. ``` minikube config set WantBetaUpdateNotification true ``` + +## Can I remove/disable the emojis in minikube ? + +Yes ! if you reallly dislike the emoji :( you could set MINIKUBE_IN_STYLE envioronment variable to disable the emojis + +``` +MINIKUBE_IN_STYLE=0 minikube start + +``` From 2b3f7cedd77507aead2df8e0ce9dc2527a1096ee Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 13:02:56 -0700 Subject: [PATCH 078/153] Remove bootstrap from flake_chart.html. --- hack/jenkins/test-flake-chart/flake_chart.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/hack/jenkins/test-flake-chart/flake_chart.html b/hack/jenkins/test-flake-chart/flake_chart.html index f39859daffae..beaf224c207c 100644 --- a/hack/jenkins/test-flake-chart/flake_chart.html +++ b/hack/jenkins/test-flake-chart/flake_chart.html @@ -1,11 +1,9 @@ -
- \ No newline at end of file From a98db3511e4bfa091626d0c6c833db9cd6547ae8 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 13:16:16 -0700 Subject: [PATCH 079/153] Add description and example usage to all shell scripts. --- hack/jenkins/test-flake-chart/collect_data.sh | 4 ++++ hack/jenkins/test-flake-chart/optimize_data.sh | 3 +++ hack/jenkins/test-flake-chart/process_data.sh | 4 ++++ hack/jenkins/test-flake-chart/report_flakes.sh | 4 ++++ hack/jenkins/test-flake-chart/upload_tests.sh | 4 ++++ 5 files changed, 19 insertions(+) diff --git a/hack/jenkins/test-flake-chart/collect_data.sh b/hack/jenkins/test-flake-chart/collect_data.sh index a03b72682576..160eecf18f5f 100755 --- a/hack/jenkins/test-flake-chart/collect_data.sh +++ b/hack/jenkins/test-flake-chart/collect_data.sh @@ -14,6 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Collects all test data manually, processes it, and uploads to GCS. This will +# overwrite any existing data. +# Example usage: ./collect_data.sh + DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # 1) "cat" together all summary files. diff --git a/hack/jenkins/test-flake-chart/optimize_data.sh b/hack/jenkins/test-flake-chart/optimize_data.sh index e92f5e0df2e6..641dd6905b3e 100755 --- a/hack/jenkins/test-flake-chart/optimize_data.sh +++ b/hack/jenkins/test-flake-chart/optimize_data.sh @@ -14,6 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Takes a CSV file through stdin, compresses it and writes it to stdout. +# Example usage: < data.csv ./optimize_data.sh > data_optimized.csv + set -eu -o pipefail # Take input CSV. For each field, if it is the same as the previous row, replace it with an empty string. diff --git a/hack/jenkins/test-flake-chart/process_data.sh b/hack/jenkins/test-flake-chart/process_data.sh index dc0e66e4b352..b51e07a9e2fb 100755 --- a/hack/jenkins/test-flake-chart/process_data.sh +++ b/hack/jenkins/test-flake-chart/process_data.sh @@ -14,6 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Takes a series of gopogh summary jsons, and formats them into a CSV file with +# a row for each test. +# Example usage: cat gopogh_1.json gopogh_2.json gopogh_3.json | ./process_data.sh + set -eu -o pipefail # Print header. diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index b0933fa56a84..d4d5dc59b8b5 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -14,6 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Creates a comment on the provided PR number, using the provided gopogh summary +# to list out the flake rates of all failing tests. +# Example usage: ./report_flakes.sh 11602 gopogh.json Docker_Linux + set -eu -o pipefail if [ "$#" -ne 3 ]; then diff --git a/hack/jenkins/test-flake-chart/upload_tests.sh b/hack/jenkins/test-flake-chart/upload_tests.sh index 508d76f9ad10..5906f73ae173 100755 --- a/hack/jenkins/test-flake-chart/upload_tests.sh +++ b/hack/jenkins/test-flake-chart/upload_tests.sh @@ -14,6 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Takes a gopogh summary, extracts test data as a CSV and appends to the +# existing CSV data in the GCS bucket. +# Example usage: ./jenkins_upload_tests.sh gopogh_summary.json + set -eu -o pipefail if [ "$#" -ne 1 ]; then From 7e785c1c1e426c1a5b53b06df23d487229656f7a Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 13:19:05 -0700 Subject: [PATCH 080/153] Make collect_data.sh optimzie and upload to GCS automatically. --- hack/jenkins/test-flake-chart/collect_data.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hack/jenkins/test-flake-chart/collect_data.sh b/hack/jenkins/test-flake-chart/collect_data.sh index 160eecf18f5f..e62757a575bd 100755 --- a/hack/jenkins/test-flake-chart/collect_data.sh +++ b/hack/jenkins/test-flake-chart/collect_data.sh @@ -22,5 +22,9 @@ DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # 1) "cat" together all summary files. # 2) Process all summary files. +# 3) Optimize the resulting data. +# 4) Store in GCS bucket. gsutil cat gs://minikube-builds/logs/master/*/*_summary.json \ | $DIR/process_data.sh +| $DIR/optimize_data.sh +| gsutil cp - gs://minikube-flake-rate/data.csv From 884216db9e28526b3cf948a1aaf2978f94b919fe Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 13:27:00 -0700 Subject: [PATCH 081/153] Make report_flakes.sh abort if there are no failed tests. --- hack/jenkins/test-flake-chart/report_flakes.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index d4d5dc59b8b5..85589babf8d5 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -60,6 +60,12 @@ TMP_FAILED_RATES="$TMP_FLAKE_RATES\_filtered" | sort -g -t, -k2,2 \ > "$TMP_FAILED_RATES" +FAILED_RATES_LINES=$(wc -l < "$TMP_FAILED_RATES") +if [[ "$FAILED_RATES_LINES" -gt 30 ]]; then + echo "No failed tests! Aborting without commenting..." 1>&2 + exit 0 +fi + # Create the comment template. TMP_COMMENT=$(mktemp) printf "These are the flake rates of all failed tests on %s.\n|Failed Tests|Flake Rate (%%)|\n|---|---|\n" "$ENVIRONMENT" > "$TMP_COMMENT" @@ -71,7 +77,7 @@ printf "These are the flake rates of all failed tests on %s.\n|Failed Tests|Flak >> "$TMP_COMMENT" # If there are too many failing tests, add an extra row explaining this, and a message after the table. -if [[ $(wc -l < "$TMP_FAILED_RATES") -gt 30 ]]; then +if [[ "$FAILED_RATES_LINES" -gt 30 ]]; then printf "|More tests...|Continued...|\n\nToo many tests failed - See test logs for more details." >> "$TMP_COMMENT" fi From dc6cb0b671fd35b09f995259ef5949525dc7872f Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 13:30:35 -0700 Subject: [PATCH 082/153] Rename collect_data.sh to collect_data_manual.sh and make header comment more clear. --- .../{collect_data.sh => collect_data_manual.sh} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename hack/jenkins/test-flake-chart/{collect_data.sh => collect_data_manual.sh} (85%) diff --git a/hack/jenkins/test-flake-chart/collect_data.sh b/hack/jenkins/test-flake-chart/collect_data_manual.sh similarity index 85% rename from hack/jenkins/test-flake-chart/collect_data.sh rename to hack/jenkins/test-flake-chart/collect_data_manual.sh index e62757a575bd..bed3d74679a2 100755 --- a/hack/jenkins/test-flake-chart/collect_data.sh +++ b/hack/jenkins/test-flake-chart/collect_data_manual.sh @@ -15,8 +15,9 @@ # limitations under the License. # Collects all test data manually, processes it, and uploads to GCS. This will -# overwrite any existing data. -# Example usage: ./collect_data.sh +# overwrite any existing data. This should only be done for a dryrun, new data +# should be handled exclusively through upload_tests.sh. +# Example usage: ./collect_data_manual.sh DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) From 728229c719d3279f1cd88cdca06c7ab0c1171c38 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 13:36:23 -0700 Subject: [PATCH 083/153] Add more environments to the allowed environments for commenting. --- hack/jenkins/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh index b153185ee321..7ae29a332942 100755 --- a/hack/jenkins/common.sh +++ b/hack/jenkins/common.sh @@ -443,7 +443,7 @@ if [ -z "${EXTERNAL}" ]; then gsutil -qm cp "${SUMMARY_OUT}" "gs://${JOB_GCS_BUCKET}_summary.json" || true if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then ./test-flake-chart/upload_tests.sh "${SUMMARY_OUT}" - elif [[ "${JOB_NAME}" == "Docker_Linux" ]]; then + elif [[ "${JOB_NAME}" == "Docker_Linux" || "${JOB_NAME}" == "Docker_Linux_containerd" || "${JOB_NAME}" == "KVM_Linux" || "${JOB_NAME}" == "KVM_Linux_containerd" ]]; then ./test-flake-chart/report_flakes.sh "${MINIKUBE_LOCATION}" "${SUMMARY_OUT}" "${JOB_NAME}" fi else From 1c1fdbff42e0efcf3738640e31900bb421880dbf Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 14:00:47 -0700 Subject: [PATCH 084/153] Make compute_flake_rate also compute average test duration. --- .../test-flake-chart/compute_flake_rate.go | 42 ++++- .../compute_flake_rate_test.go | 165 ++++++++++++++---- .../jenkins/test-flake-chart/report_flakes.sh | 2 +- 3 files changed, 169 insertions(+), 40 deletions(-) diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index ccecf4f8109d..0025df2fbe30 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -24,6 +24,7 @@ import ( "os" "runtime/debug" "sort" + "strconv" "strings" "time" ) @@ -45,10 +46,12 @@ func main() { splitEntries := splitData(testEntries) filteredEntries := filterRecentEntries(splitEntries, *dateRange) flakeRates := computeFlakeRates(filteredEntries) - fmt.Println("Environment,Test,Flake Rate") + averageDurations := computeAverageDurations(filteredEntries) + fmt.Println("Environment,Test,Flake Rate,Duration") for environment, environmentSplit := range flakeRates { for test, flakeRate := range environmentSplit { - fmt.Printf("%s,%s,%.2f\n", environment, test, flakeRate*100) + duration := averageDurations[environment][test] + fmt.Printf("%s,%s,%.2f,%.3f\n", environment, test, flakeRate*100, duration) } } } @@ -59,12 +62,14 @@ func main() { // environment: "Docker_Linux", // date: time.Now, // status: "Passed", +// duration: 0.1, // } type testEntry struct { name string environment string date time.Time status string + duration float32 } // A map with keys of (environment, test_name) to values of slcies of TestEntry. @@ -107,12 +112,19 @@ func readData(file io.Reader) []testEntry { date, err := time.Parse("2006-01-02", fields[1]) if err != nil { fmt.Printf("Failed to parse date: %v\n", err) + continue + } + duration, err := strconv.ParseFloat(fields[5], 32) + if err != nil { + fmt.Printf("Failed to parse duration: %v\n", err) + continue } testEntries = append(testEntries, testEntry{ name: fields[3], environment: fields[2], date: date, status: fields[4], + duration: float32(duration), }) } } @@ -215,14 +227,32 @@ func computeFlakeRates(splitEntries splitEntryMap) map[string]map[string]float32 return flakeRates } -// Sets the `value` of keys `environment` and `test` in `flakeRates`. -func setValue(flakeRates map[string]map[string]float32, environment, test string, value float32) { +// Computes the average durations over each entry in `splitEntries`. +func computeAverageDurations(splitEntries splitEntryMap) map[string]map[string]float32 { + averageDurations := make(map[string]map[string]float32) + for environment, environmentSplit := range splitEntries { + for test, testSplit := range environmentSplit { + durationSum := float32(0) + for _, entry := range testSplit { + durationSum += entry.duration + } + if len(testSplit) != 0 { + durationSum /= float32(len(testSplit)) + } + setValue(averageDurations, environment, test, durationSum) + } + } + return averageDurations +} + +// Sets the `value` of keys `environment` and `test` in `mapEntries`. +func setValue(mapEntries map[string]map[string]float32, environment, test string, value float32) { // Lookup the environment. - environmentRates, ok := flakeRates[environment] + environmentRates, ok := mapEntries[environment] if !ok { // If the environment map is missing, make a map for this environment and store it. environmentRates = make(map[string]float32) - flakeRates[environment] = environmentRates + mapEntries[environment] = environmentRates } environmentRates[test] = value } diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go index 2f458daad97f..d4013c08855f 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate_test.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate_test.go @@ -53,10 +53,10 @@ func TestReadData(t *testing.T) { actualData := readData(strings.NewReader( `A,B,C,D,E,F hash,2000-01-01,env1,test1,Passed,1 - hash,2001-01-01,env2,test2,Failed,1 - hash,,,test1,,1 - hash,2002-01-01,,,Passed,1 - hash,2003-01-01,env3,test3,Passed,1`, + hash,2001-01-01,env2,test2,Failed,0.5 + hash,,,test1,,0.6 + hash,2002-01-01,,,Passed,0.9 + hash,2003-01-01,env3,test3,Passed,2`, )) expectedData := []testEntry{ { @@ -64,30 +64,35 @@ func TestReadData(t *testing.T) { environment: "env1", date: simpleDate(2000, 1), status: "Passed", + duration: 1, }, { name: "test2", environment: "env2", date: simpleDate(2001, 1), status: "Failed", + duration: 0.5, }, { name: "test1", environment: "env2", date: simpleDate(2001, 1), status: "Failed", + duration: 0.6, }, { name: "test1", environment: "env2", date: simpleDate(2002, 1), status: "Passed", + duration: 0.9, }, { name: "test3", environment: "env3", date: simpleDate(2003, 1), status: "Passed", + duration: 2, }, } @@ -280,6 +285,42 @@ func TestFilterRecentEntries(t *testing.T) { compareSplitData(t, actualData, expectedData) } +func compareValues(t *testing.T, actualValues, expectedValues map[string]map[string]float32) { + for environment, actualTests := range actualValues { + expectedTests, environmentOk := expectedValues[environment] + if !environmentOk { + t.Errorf("Unexpected environment %s in actual", environment) + continue + } + + for test, actualValue := range actualTests { + expectedValue, testOk := expectedTests[test] + if !testOk { + t.Errorf("Unexpected test %s (in environment %s) in actual", test, environment) + continue + } + + if actualValue != expectedValue { + t.Errorf("Wrong value at environment %s and test %s. Expected: %v, Actual: %v", environment, test, expectedValue, actualValue) + } + } + + for test := range expectedTests { + _, testOk := actualTests[test] + if !testOk { + t.Errorf("Missing expected test %s (in environment %s) in actual", test, environment) + } + } + } + + for environment := range expectedValues { + _, environmentOk := actualValues[environment] + if !environmentOk { + t.Errorf("Missing expected environment %s in actual", environment) + } + } +} + func TestComputeFlakeRates(t *testing.T) { actualData := computeFlakeRates(splitEntryMap{ "env1": { @@ -357,37 +398,95 @@ func TestComputeFlakeRates(t *testing.T) { }, } - for environment, actualTests := range actualData { - expectedTests, environmentOk := expectedData[environment] - if !environmentOk { - t.Errorf("Unexpected environment %s in actual", environment) - continue - } - - for test, actualFlakeRate := range actualTests { - expectedFlakeRate, testOk := expectedTests[test] - if !testOk { - t.Errorf("Unexpected test %s (in environment %s) in actual", test, environment) - continue - } + compareValues(t, actualData, expectedData) +} - if actualFlakeRate != expectedFlakeRate { - t.Errorf("Wrong flake rate. Expected: %v, Actual: %v", expectedFlakeRate, actualFlakeRate) - } - } +func TestComputeAverageDurations(t *testing.T) { + actualData := computeAverageDurations(splitEntryMap{ + "env1": { + "test1": { + { + name: "test1", + environment: "env1", + date: simpleDate(2000, 4), + status: "Passed", + duration: 1, + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, 3), + status: "Passed", + duration: 2, + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, 3), + status: "Passed", + duration: 3, + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, 2), + status: "Passed", + duration: 3, + }, { + name: "test1", + environment: "env1", + date: simpleDate(2000, 1), + status: "Failed", + duration: 3, + }, + }, + "test2": { + { + name: "test2", + environment: "env1", + date: simpleDate(2001, 3), + status: "Failed", + duration: 1, + }, { + name: "test2", + environment: "env1", + date: simpleDate(2001, 2), + status: "Failed", + duration: 3, + }, { + name: "test2", + environment: "env1", + date: simpleDate(2001, 1), + status: "Failed", + duration: 3, + }, + }, + }, + "env2": { + "test2": { + { + name: "test2", + environment: "env2", + date: simpleDate(2003, 3), + status: "Passed", + duration: 0.5, + }, testEntry{ + name: "test2", + environment: "env2", + date: simpleDate(2003, 2), + status: "Failed", + duration: 1.5, + }, + }, + }, + }) - for test := range expectedTests { - _, testOk := actualTests[test] - if !testOk { - t.Errorf("Missing expected test %s (in environment %s) in actual", test, environment) - } - } + expectedData := map[string]map[string]float32{ + "env1": { + "test1": float32(12) / float32(5), + "test2": float32(7) / float32(3), + }, + "env2": { + "test2": 1, + }, } - for environment := range expectedData { - _, environmentOk := actualData[environment] - if !environmentOk { - t.Errorf("Missing expected environment %s in actual", environment) - } - } + compareValues(t, actualData, expectedData) } diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index 85589babf8d5..a04c0d359cf4 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -54,7 +54,7 @@ TMP_FAILED_RATES="$TMP_FLAKE_RATES\_filtered" # 3) Join the flake rates with the failing tests to only get flake rates of failing tests. # 4) Sort failed test flake rates based on the flakiness of that test - stable tests should be first on the list. # 5) Store in file $TMP_FAILED_RATES. -< "$TMP_FLAKE_RATES" sed -n -r -e "s/$ENVIRONMENT,([a-zA-Z\/_-]*),([.0-9]*)/\1,\2/p" \ +< "$TMP_FLAKE_RATES" sed -n -r -e "s/$ENVIRONMENT,([a-zA-Z\/_-]*),([.0-9]*),[.0-9]*/\1,\2/p" \ | sort -t, -k1,1 \ | join -t , -j 1 "$TMP_DATA" - \ | sort -g -t, -k2,2 \ From 806d8999887efc40c849577f2d4177e8c41e2a78 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 10 Jun 2021 14:26:04 -0700 Subject: [PATCH 085/153] Add timeout to apiserver health check. --- pkg/minikube/bootstrapper/bsutil/kverify/api_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/bootstrapper/bsutil/kverify/api_server.go b/pkg/minikube/bootstrapper/bsutil/kverify/api_server.go index 39c29a164077..e5d275beca44 100644 --- a/pkg/minikube/bootstrapper/bsutil/kverify/api_server.go +++ b/pkg/minikube/bootstrapper/bsutil/kverify/api_server.go @@ -232,7 +232,7 @@ func apiServerHealthzNow(hostname string, port int) (state.State, error) { Proxy: nil, // Avoid using a proxy to speak to a local host TLSClientConfig: &tls.Config{RootCAs: pool}, } - client := &http.Client{Transport: tr} + client := &http.Client{Transport: tr, Timeout: 5 * time.Second} resp, err := client.Get(url) // Connection refused, usually. if err != nil { From ed65761187f15a214139ec49c400f2389d493d06 Mon Sep 17 00:00:00 2001 From: minikube-bot Date: Fri, 11 Jun 2021 08:57:50 -0700 Subject: [PATCH 086/153] Update releases.json to include v1.21.0 --- deploy/minikube/releases.json | 8 ++++++++ site/content/en/docs/_index.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/deploy/minikube/releases.json b/deploy/minikube/releases.json index 5172ffb61ce1..af0d047a75ad 100644 --- a/deploy/minikube/releases.json +++ b/deploy/minikube/releases.json @@ -1,4 +1,12 @@ [ + { + "name": "v1.21.0", + "checksums": { + "darwin": "e2043883ca993b2a65396d379823dab6404dd842d0cc2a81348d247b01785070", + "linux": "5d423a00a24fdfbb95627a3fadbf58540fc4463be2338619257c529f93cf061b", + "windows": "74c961877798531ab8e53e2590bfae3cee7690d0c2e0614fdb44339e065124b5" + } + }, { "name": "v1.20.0", "checksums": { diff --git a/site/content/en/docs/_index.md b/site/content/en/docs/_index.md index a3153bc9eb37..69776d0fe31a 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.20.0 - May 06, 2021 ([changelog](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md)) +🎉 Latest Release: v1.21.0 - Jun 11, 2021 ([changelog](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md)) ## Highlights From 2807cb0b8e339e33678335d7e090b6d43cb6a35b Mon Sep 17 00:00:00 2001 From: Medya Ghazizadeh Date: Fri, 11 Jun 2021 12:31:08 -0400 Subject: [PATCH 087/153] Update _index.md --- site/content/en/docs/faq/_index.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 2e818ecb75a2..d7346c86995f 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -7,7 +7,6 @@ description: > --- - ## How to run an older Kubernetes version with minikube ? You do not need to download an older minikube to run an older kubernetes version. @@ -84,9 +83,7 @@ Simply run the following command to be enrolled into beta notifications. minikube config set WantBetaUpdateNotification true ``` -## Can I remove/disable the emojis in minikube ? - -Yes ! if you reallly dislike the emoji :( you could set MINIKUBE_IN_STYLE envioronment variable to disable the emojis +Yes! If you prefer not having emoji in your minikube output 😔 , just set the MINIKUBE_IN_STYLE environment variable to 0 or false ``` MINIKUBE_IN_STYLE=0 minikube start From efb9514a333c8bd130015ab19a089ace88a39b2d Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 11 Jun 2021 11:20:20 -0700 Subject: [PATCH 088/153] add contribution leaderboard for v1.21.0 --- .../en/docs/contrib/leaderboard/v1.21.0.html | 496 ++++++++++++++++++ 1 file changed, 496 insertions(+) create mode 100644 site/content/en/docs/contrib/leaderboard/v1.21.0.html diff --git a/site/content/en/docs/contrib/leaderboard/v1.21.0.html b/site/content/en/docs/contrib/leaderboard/v1.21.0.html new file mode 100644 index 000000000000..e497ff1b04d0 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.21.0.html @@ -0,0 +1,496 @@ +--- +title: "v1.21.0 - 2021-06-11" +linkTitle: "v1.21.0 - 2021-06-11" +weight: -97 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + +

kubernetes/minikube

+
2021-05-06 — 2021-06-11
+ + + +

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)

+
+ +
+ + + + From 362a8651fd3c4cb85c30c5f9b5bf528424327491 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 11 Jun 2021 12:41:19 -0700 Subject: [PATCH 089/153] site: Cleanup FAQ formatting and grammar. --- site/content/en/docs/faq/_index.md | 43 ++++++++++++++++-------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index d7346c86995f..4cad059b9f62 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -7,10 +7,10 @@ description: > --- -## How to run an older Kubernetes version with minikube ? +## Can I run an older Kubernetes version with minikube? Do I have to downgrade my minikube version? You do not need to download an older minikube to run an older kubernetes version. -You can create a Kubenretes cluster with any version you desire using `--kubernetes-version` flag. +You can create a Kubernetes cluster with any version you desire using `--kubernetes-version` flag. Example: @@ -19,26 +19,27 @@ minikube start --kubernetes-version=v1.15.0 ``` -## Docker Driver: How to set the cgroup manager minikube uses? +## Docker Driver: How can I set minikube's cgroup manager? -By default minikube uses the `cgroupfs` cgroup manager for the Kubernetes clusters, if you are on a system with a systemd cgroup manager, this could cause conflicts. -To use `systemd` cgroup manager, run: +By default minikube uses the `cgroupfs` cgroup manager for Kubernetes clusters. If you are on a system with a systemd cgroup manager, this could cause conflicts. +To use the `systemd` cgroup manager, run: ```bash minikube start --force-systemd=true ``` -## How to run minikube with Docker driver if existing cluster is VM? +## How can I run minikube with the Docker driver if I have an existing cluster with a VM driver? -If you have an existing cluster with a VM driver (virtualbox, hyperkit, KVM,...). +First please ensure your Docker service is running. Then you need to either: + +(a) Delete the existing cluster and create a new one -First please ensure your Docker service is running and then you need to either delete the existing cluster and create one ```bash minikube delete minikube start --driver=docker ``` -Alternatively, if you want to keep your existing cluster you can create a second cluster with a different profile name. (example p1) +Alternatively, (b) Create a second cluster with a different profile name: ```bash minikube start -p p1 --driver=docker @@ -46,27 +47,27 @@ minikube start -p p1 --driver=docker ## Does minikube support IPv6? -minikube currently doesn't support IPv6. However, it is on the [roadmap]({{< ref "/docs/contrib/roadmap.en.md" >}}). +minikube currently doesn't support IPv6. However, it is on the [roadmap]({{< ref "/docs/contrib/roadmap.en.md" >}}). You can also refer to the [open issue.](https://github.com/kubernetes/minikube/issues/8535) ## How can I prevent password prompts on Linux? The easiest approach is to use the `docker` driver, as the backend service always runs as `root`. -`none` users may want to try `CHANGE_MINIKUBE_NONE_USER=true`, where kubectl and such will still work: [see environment variables]({{< ref "/docs/handbook/config.md#environment-variables" >}}) +`none` users may want to try `CHANGE_MINIKUBE_NONE_USER=true`, where kubectl and such will work without `sudo`. See [environment variables]({{< ref "/docs/handbook/config.md#environment-variables" >}}) for more details. -Alternatively, configure `sudo` to never prompt for the commands issued by minikube. +Alternatively, you can configure `sudo` to never prompt for commands issued by minikube. -## How to ignore system verification? +## How can I ignore system verification? -minikube's bootstrapper, [Kubeadm](https://github.com/kubernetes/kubeadm) verifies a list of features on the host system before installing Kubernetes. in case you get this error, and you still want to try minikube anyways despite your system's limitation you can skip the verification by starting minikube with this extra option: +[kubeadm](https://github.com/kubernetes/kubeadm), minikube's bootstrapper, verifies a list of features on the host system before installing Kubernetes. In the case you get an error and still want to try minikube despite your system's limitation, you can skip verification by starting minikube with this extra option: ```shell minikube start --extra-config kubeadm.ignore-preflight-errors=SystemVerification ``` -## what is the resource allocation for Knative Setup using minikube? +## What is the minimum resource allocation necessary for a Knative setup using minikube? -Please allocate sufficient resources for Knative setup using minikube, especially when you run a minikube cluster on your local machine. We recommend allocating at least 6 CPUs and 8G memory. +Please allocate sufficient resources for Knative setup using minikube, especially when you running minikube cluster on your local machine. We recommend allocating at least 6 CPUs and 8G memory: ```shell minikube start --cpus 6 --memory 8000 @@ -74,16 +75,18 @@ minikube start --cpus 6 --memory 8000 ## Do I need to install kubectl locally? -No, minikube comes with built-in kubectl [see minikube's kubectl documentation]({{< ref "docs/handbook/kubectl.md" >}}). +No, minikube comes with a built-in kubectl installation. See [minikube's kubectl documentation.]({{< ref "docs/handbook/kubectl.md" >}}). -## How to opt-in to beta notifications? +## How can I opt-in to beta release notifications? -Simply run the following command to be enrolled into beta notifications. +Simply run the following command to be enrolled into beta notifications: ``` minikube config set WantBetaUpdateNotification true ``` -Yes! If you prefer not having emoji in your minikube output 😔 , just set the MINIKUBE_IN_STYLE environment variable to 0 or false +## Can I get rid of the emoji in minikube's outpuut? + +Yes! If you prefer not having emoji in your minikube output 😔 , just set the `MINIKUBE_IN_STYLE` environment variable to `0` or `false`: ``` MINIKUBE_IN_STYLE=0 minikube start From 79cf1adc400635bfb71cfe0ecfe76b0b87912a5e Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 11 Jun 2021 12:43:11 -0700 Subject: [PATCH 090/153] change subtitle --- site/content/en/docs/faq/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 4cad059b9f62..3891ad983833 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -3,7 +3,7 @@ title: "FAQ" linkTitle: "FAQ" weight: 3 description: > - Questions that come up regularly + Frequently Asked Questions --- From 60141cf5221887598d63395d2e4f4e96242a263d Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 11 Jun 2021 13:02:11 -0700 Subject: [PATCH 091/153] fixes --- site/content/en/docs/faq/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 3891ad983833..9b5f9a6d95ba 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -47,7 +47,7 @@ minikube start -p p1 --driver=docker ## Does minikube support IPv6? -minikube currently doesn't support IPv6. However, it is on the [roadmap]({{< ref "/docs/contrib/roadmap.en.md" >}}). You can also refer to the [open issue.](https://github.com/kubernetes/minikube/issues/8535) +minikube currently doesn't support IPv6. However, it is on the [roadmap]({{< ref "/docs/contrib/roadmap.en.md" >}}). You can also refer to the [open issue](https://github.com/kubernetes/minikube/issues/8535). ## How can I prevent password prompts on Linux? @@ -67,7 +67,7 @@ minikube start --extra-config kubeadm.ignore-preflight-errors=SystemVerification ## What is the minimum resource allocation necessary for a Knative setup using minikube? -Please allocate sufficient resources for Knative setup using minikube, especially when you running minikube cluster on your local machine. We recommend allocating at least 6 CPUs and 8G memory: +Please allocate sufficient resources for Knative setup using minikube, especially when running minikube cluster on your local machine. We recommend allocating at least 6 CPUs and 8G memory: ```shell minikube start --cpus 6 --memory 8000 @@ -75,7 +75,7 @@ minikube start --cpus 6 --memory 8000 ## Do I need to install kubectl locally? -No, minikube comes with a built-in kubectl installation. See [minikube's kubectl documentation.]({{< ref "docs/handbook/kubectl.md" >}}). +No, minikube comes with a built-in kubectl installation. See [minikube's kubectl documentation]({{< ref "docs/handbook/kubectl.md" >}}). ## How can I opt-in to beta release notifications? From 334f3e8e8dfb987c6b6f88b07cf0bc793967041f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 06:52:05 +0000 Subject: [PATCH 092/153] Bump google.golang.org/api from 0.47.0 to 0.48.0 Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.47.0 to 0.48.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/master/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.47.0...v0.48.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 25 ++++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 14e9ebfacc4f..72a311e54608 100644 --- a/go.mod +++ b/go.mod @@ -84,11 +84,11 @@ require ( golang.org/x/mod v0.4.2 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 + golang.org/x/sys v0.0.0-20210603125802-9665404d3644 golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 golang.org/x/text v0.3.6 gonum.org/v1/plot v0.9.0 - google.golang.org/api v0.47.0 + google.golang.org/api v0.48.0 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect gopkg.in/yaml.v2 v2.4.0 gotest.tools/v3 v3.0.3 // indirect diff --git a/go.sum b/go.sum index 02edccd9828e..de7f56d87edb 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,9 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0 h1:bAMqZidYkmIsUqe6PtkEPT7Q+vfizScn+jfNA6jwK9c= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= 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= @@ -467,6 +468,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= @@ -498,8 +500,9 @@ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -511,6 +514,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/slowjam v0.0.0-20200530021616-df27e642fe7b h1:x3aElhKtGmXLo6RI2FJSBaPBT0acmn2LFfKVP1CqH8o= github.com/google/slowjam v0.0.0-20200530021616-df27e642fe7b/go.mod h1:i4b4iDjZbKPkbD7z9Ycy4gtcALPoh8E9O3+wvtw7IB0= @@ -1313,8 +1317,9 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 h1:hZR0X1kPW+nwyJ9xRxqZk1vx5RUObAPBdKVvXPDUH/E= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644 h1:CA1DEQ4NdKphKeL70tvsWNdT5oFh1lOjihRcEDROi0I= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 h1:VqE9gduFZ4dbR7XoL77lHFp0/DyDUBKSXK7CMFkVcV0= golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1400,8 +1405,9 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA= +golang.org/x/tools v0.1.2/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= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1442,8 +1448,9 @@ 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.45.0/go.mod h1:ISLIJCedJolbZvDfAk+Ctuq5hf+aJ33WgtUsfyFoLXA= -google.golang.org/api v0.47.0 h1:sQLWZQvP6jPGIP4JGPkJu4zHswrv81iobiyszr3b/0I= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0 h1:RDAPWfNFY06dffEXfn7hZF5Fr1ZbnChzfQZAPyBd1+I= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= 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= @@ -1501,8 +1508,10 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D 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 h1:z+j74wi4yV+P7EtK9gPLGukOk7mFOy9wMQaC0wNb7eY= 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 h1:pc16UedxnxXXtGxHCSUhafAoVHQZ0yXl8ZelMH4EETc= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 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= @@ -1527,8 +1536,10 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1 h1:ARnQJNWxGyYJpdf/JXscNlQr/uv607ZPU9Z7ogHi+iI= google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From 4eb3c6332d7a242261a284ca04ee5afbaae3190e Mon Sep 17 00:00:00 2001 From: Dongjoon Hyun Date: Mon, 14 Jun 2021 15:11:49 -0700 Subject: [PATCH 093/153] Fix a download link to use arm64 instead of amd64 --- cmd/minikube/cmd/root.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index cfcd7f02763e..5b81138d82a0 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -97,7 +97,7 @@ func Execute() { if runtime.GOOS == "darwin" && detect.IsAmd64M1Emulation() { exit.Message(reason.WrongBinaryM1, "You are trying to run amd64 binary on M1 system. Please use darwin/arm64 binary instead (Download at {{.url}}.)", - out.V{"url": notify.DownloadURL(version.GetVersion(), "darwin", "amd64")}) + out.V{"url": notify.DownloadURL(version.GetVersion(), "darwin", "arm64")}) } _, callingCmd := filepath.Split(os.Args[0]) From e7e52584c55bc301d3182e1b7f315885f8dc1e4a Mon Sep 17 00:00:00 2001 From: zhangdb-git Date: Tue, 15 Jun 2021 05:36:58 -0400 Subject: [PATCH 094/153] Remove duplicated translations --- site/content/en/docs/handbook/controls.md | 2 +- translations/ko.json | 5 ++--- translations/pl.json | 5 ++--- translations/zh-CN.json | 5 ++--- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/site/content/en/docs/handbook/controls.md b/site/content/en/docs/handbook/controls.md index 0f1218ca6336..0301da5e18d5 100644 --- a/site/content/en/docs/handbook/controls.md +++ b/site/content/en/docs/handbook/controls.md @@ -16,7 +16,7 @@ Start a cluster by running: minikube start ``` -Access the Kubernetes Dashboard running within the minikube cluster: +Access the Kubernetes dashboard running within the minikube cluster: ```shell minikube dashboard diff --git a/translations/ko.json b/translations/ko.json index 67b0f2a3fa02..22a0818c5eb2 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -33,8 +33,7 @@ "A set of apiserver IP Addresses 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": "", "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": "", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "", - "Access the Kubernetes dashboard running within the minikube cluster": "", - "Access the kubernetes dashboard running within the minikube cluster": "minikube 클러스터 내의 쿠버네티스 대시보드에 접근합니다", + "Access the Kubernetes dashboard running within the minikube cluster": "minikube 클러스터 내의 쿠버네티스 대시보드에 접근합니다", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", "Add SSH identity key to SSH authentication agent": "SSH 인증 에이전트에 SSH ID 키 추가합니다", "Add an image to local cache.": "로컬 캐시에 이미지를 추가합니다", @@ -962,4 +961,4 @@ "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} 프로파일이 올바르지 않습니다: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "{{.url}} 이 접근 불가능합니다: {{.error}}" -} \ No newline at end of file +} diff --git a/translations/pl.json b/translations/pl.json index 76bd872c815b..8991b99ee0ae 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -32,8 +32,7 @@ "A set of apiserver IP Addresses 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": "", "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": "", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "", - "Access the Kubernetes dashboard running within the minikube cluster": "", - "Access the kubernetes dashboard running within the minikube cluster": "Dostęp do dashboardu uruchomionego w klastrze kubernetesa w minikube", + "Access the Kubernetes dashboard running within the minikube cluster": "Dostęp do dashboardu uruchomionego w klastrze kubernetesa w minikube", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", "Add SSH identity key to SSH authentication agent": "", "Add an image to local cache.": "Dodaj obraz do lokalnego cache", @@ -962,4 +961,4 @@ "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} profil nie jest poprawny: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} nie jest wspierany przez system plików. I tak spróbujemy!", "{{.url}} is not accessible: {{.error}}": "{{.url}} nie jest osiągalny: {{.error}}" -} \ No newline at end of file +} diff --git a/translations/zh-CN.json b/translations/zh-CN.json index e5864037741f..62beb100008a 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -39,8 +39,7 @@ "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": "一组在为 kubernetes 生成的证书中使用的 apiserver 名称。如果您希望将此 apiserver 设置为可从机器外部访问,则可以使用这组 apiserver 名称", "A set of key=value pairs that describe configuration that may be passed to different components.\nThe key should be '.' separated, and the first part before the dot is the component to apply the configuration to.\nValid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nValid kubeadm parameters:": "一组用于描述可传递给不同组件的配置的键值对。\n其中键应以英文句点“.”分隔,英文句点前面的第一个部分是应用该配置的组件。\n有效组件包括:kubelet、kubeadm、apiserver、controller-manager、etcd、proxy、scheduler\n有效 kubeadm 参数包括:", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "一组用于描述 alpha 版功能/实验性功能的功能限制的键值对。", - "Access the Kubernetes dashboard running within the minikube cluster": "", - "Access the kubernetes dashboard running within the minikube cluster": "访问在 minikube 集群中运行的 kubernetes dashboard", + "Access the Kubernetes dashboard running within the minikube cluster": "访问在 minikube 集群中运行的 kubernetes dashboard", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", "Add SSH identity key to SSH authentication agent": "", "Add an image to local cache.": "将 image 添加到本地缓存。", @@ -1072,4 +1071,4 @@ "{{.profile}} profile is not valid: {{.err}}": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "" -} \ No newline at end of file +} From 231fbee7b5a1a0c7ec2d095acc942b5719eb05c8 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 15 Jun 2021 09:55:32 -0700 Subject: [PATCH 095/153] Fix collect_data_manual not being formatted correctly. --- hack/jenkins/test-flake-chart/collect_data_manual.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hack/jenkins/test-flake-chart/collect_data_manual.sh b/hack/jenkins/test-flake-chart/collect_data_manual.sh index bed3d74679a2..287a1a63d50e 100755 --- a/hack/jenkins/test-flake-chart/collect_data_manual.sh +++ b/hack/jenkins/test-flake-chart/collect_data_manual.sh @@ -26,6 +26,6 @@ DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # 3) Optimize the resulting data. # 4) Store in GCS bucket. gsutil cat gs://minikube-builds/logs/master/*/*_summary.json \ -| $DIR/process_data.sh -| $DIR/optimize_data.sh +| $DIR/process_data.sh \ +| $DIR/optimize_data.sh \ | gsutil cp - gs://minikube-flake-rate/data.csv From 599e7c49e9e06e354a77960d827f5065e810fa03 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 15 Jun 2021 10:17:46 -0700 Subject: [PATCH 096/153] create automated time-to-k8s benchmarks on release --- .github/workflows/time-to-k8s.yml | 20 +++++++++ .gitmodules | 4 +- .../{time-to-k8s => time-to-k8s-repo} | 0 hack/benchmark/time-to-k8s/time-to-k8s.sh | 43 +++++++++++++++---- 4 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/time-to-k8s.yml rename hack/benchmark/time-to-k8s/{time-to-k8s => time-to-k8s-repo} (100%) diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml new file mode 100644 index 000000000000..d3f82b23d42d --- /dev/null +++ b/.github/workflows/time-to-k8s.yml @@ -0,0 +1,20 @@ +name: "time-to-k8s benchmark" +on: + pull_request: + types: [opened] + # release: + # types: [released] +jobs: + benchmark: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Checkout submodules + run: git submodule update --init + - uses: actions/setup-go@v2 + with: + go-version: 1.16.5 + stable: true + - name: Benchmark + run: | + ./hack/benchmark/time-to-k8s/time-to-k8s.sh ${{ secrets.MINIKUBE_BOT_PAT }} diff --git a/.gitmodules b/.gitmodules index 0e9969323318..d398a94cf9b5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "site/themes/docsy"] path = site/themes/docsy url = https://github.com/google/docsy.git -[submodule "hack/benchmark/time-to-k8s/time-to-k8s"] - path = hack/benchmark/time-to-k8s/time-to-k8s +[submodule "hack/benchmark/time-to-k8s/time-to-k8s-repo"] + path = hack/benchmark/time-to-k8s/time-to-k8s-repo url = https://github.com/tstromberg/time-to-k8s.git diff --git a/hack/benchmark/time-to-k8s/time-to-k8s b/hack/benchmark/time-to-k8s/time-to-k8s-repo similarity index 100% rename from hack/benchmark/time-to-k8s/time-to-k8s rename to hack/benchmark/time-to-k8s/time-to-k8s-repo diff --git a/hack/benchmark/time-to-k8s/time-to-k8s.sh b/hack/benchmark/time-to-k8s/time-to-k8s.sh index d999a6afc870..f0ea5aaf853c 100755 --- a/hack/benchmark/time-to-k8s/time-to-k8s.sh +++ b/hack/benchmark/time-to-k8s/time-to-k8s.sh @@ -17,7 +17,7 @@ set -e install_kind() { - curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.0/kind-linux-amd64 + curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.0/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local } @@ -31,31 +31,58 @@ install_minikube() { sudo install ./out/minikube /usr/local/bin/minikube } +install_gh() { + export access_token="$1" + + # Make sure gh is installed and configured + ./hack/jenkins/installers/check_install_gh.sh +} + +config_git() { + git config user.name "minikube-bot" + git config user.email "minikube-bot@google.com" +} + +create_branch() { + git checkout -b addTimeToK8s"$1" +} + run_benchmark() { - ( cd ./hack/benchmark/time-to-k8s/time-to-k8s/ && + pwd + ( cd ./hack/benchmark/time-to-k8s/time-to-k8s-repo/ && git submodule update --init && - go run . --config local-kubernetes.yaml --iterations 5 --output output.csv ) + go run . --config local-kubernetes.yaml --iterations 1 --output output.csv ) } generate_chart() { - go run ./hack/benchmark/time-to-k8s/chart.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s/output.csv --output ./site/static/images/benchmarks/timeToK8s/"$1".png + go run ./hack/benchmark/time-to-k8s/chart.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --output ./site/static/images/benchmarks/timeToK8s/"$1".png } create_page() { printf -- "---\ntitle: \"%s Benchmark\"\nlinkTitle: \"%s Benchmark\"\nweight: 1\n---\n\n![time-to-k8s](/images/benchmarks/timeToK8s/%s.png)\n" "$1" "$1" "$1" > ./site/content/en/docs/benchmarks/timeToK8s/"$1".md } -commit_chart() { +commit_changes() { git add ./site/static/images/benchmarks/timeToK8s/"$1".png ./site/content/en/docs/benchmarks/timeToK8s/"$1".md - git commit -m 'update time-to-k8s chart' + git commit -m "add time-to-k8s benchmark for $1" +} + +create_pr() { + git remote add minikube-bot https://minikube-bot:"$2"@github.com/minikube-bot/minikube.git + git push -u minikube-bot addTimeToK8s"$1" + gh pr create --repo kubernetes/minikube --base master --title "Add time-to-k8s benchmark for $1" --body "Updating time-to-k8s benchmark as part of the release process" } install_kind install_k3d install_minikube -VERSION=$(minikube version --short) +install_gh "$1" +config_git +VERSION=$(minikube version --short) +create_branch "$VERSION" run_benchmark generate_chart "$VERSION" create_page "$VERSION" -commit_chart "$VERSION" +commit_changes "$VERSION" +create_pr "$VERSION" "$1" From 262e6c2072a4b2e3b2c158c03210029729a87969 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 15 Jun 2021 10:23:03 -0700 Subject: [PATCH 097/153] uncomment run on release --- .github/workflows/time-to-k8s.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml index d3f82b23d42d..991f8b73a004 100644 --- a/.github/workflows/time-to-k8s.yml +++ b/.github/workflows/time-to-k8s.yml @@ -1,9 +1,7 @@ name: "time-to-k8s benchmark" on: - pull_request: - types: [opened] - # release: - # types: [released] + release: + types: [released] jobs: benchmark: runs-on: ubuntu-18.04 From 4480bda5a040fb33b0e2c1d0c20d7f40052df8c0 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 15 Jun 2021 10:27:02 -0700 Subject: [PATCH 098/153] fixed yaml formatting --- .github/workflows/time-to-k8s.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml index 991f8b73a004..0b4103ac7120 100644 --- a/.github/workflows/time-to-k8s.yml +++ b/.github/workflows/time-to-k8s.yml @@ -1,7 +1,7 @@ name: "time-to-k8s benchmark" on: - release: - types: [released] + release: + types: [released] jobs: benchmark: runs-on: ubuntu-18.04 From 25c5bec652876db534cd186a5c4c7b7f70f8b50c Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 15 Jun 2021 10:30:08 -0700 Subject: [PATCH 099/153] change back iterations to 5 --- hack/benchmark/time-to-k8s/time-to-k8s.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/benchmark/time-to-k8s/time-to-k8s.sh b/hack/benchmark/time-to-k8s/time-to-k8s.sh index f0ea5aaf853c..a16beea807cd 100755 --- a/hack/benchmark/time-to-k8s/time-to-k8s.sh +++ b/hack/benchmark/time-to-k8s/time-to-k8s.sh @@ -51,7 +51,7 @@ run_benchmark() { pwd ( cd ./hack/benchmark/time-to-k8s/time-to-k8s-repo/ && git submodule update --init && - go run . --config local-kubernetes.yaml --iterations 1 --output output.csv ) + go run . --config local-kubernetes.yaml --iterations 5 --output output.csv ) } generate_chart() { From 4e9cab72d13a3d2d3ca432bb2a78f1fc57eb1c65 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Tue, 15 Jun 2021 10:36:49 -0700 Subject: [PATCH 100/153] run `make generate-docs` --- translations/de.json | 2 +- translations/es.json | 2 +- translations/fr.json | 2 +- translations/ja.json | 2 +- translations/ko.json | 4 ++-- translations/pl.json | 4 ++-- translations/strings.txt | 2 +- translations/zh-CN.json | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/translations/de.json b/translations/de.json index bbd00044da79..be50ba730e78 100644 --- a/translations/de.json +++ b/translations/de.json @@ -625,7 +625,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Der Name des virtuellen Hyperv-Switch. Standardmäßig zuerst gefunden. (nur Hyperv-Treiber)", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Die von der minikube-VM verwendete Kubernetes-Version (Beispiel: v1.2.3)", diff --git a/translations/es.json b/translations/es.json index 67f349fb27eb..2595b1fe5ae9 100644 --- a/translations/es.json +++ b/translations/es.json @@ -630,7 +630,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "El nombre del conmutador virtual de hyperv. El valor predeterminado será el primer nombre que se encuentre (solo con el controlador de hyperv).", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "La versión de Kubernetes que utilizará la VM de minikube (p. ej.: versión 1.2.3)", diff --git a/translations/fr.json b/translations/fr.json index 79488027531c..096e9d24c98d 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -628,7 +628,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Nom du commutateur virtuel hyperv. La valeur par défaut affiche le premier commutateur trouvé (pilote hyperv uniquement).", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Version de Kubernetes qu'utilisera la VM minikube (exemple : v1.2.3).", diff --git a/translations/ja.json b/translations/ja.json index 359f941d7bff..d86712a73c9d 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -624,7 +624,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "hyperv 仮想スイッチ名。最初に見つかったものにデフォルト設定されます(hyperv ドライバのみ)", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "minikube VM で使用される Kubernetes バージョン(例: v1.2.3)", diff --git a/translations/ko.json b/translations/ko.json index 22a0818c5eb2..6d9761ed21e2 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -638,7 +638,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", @@ -961,4 +961,4 @@ "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} 프로파일이 올바르지 않습니다: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "{{.url}} 이 접근 불가능합니다: {{.error}}" -} +} \ No newline at end of file diff --git a/translations/pl.json b/translations/pl.json index 8991b99ee0ae..1d0462ae2165 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -642,7 +642,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Wersja kubernetesa, która zostanie użyta przez wirtualną maszynę minikube (np. v1.2.3)", @@ -961,4 +961,4 @@ "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} profil nie jest poprawny: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} nie jest wspierany przez system plików. I tak spróbujemy!", "{{.url}} is not accessible: {{.error}}": "{{.url}} nie jest osiągalny: {{.error}}" -} +} \ No newline at end of file diff --git a/translations/strings.txt b/translations/strings.txt index b3a8957bf6f4..4757ac5dced4 100644 --- a/translations/strings.txt +++ b/translations/strings.txt @@ -585,7 +585,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 62beb100008a..2fcb2b1d02e9 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -731,7 +731,7 @@ "The heapster addon is depreciated. please try to disable metrics-server instead": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "hyperv 虚拟交换机名称。默认为找到的第一个 hyperv 虚拟交换机。(仅限 hyperv 驱动程序)", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "管理程序似乎配置的不正确。执行 'minikube start --alsologtostderr -v=1' 并且检查错误代码", - "The image you are trying to add {{.imageName}} doesn't exist!": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "minikube 虚拟机将使用的 kubernetes 版本(例如 v1.2.3)", @@ -1071,4 +1071,4 @@ "{{.profile}} profile is not valid: {{.err}}": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "" -} +} \ No newline at end of file From 7537c9da2b0ebec5bea78a33e621276af12ddc91 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 15 Jun 2021 14:22:04 -0700 Subject: [PATCH 101/153] add local-kicbase make target --- Makefile | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ce1c5dd24709..445f7a56e9e4 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ KVM_GO_VERSION ?= $(GO_VERSION:.0=) INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1) BUILDROOT_BRANCH ?= 2020.02.12 -REGISTRY?=gcr.io/k8s-minikube +REGISTRY ?=gcr.io/k8s-minikube # Get git commit id COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) @@ -705,6 +705,21 @@ KICBASE_IMAGE_GCR ?= $(REGISTRY)/kicbase:$(KIC_VERSION) KICBASE_IMAGE_HUB ?= kicbase/stable:$(KIC_VERSION) KICBASE_IMAGE_REGISTRIES ?= $(KICBASE_IMAGE_GCR) $(KICBASE_IMAGE_HUB) +.PHONY: local-kicbase +local-kicbase: deploy/kicbase/auto-pause ## Builds the kicbase image and tags it local/kicbase:latest and local/kicbase:$(KIC_VERSION)-$(COMMIT_SHORT) + docker build -f ./deploy/kicbase/Dockerfile -t local/kicbase:$(KIC_VERSION) --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --cache-from $(KICBASE_IMAGE_GCR) ./deploy/kicbase + docker tag local/kicbase:$(KIC_VERSION) local/kicbase:latest + docker tag local/kicbase:$(KIC_VERSION) local/kicbase:$(KIC_VERSION)-$(COMMIT_SHORT) + +SED = sed -i +ifeq ($(GOOS),darwin) + SED = sed -i '' +endif + +.PHONY: local-kicbase-debug +local-kicbase-debug: local-kicbase ## Builds a local kicbase image and switches source code to point to it + $(SED) 's|Version = .*|Version = \"$(KIC_VERSION)-$(COMMIT_SHORT)\"|;s|baseImageSHA = .*|baseImageSHA = \"\"|;s|gcrRepo = .*|gcrRepo = \"local/kicbase\"|;s|dockerhubRepo = .*|dockerhubRepo = \"local/kicbase\"|' pkg/drivers/kic/types.go + .PHONY: push-kic-base-image push-kic-base-image: deploy/kicbase/auto-pause docker-multi-arch-builder ## Push multi-arch local/kicbase:latest to all remote registries ifdef AUTOPUSH From ed42a7bcf8eea7f49035d4a91b383517f775a046 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 15 Jun 2021 14:36:38 -0700 Subject: [PATCH 102/153] Upgrade gcp-auth-webhook to v0.0.6 --- pkg/minikube/assets/addons.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index 779b5b6791dc..37edd415ce19 100644 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -529,7 +529,7 @@ var Addons = map[string]*Addon{ "0640"), }, false, "gcp-auth", map[string]string{ "KubeWebhookCertgen": "jettech/kube-webhook-certgen:v1.3.0@sha256:ff01fba91131ed260df3f3793009efbf9686f5a5ce78a85f81c386a4403f7689", - "GCPAuthWebhook": "k8s-minikube/gcp-auth-webhook:v0.0.5@sha256:4da26a6937e876c80642c98fed9efb2269a5d2cb55029de9e2685c9fd6bc1add", + "GCPAuthWebhook": "k8s-minikube/gcp-auth-webhook:v0.0.6@sha256:c407ad6ee97d8a0e8a21c713e2d9af66aaf73315e4a123874c00b786f962f3cd", }, map[string]string{ "GCPAuthWebhook": "gcr.io", }), From b0b4cbb774beff7738b8957c731de3b9ff7bc8ce Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Tue, 15 Jun 2021 15:01:27 -0700 Subject: [PATCH 103/153] Do not return an error from Systemd.ForceStop(svc) if svc is already stoppedf --- pkg/minikube/sysinit/systemd.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/minikube/sysinit/systemd.go b/pkg/minikube/sysinit/systemd.go index 51985d557109..bad7a1d6d33c 100644 --- a/pkg/minikube/sysinit/systemd.go +++ b/pkg/minikube/sysinit/systemd.go @@ -19,7 +19,9 @@ package sysinit import ( "errors" + "fmt" "os/exec" + "strings" "k8s.io/minikube/pkg/minikube/assets" ) @@ -123,7 +125,14 @@ func (s *Systemd) Stop(svc string) error { // ForceStop terminates a service with prejudice func (s *Systemd) ForceStop(svc string) error { - _, err := s.r.RunCmd(exec.Command("sudo", "systemctl", "stop", "-f", svc)) + rr, err := s.r.RunCmd(exec.Command("sudo", "systemctl", "stop", "-f", svc)) + if err == nil { + return nil + } + if strings.Contains(rr.Output(), fmt.Sprintf("Unit %s.service not loaded", svc)) { + // already stopped + return nil + } return err } From 0f3255eab63381bffee3f10a7ab2efe17e254b9a Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 15 Jun 2021 15:16:04 -0700 Subject: [PATCH 104/153] space --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 445f7a56e9e4..db9a23088edb 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ KVM_GO_VERSION ?= $(GO_VERSION:.0=) INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1) BUILDROOT_BRANCH ?= 2020.02.12 -REGISTRY ?=gcr.io/k8s-minikube +REGISTRY ?= gcr.io/k8s-minikube # Get git commit id COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) From 7b5381b6977cb8b6656c7ca717e17dd26b4404e5 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Wed, 16 Jun 2021 09:23:54 -0700 Subject: [PATCH 105/153] add generate-docs script --- cmd/minikube/cmd/generate-docs_test.go | 27 --------------- hack/generate_docs.sh | 47 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 27 deletions(-) create mode 100644 hack/generate_docs.sh diff --git a/cmd/minikube/cmd/generate-docs_test.go b/cmd/minikube/cmd/generate-docs_test.go index 0d03d2a293f1..9489fdc88a9f 100644 --- a/cmd/minikube/cmd/generate-docs_test.go +++ b/cmd/minikube/cmd/generate-docs_test.go @@ -17,7 +17,6 @@ limitations under the License. package cmd import ( - "fmt" "io/ioutil" "os" "path/filepath" @@ -25,35 +24,9 @@ import ( "testing" "github.com/google/go-cmp/cmp" - "github.com/spf13/pflag" "k8s.io/minikube/pkg/generate" ) -func TestGenerateDocs(t *testing.T) { - pflag.BoolP("help", "h", false, "") // avoid 'Docs are not updated. Please run `make generate-docs` to update commands documentation' error - dir := "../../../site/content/en/docs/commands/" - - for _, sc := range RootCmd.Commands() { - t.Run(sc.Name(), func(t *testing.T) { - if sc.Hidden { - t.Skip() - } - fp := filepath.Join(dir, fmt.Sprintf("%s.md", sc.Name())) - expectedContents, err := ioutil.ReadFile(fp) - if err != nil { - t.Fatalf("Docs are not updated. Please run `make generate-docs` to update commands documentation: %v", err) - } - actualContents, err := generate.DocForCommand(sc) - if err != nil { - t.Fatalf("error getting contents: %v", err) - } - if diff := cmp.Diff(actualContents, string(expectedContents)); diff != "" { - t.Fatalf("Docs are not updated. Please run `make generate-docs` to update commands documentation: %s", diff) - } - }) - } -} - func TestGenerateTestDocs(t *testing.T) { tempdir, err := ioutil.TempDir("", "") if err != nil { diff --git a/hack/generate_docs.sh b/hack/generate_docs.sh new file mode 100644 index 000000000000..cae908cee73c --- /dev/null +++ b/hack/generate_docs.sh @@ -0,0 +1,47 @@ +#!/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 -e + +install_gh() { + export access_token="$1" + + # Make sure gh is installed and configured + ./hack/jenkins/installers/check_install_gh.sh +} + +config_git() { + git config user.name "minikube-bot" + git config user.email "minikube-bot@google.com" +} + +make generate-docs + +# If there are changes, open a PR +if ! git diff-index --quiet HEAD --; then + install_gh $1 + config_git + + branch=gendocs$(date +%s%N) + git checkout -b $branch + + git add . + git commit -m "Update generate-docs" + + git remote add minikube-bot https://minikube-bot:$1@github.com/minikube-bot/minikube.git + git push -u minikube-bot $branch + gh pr create --repo kubernetes/minukube --base master --title "Update generate-docs" --body "Committing changes resulting from \`make generate-docs\`" +fi From cf0d335309bbfe977e491e740937077dd7c13e00 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 15 Jun 2021 14:20:47 -0700 Subject: [PATCH 106/153] Remove assets.go from Makefile and replace with directly referencing addon files. --- Makefile | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index ce1c5dd24709..e86e5b7f6730 100644 --- a/Makefile +++ b/Makefile @@ -75,7 +75,7 @@ GOLINT_OPTIONS = --timeout 7m \ --build-tags "${MINIKUBE_INTEGRATION_BUILD_TAGS}" \ --enable gofmt,goimports,gocritic,golint,gocyclo,misspell,nakedret,stylecheck,unconvert,unparam,dogsled \ --exclude 'variable on range scope.*in function literal|ifElseChain' \ - --skip-files "pkg/minikube/translate/translations.go|pkg/minikube/assets/assets.go" + --skip-files "pkg/minikube/translate/translations.go" export GO111MODULE := on @@ -134,9 +134,10 @@ CMD_SOURCE_DIRS = cmd pkg SOURCE_DIRS = $(CMD_SOURCE_DIRS) test SOURCE_PACKAGES = ./cmd/... ./pkg/... ./test/... -SOURCE_GENERATED = pkg/minikube/assets/assets.go pkg/minikube/translate/translations.go +SOURCE_GENERATED = pkg/minikube/translate/translations.go SOURCE_FILES = $(shell find $(CMD_SOURCE_DIRS) -type f -name "*.go" | grep -v _test.go) GOTEST_FILES = $(shell find $(CMD_SOURCE_DIRS) -type f -name "*.go" | grep _test.go) +ADDON_FILES = $(shell find "deploy/addons" -type f) # kvm2 ldflags KVM2_LDFLAGS := -X k8s.io/minikube/pkg/drivers/kvm.version=$(VERSION) -X k8s.io/minikube/pkg/drivers/kvm.gitCommitID=$(COMMIT) @@ -195,7 +196,7 @@ ifneq ($(TEST_FILES),) INTEGRATION_TESTS_TO_RUN := $(addprefix ./test/integration/, $(TEST_HELPERS) $(TEST_FILES)) endif -out/minikube$(IS_EXE): $(SOURCE_GENERATED) $(SOURCE_FILES) go.mod +out/minikube$(IS_EXE): $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) go.mod ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) $(call DOCKER,$(BUILD_IMAGE),GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) /usr/bin/make $@) else @@ -244,7 +245,7 @@ minikube-windows-amd64.exe: out/minikube-windows-amd64.exe ## Build Minikube for eq = $(and $(findstring x$(1),x$(2)),$(findstring x$(2),x$(1))) -out/minikube-%: $(SOURCE_GENERATED) $(SOURCE_FILES) +out/minikube-%: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) $(call DOCKER,$(BUILD_IMAGE),/usr/bin/make $@) else @@ -253,7 +254,7 @@ else go build -tags "$(MINIKUBE_BUILD_TAGS)" -ldflags="$(MINIKUBE_LDFLAGS)" -a -o $@ k8s.io/minikube/cmd/minikube endif -out/minikube-linux-armv6: $(SOURCE_GENERATED) $(SOURCE_FILES) +out/minikube-linux-armv6: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) $(Q)GOOS=linux GOARCH=arm GOARM=6 \ go build -tags "$(MINIKUBE_BUILD_TAGS)" -ldflags="$(MINIKUBE_LDFLAGS)" -a -o $@ k8s.io/minikube/cmd/minikube @@ -397,22 +398,6 @@ out/coverage.html: out/coverage.out extract: ## extract internationalization words for translations go run cmd/extract/extract.go -# Regenerates assets.go when template files have been updated -pkg/minikube/assets/assets.go: $(shell find "deploy/addons" -type f) -ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) - $(call DOCKER,$(BUILD_IMAGE),/usr/bin/make $@) -endif - @which go-bindata >/dev/null 2>&1 || GO111MODULE=off GOBIN="$(GOPATH)$(DIRSEP)bin" go get github.com/go-bindata/go-bindata/... - $(if $(quiet),@echo " GEN $@") - $(Q)PATH="$(PATH)$(PATHSEP)$(GOPATH)$(DIRSEP)bin" go-bindata -nomemcopy -o $@ -pkg assets deploy/addons/... - $(Q)-gofmt -s -w $@ - @#golint: Dns should be DNS (compat sed) - @sed -i -e 's/Dns/DNS/g' $@ && rm -f ./-e - @#golint: Html should be HTML (compat sed) - @sed -i -e 's/Html/HTML/g' $@ && rm -f ./-e - @#golint: don't use underscores in Go names - @sed -i -e 's/SnapshotStorageK8sIo_volumesnapshot/SnapshotStorageK8sIoVolumesnapshot/g' $@ && rm -f ./-e - pkg/minikube/translate/translations.go: $(shell find "translations/" -type f) ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) $(call DOCKER,$(BUILD_IMAGE),/usr/bin/make $@) @@ -882,11 +867,11 @@ out/mkcmp: GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ cmd/performance/mkcmp/main.go .PHONY: deploy/kicbase/auto-pause # auto pause binary to be used for kic image work around for not passing the whole repo as docker context -deploy/kicbase/auto-pause: $(SOURCE_GENERATED) $(SOURCE_FILES) +deploy/kicbase/auto-pause: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) GOOS=linux GOARCH=$(GOARCH) go build -o $@ cmd/auto-pause/auto-pause.go # auto pause binary to be used for ISO -deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause: $(SOURCE_GENERATED) $(SOURCE_FILES) +deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) GOOS=linux GOARCH=$(GOARCH) go build -o $@ cmd/auto-pause/auto-pause.go From 02b996e0116eb1899880894accb62d626e1ad3b1 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Tue, 15 Jun 2021 15:45:11 -0700 Subject: [PATCH 107/153] Redefine addon asset in terms of embed.FS. --- Makefile | 6 +- deploy/addons/assets.go | 135 +++++++++++++ pkg/minikube/assets/addons.go | 328 ++++++++++++++++--------------- pkg/minikube/assets/vm_assets.go | 11 +- 4 files changed, 312 insertions(+), 168 deletions(-) create mode 100644 deploy/addons/assets.go diff --git a/Makefile b/Makefile index e86e5b7f6730..001301f84691 100644 --- a/Makefile +++ b/Makefile @@ -130,14 +130,14 @@ MINIKUBE_MARKDOWN_FILES := README.md CONTRIBUTING.md CHANGELOG.md MINIKUBE_BUILD_TAGS := MINIKUBE_INTEGRATION_BUILD_TAGS := integration $(MINIKUBE_BUILD_TAGS) -CMD_SOURCE_DIRS = cmd pkg +CMD_SOURCE_DIRS = cmd pkg deploy/addons SOURCE_DIRS = $(CMD_SOURCE_DIRS) test -SOURCE_PACKAGES = ./cmd/... ./pkg/... ./test/... +SOURCE_PACKAGES = ./cmd/... ./pkg/... ./deploy/addons/... ./test/... SOURCE_GENERATED = pkg/minikube/translate/translations.go SOURCE_FILES = $(shell find $(CMD_SOURCE_DIRS) -type f -name "*.go" | grep -v _test.go) GOTEST_FILES = $(shell find $(CMD_SOURCE_DIRS) -type f -name "*.go" | grep _test.go) -ADDON_FILES = $(shell find "deploy/addons" -type f) +ADDON_FILES = $(shell find "deploy/addons" -type f | grep -v "\.go") # kvm2 ldflags KVM2_LDFLAGS := -X k8s.io/minikube/pkg/drivers/kvm.version=$(VERSION) -X k8s.io/minikube/pkg/drivers/kvm.gitCommitID=$(COMMIT) diff --git a/deploy/addons/assets.go b/deploy/addons/assets.go new file mode 100644 index 000000000000..dfbdbfa379b5 --- /dev/null +++ b/deploy/addons/assets.go @@ -0,0 +1,135 @@ +/* +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 addons + +import "embed" + +var ( + // AutoPauseAssets assets for auto-pause addon + //go:embed auto-pause/*.tmpl + //go:embed auto-pause/auto-pause.service + //go:embed auto-pause/unpause.lua + AutoPauseAssets embed.FS + + // DashboardAssets assets for dashboard addon + //go:embed dashboard/*.yaml dashboard/*.tmpl + DashboardAssets embed.FS + + // DefaultStorageClassAssets assets for default-storageclass addon + //go:embed storageclass/storageclass.yaml.tmpl + DefaultStorageClassAssets embed.FS + + // PodSecurityPolicyAssets assets for pod-security-policy addon + //go:embed pod-security-policy/pod-security-policy.yaml.tmpl + PodSecurityPolicyAssets embed.FS + + // StorageProvisionerAssets assets for storage-provisioner addon + //go:embed storage-provisioner/storage-provisioner.yaml.tmpl + StorageProvisionerAssets embed.FS + + // StorageProvisionerGlusterAssets assets for storage-provisioner-gluster addon + //go:embed storage-provisioner-gluster/*.tmpl + StorageProvisionerGlusterAssets embed.FS + + // EfkAssets assets for efk addon + //go:embed efk/*.tmpl + EfkAssets embed.FS + + // IngressAssets assets for ingress addon + //go:embed ingress/*.tmpl + IngressAssets embed.FS + + // IstioProvisionerAssets assets for istio-provisioner addon + //go:embed istio-provisioner/istio-operator.yaml.tmpl + IstioProvisionerAssets embed.FS + + // IstioAssets assets for istio addon + //go:embed istio/istio-default-profile.yaml.tmpl + IstioAssets embed.FS + + // KubevirtAssets assets for kubevirt addon + //go:embed kubevirt/pod.yaml.tmpl + KubevirtAssets embed.FS + + // MetricsServerAssets assets for metrics-server addon + //go:embed metrics-server/*.tmpl + MetricsServerAssets embed.FS + + // OlmAssets assets for olm addon + //go:embed olm/*.tmpl + OlmAssets embed.FS + + // RegistryAssets assets for registry addon + //go:embed registry/*.tmpl + RegistryAssets embed.FS + + // RegistryCredsAssets assets for registry-creds addon + //go:embed registry-creds/registry-creds-rc.yaml.tmpl + RegistryCredsAssets embed.FS + + // RegistryAliasesAssets assets for registry-aliases addon + //go:embed registry-aliases/*.tmpl + RegistryAliasesAssets embed.FS + + // FreshpodAssets assets for freshpod addon + //go:embed freshpod/freshpod-rc.yaml.tmpl + FreshpodAssets embed.FS + + // NvidiaDriverInstallerAssets assets for nvidia-driver-installer addon + //go:embed gpu/nvidia-driver-installer.yaml.tmpl + NvidiaDriverInstallerAssets embed.FS + + // NvidiaGpuDevicePluginAssets assets for nvidia-gpu-device-plugin addon + //go:embed gpu/nvidia-gpu-device-plugin.yaml.tmpl + NvidiaGpuDevicePluginAssets embed.FS + + // LogviewerAssets assets for logviewer addon + //go:embed logviewer/*.tmpl + LogviewerAssets embed.FS + + // GvisorAssets assets for gvisor addon + //go:embed gvisor/*.tmpl gvisor/*.toml + GvisorAssets embed.FS + + // HelmTillerAssets assets for helm-tiller addon + //go:embed helm-tiller/*.tmpl + HelmTillerAssets embed.FS + + // IngressDNSAssets assets for ingress-dns addon + //go:embed ingress-dns/ingress-dns-pod.yaml.tmpl + IngressDNSAssets embed.FS + + // MetallbAssets assets for metallb addon + //go:embed metallb/*.tmpl + MetallbAssets embed.FS + + // AmbassadorAssets assets for ambassador addon + //go:embed ambassador/*.tmpl + AmbassadorAssets embed.FS + + // GcpAuthAssets assets for gcp-auth addon + //go:embed gcp-auth/*.tmpl + GcpAuthAssets embed.FS + + // VolumeSnapshotsAssets assets for volumesnapshots addon + //go:embed volumesnapshots/*.tmpl + VolumeSnapshotsAssets embed.FS + + // CsiHostpathDriverAssets assets for csi-hostpath-driver addon + //go:embed csi-hostpath-driver/deploy/*.tmpl csi-hostpath-driver/rbac/*.tmpl + CsiHostpathDriverAssets embed.FS +) diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index 779b5b6791dc..f4c4dd5d205e 100644 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -22,6 +22,7 @@ import ( "strings" "github.com/spf13/viper" + "k8s.io/minikube/deploy/addons" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/out" @@ -79,27 +80,32 @@ func (a *Addon) IsEnabled(cc *config.ClusterConfig) bool { var Addons = map[string]*Addon{ "auto-pause": NewAddon([]*BinAsset{ MustBinAsset( - "deploy/addons/auto-pause/auto-pause.yaml.tmpl", + addons.AutoPauseAssets, + "auto-pause/auto-pause.yaml.tmpl", vmpath.GuestAddonsDir, "auto-pause.yaml", "0640"), MustBinAsset( - "deploy/addons/auto-pause/auto-pause-hook.yaml.tmpl", + addons.AutoPauseAssets, + "auto-pause/auto-pause-hook.yaml.tmpl", vmpath.GuestAddonsDir, "auto-pause-hook.yaml", "0640"), MustBinAsset( - "deploy/addons/auto-pause/haproxy.cfg.tmpl", + addons.AutoPauseAssets, + "auto-pause/haproxy.cfg.tmpl", vmpath.GuestPersistentDir, "haproxy.cfg", "0640"), MustBinAsset( - "deploy/addons/auto-pause/unpause.lua", + addons.AutoPauseAssets, + "auto-pause/unpause.lua", vmpath.GuestPersistentDir, "unpause.lua", "0640"), MustBinAsset( - "deploy/addons/auto-pause/auto-pause.service", + addons.AutoPauseAssets, + "auto-pause/auto-pause.service", "/etc/systemd/system/", "auto-pause.service", "0640"), @@ -112,37 +118,37 @@ var Addons = map[string]*Addon{ }), "dashboard": NewAddon([]*BinAsset{ // We want to create the kubernetes-dashboard ns first so that every subsequent object can be created - MustBinAsset("deploy/addons/dashboard/dashboard-ns.yaml", vmpath.GuestAddonsDir, "dashboard-ns.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-clusterrole.yaml", vmpath.GuestAddonsDir, "dashboard-clusterrole.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-clusterrolebinding.yaml", vmpath.GuestAddonsDir, "dashboard-clusterrolebinding.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-configmap.yaml", vmpath.GuestAddonsDir, "dashboard-configmap.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-dp.yaml.tmpl", vmpath.GuestAddonsDir, "dashboard-dp.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-role.yaml", vmpath.GuestAddonsDir, "dashboard-role.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-rolebinding.yaml", vmpath.GuestAddonsDir, "dashboard-rolebinding.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-sa.yaml", vmpath.GuestAddonsDir, "dashboard-sa.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-secret.yaml", vmpath.GuestAddonsDir, "dashboard-secret.yaml", "0640"), - MustBinAsset("deploy/addons/dashboard/dashboard-svc.yaml", vmpath.GuestAddonsDir, "dashboard-svc.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-ns.yaml", vmpath.GuestAddonsDir, "dashboard-ns.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-clusterrole.yaml", vmpath.GuestAddonsDir, "dashboard-clusterrole.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-clusterrolebinding.yaml", vmpath.GuestAddonsDir, "dashboard-clusterrolebinding.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-configmap.yaml", vmpath.GuestAddonsDir, "dashboard-configmap.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-dp.yaml.tmpl", vmpath.GuestAddonsDir, "dashboard-dp.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-role.yaml", vmpath.GuestAddonsDir, "dashboard-role.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-rolebinding.yaml", vmpath.GuestAddonsDir, "dashboard-rolebinding.yaml", "0640"), + MustBinAsset(addons.DashboardAssets, "dashboard/dashboard-sa.yaml", vmpath.GuestAddonsDir, "dashboard-sa.yaml", "0640"), + 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", map[string]string{ "Dashboard": "kubernetesui/dashboard:v2.1.0@sha256:7f80b5ba141bead69c4fee8661464857af300d7d7ed0274cf7beecedc00322e6", "MetricsScraper": "kubernetesui/metrics-scraper:v1.0.4@sha256:555981a24f184420f3be0c79d4efb6c948a85cfce84034f85a563f4151a81cbf", }, nil), "default-storageclass": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/storageclass/storageclass.yaml.tmpl", + MustBinAsset(addons.DefaultStorageClassAssets, + "storageclass/storageclass.yaml.tmpl", vmpath.GuestAddonsDir, "storageclass.yaml", "0640"), }, true, "default-storageclass", nil, nil), "pod-security-policy": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/pod-security-policy/pod-security-policy.yaml.tmpl", + MustBinAsset(addons.PodSecurityPolicyAssets, + "pod-security-policy/pod-security-policy.yaml.tmpl", vmpath.GuestAddonsDir, "pod-security-policy.yaml", "0640"), }, false, "pod-security-policy", nil, nil), "storage-provisioner": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/storage-provisioner/storage-provisioner.yaml.tmpl", + MustBinAsset(addons.StorageProvisionerAssets, + "storage-provisioner/storage-provisioner.yaml.tmpl", vmpath.GuestAddonsDir, "storage-provisioner.yaml", "0640"), @@ -152,23 +158,23 @@ var Addons = map[string]*Addon{ "StorageProvisioner": "gcr.io", }), "storage-provisioner-gluster": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/storage-provisioner-gluster/storage-gluster-ns.yaml.tmpl", + MustBinAsset(addons.StorageProvisionerGlusterAssets, + "storage-provisioner-gluster/storage-gluster-ns.yaml.tmpl", vmpath.GuestAddonsDir, "storage-gluster-ns.yaml", "0640"), - MustBinAsset( - "deploy/addons/storage-provisioner-gluster/glusterfs-daemonset.yaml.tmpl", + MustBinAsset(addons.StorageProvisionerGlusterAssets, + "storage-provisioner-gluster/glusterfs-daemonset.yaml.tmpl", vmpath.GuestAddonsDir, "glusterfs-daemonset.yaml", "0640"), - MustBinAsset( - "deploy/addons/storage-provisioner-gluster/heketi-deployment.yaml.tmpl", + MustBinAsset(addons.StorageProvisionerGlusterAssets, + "storage-provisioner-gluster/heketi-deployment.yaml.tmpl", vmpath.GuestAddonsDir, "heketi-deployment.yaml", "0640"), - MustBinAsset( - "deploy/addons/storage-provisioner-gluster/storage-provisioner-glusterfile.yaml.tmpl", + MustBinAsset(addons.StorageProvisionerGlusterAssets, + "storage-provisioner-gluster/storage-provisioner-glusterfile.yaml.tmpl", vmpath.GuestAddonsDir, "storage-privisioner-glusterfile.yaml", "0640"), @@ -180,33 +186,33 @@ var Addons = map[string]*Addon{ "GlusterfsServer": "quay.io", }), "efk": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/efk/elasticsearch-rc.yaml.tmpl", + MustBinAsset(addons.EfkAssets, + "efk/elasticsearch-rc.yaml.tmpl", vmpath.GuestAddonsDir, "elasticsearch-rc.yaml", "0640"), - MustBinAsset( - "deploy/addons/efk/elasticsearch-svc.yaml.tmpl", + MustBinAsset(addons.EfkAssets, + "efk/elasticsearch-svc.yaml.tmpl", vmpath.GuestAddonsDir, "elasticsearch-svc.yaml", "0640"), - MustBinAsset( - "deploy/addons/efk/fluentd-es-rc.yaml.tmpl", + MustBinAsset(addons.EfkAssets, + "efk/fluentd-es-rc.yaml.tmpl", vmpath.GuestAddonsDir, "fluentd-es-rc.yaml", "0640"), - MustBinAsset( - "deploy/addons/efk/fluentd-es-configmap.yaml.tmpl", + MustBinAsset(addons.EfkAssets, + "efk/fluentd-es-configmap.yaml.tmpl", vmpath.GuestAddonsDir, "fluentd-es-configmap.yaml", "0640"), - MustBinAsset( - "deploy/addons/efk/kibana-rc.yaml.tmpl", + MustBinAsset(addons.EfkAssets, + "efk/kibana-rc.yaml.tmpl", vmpath.GuestAddonsDir, "kibana-rc.yaml", "0640"), - MustBinAsset( - "deploy/addons/efk/kibana-svc.yaml.tmpl", + MustBinAsset(addons.EfkAssets, + "efk/kibana-svc.yaml.tmpl", vmpath.GuestAddonsDir, "kibana-svc.yaml", "0640"), @@ -221,18 +227,18 @@ var Addons = map[string]*Addon{ "Kibana": "docker.elastic.co", }), "ingress": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/ingress/ingress-configmap.yaml.tmpl", + MustBinAsset(addons.IngressAssets, + "ingress/ingress-configmap.yaml.tmpl", vmpath.GuestAddonsDir, "ingress-configmap.yaml", "0640"), - MustBinAsset( - "deploy/addons/ingress/ingress-rbac.yaml.tmpl", + MustBinAsset(addons.IngressAssets, + "ingress/ingress-rbac.yaml.tmpl", vmpath.GuestAddonsDir, "ingress-rbac.yaml", "0640"), - MustBinAsset( - "deploy/addons/ingress/ingress-dp.yaml.tmpl", + MustBinAsset(addons.IngressAssets, + "ingress/ingress-dp.yaml.tmpl", vmpath.GuestAddonsDir, "ingress-dp.yaml", "0640"), @@ -244,8 +250,8 @@ var Addons = map[string]*Addon{ "IngressController": "k8s.gcr.io", }), "istio-provisioner": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/istio-provisioner/istio-operator.yaml.tmpl", + MustBinAsset(addons.IstioProvisionerAssets, + "istio-provisioner/istio-operator.yaml.tmpl", vmpath.GuestAddonsDir, "istio-operator.yaml", "0640"), @@ -253,15 +259,15 @@ var Addons = map[string]*Addon{ "IstioOperator": "istio/operator:1.5.0@sha256:25a6398ed4996a5313767ceb63768d503c266f63506ad3074b30eef6b5b5167e", }, nil), "istio": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/istio/istio-default-profile.yaml.tmpl", + MustBinAsset(addons.IstioAssets, + "istio/istio-default-profile.yaml.tmpl", vmpath.GuestAddonsDir, "istio-default-profile.yaml", "0640"), }, false, "istio", nil, nil), "kubevirt": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/kubevirt/pod.yaml.tmpl", + MustBinAsset(addons.KubevirtAssets, + "kubevirt/pod.yaml.tmpl", vmpath.GuestAddonsDir, "pod.yaml", "0640"), @@ -269,23 +275,23 @@ var Addons = map[string]*Addon{ "Kubectl": "bitnami/kubectl:1.17@sha256:de642e973d3d0ef60e4d0a1f92286a9fdae245535c5990d4762bbe86fcf95887", }, nil), "metrics-server": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl", + MustBinAsset(addons.MetricsServerAssets, + "metrics-server/metrics-apiservice.yaml.tmpl", vmpath.GuestAddonsDir, "metrics-apiservice.yaml", "0640"), - MustBinAsset( - "deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl", + MustBinAsset(addons.MetricsServerAssets, + "metrics-server/metrics-server-deployment.yaml.tmpl", vmpath.GuestAddonsDir, "metrics-server-deployment.yaml", "0640"), - MustBinAsset( - "deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl", + MustBinAsset(addons.MetricsServerAssets, + "metrics-server/metrics-server-rbac.yaml.tmpl", vmpath.GuestAddonsDir, "metrics-server-rbac.yaml", "0640"), - MustBinAsset( - "deploy/addons/metrics-server/metrics-server-service.yaml.tmpl", + MustBinAsset(addons.MetricsServerAssets, + "metrics-server/metrics-server-service.yaml.tmpl", vmpath.GuestAddonsDir, "metrics-server-service.yaml", "0640"), @@ -295,13 +301,13 @@ var Addons = map[string]*Addon{ "MetricsServer": "k8s.gcr.io", }), "olm": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/olm/crds.yaml.tmpl", + MustBinAsset(addons.OlmAssets, + "olm/crds.yaml.tmpl", vmpath.GuestAddonsDir, "crds.yaml", "0640"), - MustBinAsset( - "deploy/addons/olm/olm.yaml.tmpl", + MustBinAsset(addons.OlmAssets, + "olm/olm.yaml.tmpl", vmpath.GuestAddonsDir, "olm.yaml", "0640"), @@ -313,18 +319,18 @@ var Addons = map[string]*Addon{ "UpstreamCommunityOperators": "quay.io", }), "registry": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/registry/registry-rc.yaml.tmpl", + MustBinAsset(addons.RegistryAssets, + "registry/registry-rc.yaml.tmpl", vmpath.GuestAddonsDir, "registry-rc.yaml", "0640"), - MustBinAsset( - "deploy/addons/registry/registry-svc.yaml.tmpl", + MustBinAsset(addons.RegistryAssets, + "registry/registry-svc.yaml.tmpl", vmpath.GuestAddonsDir, "registry-svc.yaml", "0640"), - MustBinAsset( - "deploy/addons/registry/registry-proxy.yaml.tmpl", + MustBinAsset(addons.RegistryAssets, + "registry/registry-proxy.yaml.tmpl", vmpath.GuestAddonsDir, "registry-proxy.yaml", "0640"), @@ -335,8 +341,8 @@ var Addons = map[string]*Addon{ "KubeRegistryProxy": "gcr.io", }), "registry-creds": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/registry-creds/registry-creds-rc.yaml.tmpl", + MustBinAsset(addons.RegistryCredsAssets, + "registry-creds/registry-creds-rc.yaml.tmpl", vmpath.GuestAddonsDir, "registry-creds-rc.yaml", "0640"), @@ -344,28 +350,28 @@ var Addons = map[string]*Addon{ "RegistryCreds": "upmcenterprises/registry-creds:1.10@sha256:93a633d4f2b76a1c66bf19c664dbddc56093a543de6d54320f19f585ccd7d605", }, nil), "registry-aliases": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/registry-aliases/registry-aliases-sa.tmpl", + MustBinAsset(addons.RegistryAliasesAssets, + "registry-aliases/registry-aliases-sa.tmpl", vmpath.GuestAddonsDir, "registry-aliases-sa.yaml", "0640"), - MustBinAsset( - "deploy/addons/registry-aliases/registry-aliases-sa-crb.tmpl", + MustBinAsset(addons.RegistryAliasesAssets, + "registry-aliases/registry-aliases-sa-crb.tmpl", vmpath.GuestAddonsDir, "registry-aliases-sa-crb.yaml", "0640"), - MustBinAsset( - "deploy/addons/registry-aliases/registry-aliases-config.tmpl", + MustBinAsset(addons.RegistryAliasesAssets, + "registry-aliases/registry-aliases-config.tmpl", vmpath.GuestAddonsDir, "registry-aliases-config.yaml", "0640"), - MustBinAsset( - "deploy/addons/registry-aliases/node-etc-hosts-update.tmpl", + MustBinAsset(addons.RegistryAliasesAssets, + "registry-aliases/node-etc-hosts-update.tmpl", vmpath.GuestAddonsDir, "node-etc-hosts-update.yaml", "0640"), - MustBinAsset( - "deploy/addons/registry-aliases/patch-coredns-job.tmpl", + MustBinAsset(addons.RegistryAliasesAssets, + "registry-aliases/patch-coredns-job.tmpl", vmpath.GuestAddonsDir, "patch-coredns-job.yaml", "0640"), @@ -378,8 +384,8 @@ var Addons = map[string]*Addon{ "Pause": "gcr.io", }), "freshpod": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/freshpod/freshpod-rc.yaml.tmpl", + MustBinAsset(addons.FreshpodAssets, + "freshpod/freshpod-rc.yaml.tmpl", vmpath.GuestAddonsDir, "freshpod-rc.yaml", "0640"), @@ -389,8 +395,8 @@ var Addons = map[string]*Addon{ "FreshPod": "gcr.io", }), "nvidia-driver-installer": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/gpu/nvidia-driver-installer.yaml.tmpl", + MustBinAsset(addons.NvidiaDriverInstallerAssets, + "gpu/nvidia-driver-installer.yaml.tmpl", vmpath.GuestAddonsDir, "nvidia-driver-installer.yaml", "0640"), @@ -402,8 +408,8 @@ var Addons = map[string]*Addon{ "Pause": "k8s.gcr.io", }), "nvidia-gpu-device-plugin": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/gpu/nvidia-gpu-device-plugin.yaml.tmpl", + MustBinAsset(addons.NvidiaGpuDevicePluginAssets, + "gpu/nvidia-gpu-device-plugin.yaml.tmpl", vmpath.GuestAddonsDir, "nvidia-gpu-device-plugin.yaml", "0640"), @@ -411,13 +417,13 @@ var Addons = map[string]*Addon{ "NvidiaDevicePlugin": "nvidia/k8s-device-plugin:1.0.0-beta4@sha256:94d46bf513cbc43c4d77a364e4bbd409d32d89c8e686e12551cc3eb27c259b90", }, nil), "logviewer": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/logviewer/logviewer-dp-and-svc.yaml.tmpl", + MustBinAsset(addons.LogviewerAssets, + "logviewer/logviewer-dp-and-svc.yaml.tmpl", vmpath.GuestAddonsDir, "logviewer-dp-and-svc.yaml", "0640"), - MustBinAsset( - "deploy/addons/logviewer/logviewer-rbac.yaml.tmpl", + MustBinAsset(addons.LogviewerAssets, + "logviewer/logviewer-rbac.yaml.tmpl", vmpath.GuestAddonsDir, "logviewer-rbac.yaml", "0640"), @@ -425,18 +431,18 @@ var Addons = map[string]*Addon{ "LogViewer": "ivans3/minikube-log-viewer:latest@sha256:75854f45305cc47d17b04c6c588fa60777391761f951e3a34161ddf1f1b06405", }, nil), "gvisor": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/gvisor/gvisor-pod.yaml.tmpl", + MustBinAsset(addons.GvisorAssets, + "gvisor/gvisor-pod.yaml.tmpl", vmpath.GuestAddonsDir, "gvisor-pod.yaml", "0640"), - MustBinAsset( - "deploy/addons/gvisor/gvisor-runtimeclass.yaml.tmpl", + MustBinAsset(addons.GvisorAssets, + "gvisor/gvisor-runtimeclass.yaml.tmpl", vmpath.GuestAddonsDir, "gvisor-runtimeclass.yaml", "0640"), - MustBinAsset( - "deploy/addons/gvisor/gvisor-config.toml", + MustBinAsset(addons.GvisorAssets, + "gvisor/gvisor-config.toml", vmpath.GuestGvisorDir, constants.GvisorConfigTomlTargetName, "0640"), @@ -446,18 +452,18 @@ var Addons = map[string]*Addon{ "GvisorAddon": "gcr.io", }), "helm-tiller": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/helm-tiller/helm-tiller-dp.tmpl", + MustBinAsset(addons.HelmTillerAssets, + "helm-tiller/helm-tiller-dp.tmpl", vmpath.GuestAddonsDir, "helm-tiller-dp.yaml", "0640"), - MustBinAsset( - "deploy/addons/helm-tiller/helm-tiller-rbac.tmpl", + MustBinAsset(addons.HelmTillerAssets, + "helm-tiller/helm-tiller-rbac.tmpl", vmpath.GuestAddonsDir, "helm-tiller-rbac.yaml", "0640"), - MustBinAsset( - "deploy/addons/helm-tiller/helm-tiller-svc.tmpl", + MustBinAsset(addons.HelmTillerAssets, + "helm-tiller/helm-tiller-svc.tmpl", vmpath.GuestAddonsDir, "helm-tiller-svc.yaml", "0640"), @@ -467,8 +473,8 @@ var Addons = map[string]*Addon{ "Tiller": "gcr.io", }), "ingress-dns": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/ingress-dns/ingress-dns-pod.yaml.tmpl", + MustBinAsset(addons.IngressDNSAssets, + "ingress-dns/ingress-dns-pod.yaml.tmpl", vmpath.GuestAddonsDir, "ingress-dns-pod.yaml", "0640"), @@ -476,13 +482,13 @@ var Addons = map[string]*Addon{ "IngressDNS": "cryptexlabs/minikube-ingress-dns:0.3.0@sha256:e252d2a4c704027342b303cc563e95d2e71d2a0f1404f55d676390e28d5093ab", }, nil), "metallb": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/metallb/metallb.yaml.tmpl", + MustBinAsset(addons.MetallbAssets, + "metallb/metallb.yaml.tmpl", vmpath.GuestAddonsDir, "metallb.yaml", "0640"), - MustBinAsset( - "deploy/addons/metallb/metallb-config.yaml.tmpl", + MustBinAsset(addons.MetallbAssets, + "metallb/metallb-config.yaml.tmpl", vmpath.GuestAddonsDir, "metallb-config.yaml", "0640"), @@ -491,18 +497,18 @@ var Addons = map[string]*Addon{ "Controller": "metallb/controller:v0.9.6@sha256:fbfdb9d3f55976b0ee38f3309d83a4ca703efcf15d6ca7889cd8189142286502", }, nil), "ambassador": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/ambassador/ambassador-operator-crds.yaml.tmpl", + MustBinAsset(addons.AmbassadorAssets, + "ambassador/ambassador-operator-crds.yaml.tmpl", vmpath.GuestAddonsDir, "ambassador-operator-crds.yaml", "0640"), - MustBinAsset( - "deploy/addons/ambassador/ambassador-operator.yaml.tmpl", + MustBinAsset(addons.AmbassadorAssets, + "ambassador/ambassador-operator.yaml.tmpl", vmpath.GuestAddonsDir, "ambassador-operator.yaml", "0640"), - MustBinAsset( - "deploy/addons/ambassador/ambassadorinstallation.yaml.tmpl", + MustBinAsset(addons.AmbassadorAssets, + "ambassador/ambassadorinstallation.yaml.tmpl", vmpath.GuestAddonsDir, "ambassadorinstallation.yaml", "0640"), @@ -512,18 +518,18 @@ var Addons = map[string]*Addon{ "AmbassadorOperator": "quay.io", }), "gcp-auth": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/gcp-auth/gcp-auth-ns.yaml.tmpl", + MustBinAsset(addons.GcpAuthAssets, + "gcp-auth/gcp-auth-ns.yaml.tmpl", vmpath.GuestAddonsDir, "gcp-auth-ns.yaml", "0640"), - MustBinAsset( - "deploy/addons/gcp-auth/gcp-auth-service.yaml.tmpl", + MustBinAsset(addons.GcpAuthAssets, + "gcp-auth/gcp-auth-service.yaml.tmpl", vmpath.GuestAddonsDir, "gcp-auth-service.yaml", "0640"), - MustBinAsset( - "deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl.tmpl", + MustBinAsset(addons.GcpAuthAssets, + "gcp-auth/gcp-auth-webhook.yaml.tmpl.tmpl", vmpath.GuestAddonsDir, "gcp-auth-webhook.yaml", "0640"), @@ -536,33 +542,33 @@ var Addons = map[string]*Addon{ "volumesnapshots": NewAddon([]*BinAsset{ // make sure the order of apply. `csi-hostpath-snapshotclass` must be the first position, because it depends on `snapshot.storage.k8s.io_volumesnapshotclasses` // if user disable volumesnapshots addon and delete `csi-hostpath-snapshotclass` after `snapshot.storage.k8s.io_volumesnapshotclasses`, kubernetes will return the error - MustBinAsset( - "deploy/addons/volumesnapshots/csi-hostpath-snapshotclass.yaml.tmpl", + MustBinAsset(addons.VolumeSnapshotsAssets, + "volumesnapshots/csi-hostpath-snapshotclass.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-snapshotclass.yaml", "0640"), - MustBinAsset( - "deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotclasses.yaml.tmpl", + MustBinAsset(addons.VolumeSnapshotsAssets, + "volumesnapshots/snapshot.storage.k8s.io_volumesnapshotclasses.yaml.tmpl", vmpath.GuestAddonsDir, "snapshot.storage.k8s.io_volumesnapshotclasses.yaml", "0640"), - MustBinAsset( - "deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotcontents.yaml.tmpl", + MustBinAsset(addons.VolumeSnapshotsAssets, + "volumesnapshots/snapshot.storage.k8s.io_volumesnapshotcontents.yaml.tmpl", vmpath.GuestAddonsDir, "snapshot.storage.k8s.io_volumesnapshotcontents.yaml", "0640"), - MustBinAsset( - "deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml.tmpl", + MustBinAsset(addons.VolumeSnapshotsAssets, + "volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml.tmpl", vmpath.GuestAddonsDir, "snapshot.storage.k8s.io_volumesnapshots.yaml", "0640"), - MustBinAsset( - "deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml.tmpl", + MustBinAsset(addons.VolumeSnapshotsAssets, + "volumesnapshots/rbac-volume-snapshot-controller.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-volume-snapshot-controller.yaml", "0640"), - MustBinAsset( - "deploy/addons/volumesnapshots/volume-snapshot-controller-deployment.yaml.tmpl", + MustBinAsset(addons.VolumeSnapshotsAssets, + "volumesnapshots/volume-snapshot-controller-deployment.yaml.tmpl", vmpath.GuestAddonsDir, "volume-snapshot-controller-deployment.yaml", "0640"), @@ -572,68 +578,68 @@ var Addons = map[string]*Addon{ "SnapshotController": "k8s.gcr.io", }), "csi-hostpath-driver": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/csi-hostpath-driver/rbac/rbac-external-attacher.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/rbac/rbac-external-attacher.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-external-attacher.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-agent.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/rbac/rbac-external-health-monitor-agent.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-external-health-monitor-agent.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-external-health-monitor-controller.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/rbac/rbac-external-provisioner.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-external-provisioner.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/rbac/rbac-external-resizer.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-external-resizer.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml.tmpl", vmpath.GuestAddonsDir, "rbac-external-snapshotter.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-attacher.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-attacher.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-attacher.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-driverinfo.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-plugin.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-provisioner.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-provisioner.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-provisioner.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-resizer.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-resizer.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-resizer.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-snapshotter.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-snapshotter.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-snapshotter.yaml", "0640"), - MustBinAsset( - "deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-storageclass.yaml.tmpl", + MustBinAsset(addons.CsiHostpathDriverAssets, + "csi-hostpath-driver/deploy/csi-hostpath-storageclass.yaml.tmpl", vmpath.GuestAddonsDir, "csi-hostpath-storageclass.yaml", "0640"), diff --git a/pkg/minikube/assets/vm_assets.go b/pkg/minikube/assets/vm_assets.go index 35df4fb275df..b6ec89e9b89f 100644 --- a/pkg/minikube/assets/vm_assets.go +++ b/pkg/minikube/assets/vm_assets.go @@ -18,6 +18,7 @@ package assets import ( "bytes" + "embed" "fmt" "html/template" "io" @@ -207,6 +208,7 @@ func NewMemoryAsset(d []byte, targetDir, targetName, permissions string) *Memory // BinAsset is a bindata (binary data) asset type BinAsset struct { + embed.FS BaseAsset reader io.ReadSeeker template *template.Template @@ -214,8 +216,8 @@ type BinAsset struct { } // MustBinAsset creates a new BinAsset, or panics if invalid -func MustBinAsset(name, targetDir, targetName, permissions string) *BinAsset { - asset, err := NewBinAsset(name, targetDir, targetName, permissions) +func MustBinAsset(fs embed.FS, name, targetDir, targetName, permissions string) *BinAsset { + asset, err := NewBinAsset(fs, name, targetDir, targetName, permissions) if err != nil { panic(fmt.Sprintf("Failed to define asset %s: %v", name, err)) } @@ -223,8 +225,9 @@ func MustBinAsset(name, targetDir, targetName, permissions string) *BinAsset { } // NewBinAsset creates a new BinAsset -func NewBinAsset(name, targetDir, targetName, permissions string) (*BinAsset, error) { +func NewBinAsset(fs embed.FS, name, targetDir, targetName, permissions string) (*BinAsset, error) { m := &BinAsset{ + FS: fs, BaseAsset: BaseAsset{ SourcePath: name, TargetDir: targetDir, @@ -249,7 +252,7 @@ func defaultValue(defValue string, val interface{}) string { } func (m *BinAsset) loadData() error { - contents, err := Asset(m.SourcePath) + contents, err := m.FS.ReadFile(m.SourcePath) if err != nil { return err } From 1bac30bbe7caa5b8c64b35cfb97c197ffe08840a Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 16 Jun 2021 09:14:09 -0700 Subject: [PATCH 108/153] Update site to describe new addon creation workflow. --- site/content/en/docs/contrib/addons.en.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/site/content/en/docs/contrib/addons.en.md b/site/content/en/docs/contrib/addons.en.md index 0ffe72693445..b16a2f9ad904 100644 --- a/site/content/en/docs/contrib/addons.en.md +++ b/site/content/en/docs/contrib/addons.en.md @@ -47,24 +47,32 @@ To make the addon appear in `minikube addons list`, add it to `pkg/addons/config }, ``` +Next, add all required files using `//go:embed` directives to a new embed.FS variable in `deploy/addons/assets.go`. Here is the entry used by the `csi-hostpath-driver` addon: + +```go + // CsiHostpathDriverAssets assets for csi-hostpath-driver addon + //go:embed csi-hostpath-driver/deploy/*.tmpl csi-hostpath-driver/rbac/*.tmpl + CsiHostpathDriverAssets embed.FS +``` + Then, add into `pkg/minikube/assets/addons.go` the list of files to copy into the cluster, including manifests. Here is the entry used by the `registry` addon: ```go "registry": NewAddon([]*BinAsset{ - MustBinAsset( - "deploy/addons/registry/registry-rc.yaml.tmpl", + MustBinAsset(addons.RegistryAssets, + "registry/registry-rc.yaml.tmpl", vmpath.GuestAddonsDir, "registry-rc.yaml", "0640", false), - MustBinAsset( - "deploy/addons/registry/registry-svc.yaml.tmpl", + MustBinAsset(addons.RegistryAssets, + "registry/registry-svc.yaml.tmpl", vmpath.GuestAddonsDir, "registry-svc.yaml", "0640", false), - MustBinAsset( - "deploy/addons/registry/registry-proxy.yaml.tmpl", + MustBinAsset(addons.RegistryAssets, + "registry/registry-proxy.yaml.tmpl", vmpath.GuestAddonsDir, "registry-proxy.yaml", "0640", @@ -74,6 +82,7 @@ Then, add into `pkg/minikube/assets/addons.go` the list of files to copy into th The `MustBinAsset` arguments are: +* asset variable (typically present in `deploy/addons/assets.go`) * source filename * destination directory (typically `vmpath.GuestAddonsDir`) * destination filename From f7cb9286f6653b795301a2582da8aecc7190dc99 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Wed, 16 Jun 2021 10:06:11 -0700 Subject: [PATCH 109/153] only test for missing docs string --- cmd/minikube/cmd/generate-docs_test.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/cmd/minikube/cmd/generate-docs_test.go b/cmd/minikube/cmd/generate-docs_test.go index 9489fdc88a9f..91ce515de66e 100644 --- a/cmd/minikube/cmd/generate-docs_test.go +++ b/cmd/minikube/cmd/generate-docs_test.go @@ -23,7 +23,6 @@ import ( "strings" "testing" - "github.com/google/go-cmp/cmp" "k8s.io/minikube/pkg/generate" ) @@ -34,12 +33,6 @@ func TestGenerateTestDocs(t *testing.T) { } defer os.RemoveAll(tempdir) docPath := filepath.Join(tempdir, "tests.md") - realPath := "../../../site/content/en/docs/contrib/tests.en.md" - - expectedContents, err := ioutil.ReadFile(realPath) - if err != nil { - t.Fatalf("error reading existing file: %v", err) - } err = generate.TestDocs(docPath, "../../../test/integration") if err != nil { @@ -50,10 +43,6 @@ func TestGenerateTestDocs(t *testing.T) { t.Fatalf("error reading generated file: %v", err) } - if diff := cmp.Diff(string(actualContents), string(expectedContents)); diff != "" { - t.Errorf("Test docs are not updated. Please run `make generate-docs` to update documentation: %s", diff) - } - rest := string(actualContents) for rest != "" { rest = checkForNeedsDoc(t, rest) From 7e904f7b3a723a56bd673199b4f031fbc55532c1 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Wed, 16 Jun 2021 10:06:28 -0700 Subject: [PATCH 110/153] add github action yaml --- .github/workflows/docs.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/docs.yaml diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 000000000000..dd1002a719ca --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,17 @@ +name: "generate-docs" +on: + pull_request: + types: [closed] + +jobs: + generate-docs: + if: github.event.pull_request.merged == true + runs-on: ubuntu-18.04 + steps: + - uses: actions/setup-go@v2 + with: + go-version: 1.16.5 + stable: true + - name: gendocs + run: | + ./hack/generate_docs.sh ${{ secrets.MINIKUBE_BOT_PAT }} From 5efd296fde4a18c60fd50ef405bb183124401f07 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Wed, 16 Jun 2021 12:59:45 -0700 Subject: [PATCH 111/153] add tutorial for user flag --- site/content/en/docs/tutorials/user_flag.md | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 site/content/en/docs/tutorials/user_flag.md diff --git a/site/content/en/docs/tutorials/user_flag.md b/site/content/en/docs/tutorials/user_flag.md new file mode 100644 index 000000000000..1db7833a008b --- /dev/null +++ b/site/content/en/docs/tutorials/user_flag.md @@ -0,0 +1,50 @@ +--- +title: "Using the User Flag" +linkTitle: "Using the User Flag" +weight: 1 +date: 2021-06-15 +description: > + Using the User Flag to Keep an Audit Log +--- + +## Overview + +In minikube, all executed commands are logged to a local audit log in the minikube home directory (default: `~/.minikube/logs/audit.json`). +These commands are logged with additional information including the user that ran them, which by default is the OS user. +However, there is a global flag `--user` that will set the user who ran the command in the audit log. + +## Prerequisites + +- minikube v1.17.1 or newer + +## What does the flag do? + +Assuming the OS user is `johndoe`, running `minikube start` will add the following to the audit log: +``` +|---------------|--------------------------|-----------------------------|--------------|----------------|-------------------------------|-------------------------------| +| Command | Args | Profile | User | Version | Start Time | End Time | +|---------------|--------------------------|-----------------------------|--------------|----------------|-------------------------------|-------------------------------| +| start | | minikube | johndoe | v1.21.0 | Tue, 15 Jun 2021 09:00:00 MST | Tue, 15 Jun 2021 09:01:00 MST | +|---------------|--------------------------|-----------------------------|--------------|----------------|-------------------------------|-------------------------------| +``` +As you can see, minikube pulled the OS user and listed them as the user for the command. + +Running the same command with `--user=mary` appended to the command will add the following to the audit log: +``` +|---------------|--------------------------|-----------------------------|--------------|----------------|-------------------------------|-------------------------------| +| Command | Args | Profile | User | Version | Start Time | End Time | +|---------------|--------------------------|-----------------------------|--------------|----------------|-------------------------------|-------------------------------| +| start | --user=mary | minikube | mary | v1.21.0 | Tue, 15 Jun 2021 09:00:00 MST | Tue, 15 Jun 2021 09:01:00 MST | +|---------------|--------------------------|-----------------------------|--------------|----------------|-------------------------------|-------------------------------| +``` +Here you can see that passing `--user=mary` overwrote the OS user with `mary` as the user for the command. + +## Example use case + +A good use case for the `--user` flag is if you have an application that starts and stops minikube clusters. +Assume the application will use an exsiting cluster if available, otherwise, it will start a new one. +The problem comes when the application is finished using the cluster, you only want to stop the running cluster if the application started the cluster, not if it was already existing. + +This is where the user flag comes into play. +If the application was configured to pass a user flag on minikube commands (ex. `--user=app123`) then you could check to see what user executed the last `start` command looking at the audit log. +If the last user was `app123` you're safe to stop the cluster, otherwise leave it running. From c037e5f62fb4e8c40bed7c44465779954d3d1b14 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 16 Jun 2021 15:29:50 -0700 Subject: [PATCH 112/153] Stop using sudo for check_install_gh. --- hack/jenkins/test-flake-chart/report_flakes.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index a04c0d359cf4..16fc7a880015 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -82,6 +82,6 @@ if [[ "$FAILED_RATES_LINES" -gt 30 ]]; then fi # install gh if not present -sudo $DIR/../installers/check_install_gh.sh || true +$DIR/../installers/check_install_gh.sh gh issue comment "https://github.com/kubernetes/minikube/pull/$PR_NUMBER" --body "$(cat $TMP_COMMENT)" From c88dcec541e71fed4ead90da05ae105f57bf49db Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 16 Jun 2021 15:36:53 -0700 Subject: [PATCH 113/153] Stop ignoring pkg/minikube/assets/assets.go since it is not longer auto-generated. --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index e090af9badfc..951196710e84 100644 --- a/.gitignore +++ b/.gitignore @@ -35,8 +35,6 @@ _testmain.go #iso version file deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/VERSION -/pkg/minikube/assets/assets.go-e -/pkg/minikube/assets/assets.go /pkg/minikube/translate/translations.go /pkg/minikube/translate/translations.go-e /minikube From 9f601ea39324ccde1d8f4e82b0b8fa9e661f7aed Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Wed, 16 Jun 2021 18:03:52 -0700 Subject: [PATCH 114/153] Fix commenting to a PR instead of an issue. --- hack/jenkins/test-flake-chart/report_flakes.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index 16fc7a880015..0ffff11a791f 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -84,4 +84,4 @@ fi # install gh if not present $DIR/../installers/check_install_gh.sh -gh issue comment "https://github.com/kubernetes/minikube/pull/$PR_NUMBER" --body "$(cat $TMP_COMMENT)" +gh pr comment "https://github.com/kubernetes/minikube/pull/$PR_NUMBER" --body "$(cat $TMP_COMMENT)" From 48709efc4dc347c3e2560809dbbd8a6e8a94e289 Mon Sep 17 00:00:00 2001 From: RA489 Date: Thu, 17 Jun 2021 15:15:04 +0530 Subject: [PATCH 115/153] change registery_mirror to registery-mirror --- cmd/minikube/cmd/start.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 0d4f574e29a8..71c7e32afa9f 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -162,7 +162,7 @@ func runStart(cmd *cobra.Command, args []string) { // can be configured as MINIKUBE_IMAGE_REPOSITORY and IMAGE_MIRROR_COUNTRY // this should be updated to documentation if len(registryMirror) == 0 { - registryMirror = viper.GetStringSlice("registry_mirror") + registryMirror = viper.GetStringSlice("registry-mirror") } if !config.ProfileNameValid(ClusterFlagValue()) { From f465a9684432d23c201e2c9947c4a34e5c1b65be Mon Sep 17 00:00:00 2001 From: Medya Ghazizadeh Date: Thu, 17 Jun 2021 12:05:36 -0400 Subject: [PATCH 116/153] site: how to run minikube on remote network --- site/content/en/docs/faq/_index.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 9b5f9a6d95ba..3ce0a9a88cf0 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -92,3 +92,15 @@ Yes! If you prefer not having emoji in your minikube output 😔 , just set the MINIKUBE_IN_STYLE=0 minikube start ``` + +## How to access minikube cluster from on a remote network ? + +minikube is primary goal is to quickly sets up a local Kubernetes clusters, and we strongly discourge from using minikube in production or to listen on remote traffic. therefore by design minikube networking only listens on local network. + +however it possible to configure minikube to listen on a remote network. Please be aware this opens your network open to outside world and it is not recommended, and if you are not fully sure of the security implications, please avoid using this option. + +for docker/podman drivers you could use `--listen-address` +``` +minikube start --listen-address=0.0.0.0 +``` + From 5b8b5ce1024a5f3e3a2723550727f826ed21d6b4 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 17 Jun 2021 09:28:27 -0700 Subject: [PATCH 117/153] Fix flake rates being commented about when no failed tests are present. --- hack/jenkins/test-flake-chart/report_flakes.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/jenkins/test-flake-chart/report_flakes.sh b/hack/jenkins/test-flake-chart/report_flakes.sh index a04c0d359cf4..6238fa21b03c 100755 --- a/hack/jenkins/test-flake-chart/report_flakes.sh +++ b/hack/jenkins/test-flake-chart/report_flakes.sh @@ -61,7 +61,7 @@ TMP_FAILED_RATES="$TMP_FLAKE_RATES\_filtered" > "$TMP_FAILED_RATES" FAILED_RATES_LINES=$(wc -l < "$TMP_FAILED_RATES") -if [[ "$FAILED_RATES_LINES" -gt 30 ]]; then +if [[ "$FAILED_RATES_LINES" -eq 0 ]]; then echo "No failed tests! Aborting without commenting..." 1>&2 exit 0 fi From 300230bd5c3f56012a00e5a665638cd0ab32aaed Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 17 Jun 2021 09:41:40 -0700 Subject: [PATCH 118/153] Update flake chart colors. --- hack/jenkins/test-flake-chart/flake_chart.js | 1 + 1 file changed, 1 insertion(+) diff --git a/hack/jenkins/test-flake-chart/flake_chart.js b/hack/jenkins/test-flake-chart/flake_chart.js index e18d5389a5fb..736fc7cd7a2c 100644 --- a/hack/jenkins/test-flake-chart/flake_chart.js +++ b/hack/jenkins/test-flake-chart/flake_chart.js @@ -184,6 +184,7 @@ async function init() { 0: { title: "Flake rate", minValue: 0, maxValue: 100 }, 1: { title: "Duration (seconds)" }, }, + colors: ['#dc3912', '#3366cc'], tooltip: { trigger: "selection", isHtml: true } }; const chart = new google.visualization.LineChart(document.getElementById('chart_div')); From ddea20b2608c0f105c93f61c48ee85a34928ef77 Mon Sep 17 00:00:00 2001 From: Medya Ghazizadeh Date: Thu, 17 Jun 2021 13:05:08 -0400 Subject: [PATCH 119/153] Update _index.md --- site/content/en/docs/faq/_index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 3ce0a9a88cf0..ccd09b6c5711 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -93,13 +93,14 @@ MINIKUBE_IN_STYLE=0 minikube start ``` -## How to access minikube cluster from on a remote network ? +## How can I access a minikube cluster from a remote network? -minikube is primary goal is to quickly sets up a local Kubernetes clusters, and we strongly discourge from using minikube in production or to listen on remote traffic. therefore by design minikube networking only listens on local network. +minikube's primary goal is to quickly set up local Kubernetes clusters, and therefore we strongly discourage using minikube in production or for listening to remote traffic. By design, minikube is meant to only listen on the local network. -however it possible to configure minikube to listen on a remote network. Please be aware this opens your network open to outside world and it is not recommended, and if you are not fully sure of the security implications, please avoid using this option. +However, it is possible to configure minikube to listen on a remote network. This will open your network to the outside world and is not recommended. If you are not fully aware of the security implications, please avoid using this. + +For the docker and podman driver, use `--listen-address` flag: -for docker/podman drivers you could use `--listen-address` ``` minikube start --listen-address=0.0.0.0 ``` From c1a7937184d70344b39f1fd7df10c12f911aee3f Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 12:08:50 -0700 Subject: [PATCH 120/153] change workflow condition --- .github/workflows/docs.yaml | 6 +++--- hack/update/golang_version/update_golang_version.go | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index dd1002a719ca..49e1df79a83a 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -1,11 +1,11 @@ name: "generate-docs" on: - pull_request: - types: [closed] + push: + branch: + - master jobs: generate-docs: - if: github.event.pull_request.merged == true runs-on: ubuntu-18.04 steps: - uses: actions/setup-go@v2 diff --git a/hack/update/golang_version/update_golang_version.go b/hack/update/golang_version/update_golang_version.go index ca1096f20378..53f5336da053 100644 --- a/hack/update/golang_version/update_golang_version.go +++ b/hack/update/golang_version/update_golang_version.go @@ -70,6 +70,11 @@ var ( `go-version: '.*`: `go-version: '{{.StableVersion}}'`, }, }, + ".github/workflows/docs.yml": { + Replace: map[string]string{ + `go-version: '.*`: `go-version: '{{.StableVersion}}'`, + }, + }, ".travis.yml": { Replace: map[string]string{ `go:\n - .*`: `go:{{printf "\n - %s" .StableVersion}}`, From f2684bc777f119282096f1622d5e5374ecbf3a4a Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 12:19:32 -0700 Subject: [PATCH 121/153] fix syntax --- .github/workflows/docs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 49e1df79a83a..3552a5a9ac60 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/setup-go@v2 - with: + with: go-version: 1.16.5 stable: true - name: gendocs From 0cabaf961e811b1fa9540f91369ccb6a0df5c98b Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 12:38:53 -0700 Subject: [PATCH 122/153] fix workflow --- .github/workflows/docs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 3552a5a9ac60..051c752d62ec 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -8,6 +8,7 @@ jobs: generate-docs: runs-on: ubuntu-18.04 steps: + - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: go-version: 1.16.5 From d37a3e0ba2936eaba102beb52b234d72039411a2 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 12:41:37 -0700 Subject: [PATCH 123/153] make script executable --- hack/generate_docs.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 hack/generate_docs.sh diff --git a/hack/generate_docs.sh b/hack/generate_docs.sh old mode 100644 new mode 100755 From f8b2ebcc63be5ae5f7dc5d51b19968f29790611e Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 13:25:13 -0700 Subject: [PATCH 124/153] do not run workflow if there is no secret --- hack/generate_docs.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hack/generate_docs.sh b/hack/generate_docs.sh index cae908cee73c..f8fcc1644557 100755 --- a/hack/generate_docs.sh +++ b/hack/generate_docs.sh @@ -16,6 +16,11 @@ set -e +if [ "$#" -ne 1 ]; then + # there's no secret and therefore no reason to run this script + exit 0 +fi + install_gh() { export access_token="$1" From 5816b2a0c78b3af861dce68f8ac3d794642e063c Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 13:51:37 -0700 Subject: [PATCH 125/153] golang 1.6.4 --- .github/workflows/docs.yaml | 4 ++-- .github/workflows/time-to-k8s.yml | 2 +- hack/update/golang_version/update_golang_version.go | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 051c752d62ec..1edb0da4355d 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -1,7 +1,7 @@ name: "generate-docs" on: push: - branch: + branches: - master jobs: @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: 1.16.5 + go-version: 1.16.4 stable: true - name: gendocs run: | diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml index 0b4103ac7120..eeb3a650929d 100644 --- a/.github/workflows/time-to-k8s.yml +++ b/.github/workflows/time-to-k8s.yml @@ -11,7 +11,7 @@ jobs: run: git submodule update --init - uses: actions/setup-go@v2 with: - go-version: 1.16.5 + go-version: 1.16.4 stable: true - name: Benchmark run: | diff --git a/hack/update/golang_version/update_golang_version.go b/hack/update/golang_version/update_golang_version.go index 53f5336da053..d4fc63799ac2 100644 --- a/hack/update/golang_version/update_golang_version.go +++ b/hack/update/golang_version/update_golang_version.go @@ -75,6 +75,11 @@ var ( `go-version: '.*`: `go-version: '{{.StableVersion}}'`, }, }, + ".github/workflows/time-to-k8s.yml": { + Replace: map[string]string{ + `go-version: '.*`: `go-version: '{{.StableVersion}}'`, + }, + }, ".travis.yml": { Replace: map[string]string{ `go:\n - .*`: `go:{{printf "\n - %s" .StableVersion}}`, From 95333ed1fe97f35b36098cbcc01baee12094695c Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 17 Jun 2021 15:01:11 -0700 Subject: [PATCH 126/153] Move daemon cache check before file cache check so cache doesn't need to be repopulated if daemon is already present. --- pkg/minikube/node/cache.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/pkg/minikube/node/cache.go b/pkg/minikube/node/cache.go index 30aade94cab5..e05e78819864 100644 --- a/pkg/minikube/node/cache.go +++ b/pkg/minikube/node/cache.go @@ -131,6 +131,15 @@ func beginDownloadKicBaseImage(g *errgroup.Group, cc *config.ClusterConfig, down }() for _, img := range append([]string{baseImg}, kic.FallbackImages...) { var err error + + if driver.IsDocker(cc.Driver) { + if download.ImageExistsInDaemon(img) { + klog.Infof("%s exists in daemon, skipping load", img) + finalImg = img + return nil + } + } + klog.Infof("Downloading %s to local cache", img) err = download.ImageToCache(img) if err == nil { @@ -141,14 +150,6 @@ func beginDownloadKicBaseImage(g *errgroup.Group, cc *config.ClusterConfig, down return err } - if driver.IsDocker(cc.Driver) { - if download.ImageExistsInDaemon(img) { - klog.Infof("%s exists in daemon, skipping load", img) - finalImg = img - return nil - } - } - if cc.Driver == driver.Podman { return fmt.Errorf("not yet implemented, see issue #8426") } From ec4dab338b9870c763567f4ca7c6c3483f9f0655 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 17 Jun 2021 15:01:19 -0700 Subject: [PATCH 127/153] rename file for consistency --- .github/workflows/{docs.yaml => docs.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{docs.yaml => docs.yml} (100%) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yml similarity index 100% rename from .github/workflows/docs.yaml rename to .github/workflows/docs.yml From 92258d06d043f790362293b9882776e827b10034 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 17 Jun 2021 10:57:00 -0700 Subject: [PATCH 128/153] Remove uses of pkg/minikube/translate/translations.go --- Makefile | 55 ++++++++++++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index 0f320de21313..0690e2436697 100644 --- a/Makefile +++ b/Makefile @@ -74,8 +74,7 @@ GOLINT_GOGC ?= 100 GOLINT_OPTIONS = --timeout 7m \ --build-tags "${MINIKUBE_INTEGRATION_BUILD_TAGS}" \ --enable gofmt,goimports,gocritic,golint,gocyclo,misspell,nakedret,stylecheck,unconvert,unparam,dogsled \ - --exclude 'variable on range scope.*in function literal|ifElseChain' \ - --skip-files "pkg/minikube/translate/translations.go" + --exclude 'variable on range scope.*in function literal|ifElseChain' export GO111MODULE := on @@ -130,14 +129,15 @@ MINIKUBE_MARKDOWN_FILES := README.md CONTRIBUTING.md CHANGELOG.md MINIKUBE_BUILD_TAGS := MINIKUBE_INTEGRATION_BUILD_TAGS := integration $(MINIKUBE_BUILD_TAGS) -CMD_SOURCE_DIRS = cmd pkg deploy/addons +CMD_SOURCE_DIRS = cmd pkg deploy/addons translations SOURCE_DIRS = $(CMD_SOURCE_DIRS) test -SOURCE_PACKAGES = ./cmd/... ./pkg/... ./deploy/addons/... ./test/... +SOURCE_PACKAGES = ./cmd/... ./pkg/... ./deploy/addons/... ./translations/... ./test/... -SOURCE_GENERATED = pkg/minikube/translate/translations.go SOURCE_FILES = $(shell find $(CMD_SOURCE_DIRS) -type f -name "*.go" | grep -v _test.go) GOTEST_FILES = $(shell find $(CMD_SOURCE_DIRS) -type f -name "*.go" | grep _test.go) ADDON_FILES = $(shell find "deploy/addons" -type f | grep -v "\.go") +TRANSLATION_FILES = $(shell find "translations" -type f | grep -v "\.go") +ASSET_FILES = $(ADDON_FILES) $(TRANSLATION_FILES) # kvm2 ldflags KVM2_LDFLAGS := -X k8s.io/minikube/pkg/drivers/kvm.version=$(VERSION) -X k8s.io/minikube/pkg/drivers/kvm.gitCommitID=$(COMMIT) @@ -196,7 +196,7 @@ ifneq ($(TEST_FILES),) INTEGRATION_TESTS_TO_RUN := $(addprefix ./test/integration/, $(TEST_HELPERS) $(TEST_FILES)) endif -out/minikube$(IS_EXE): $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) go.mod +out/minikube$(IS_EXE): $(SOURCE_FILES) $(ASSET_FILES) go.mod ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) $(call DOCKER,$(BUILD_IMAGE),GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) /usr/bin/make $@) else @@ -245,7 +245,7 @@ minikube-windows-amd64.exe: out/minikube-windows-amd64.exe ## Build Minikube for eq = $(and $(findstring x$(1),x$(2)),$(findstring x$(2),x$(1))) -out/minikube-%: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) +out/minikube-%: $(SOURCE_FILES) $(ASSET_FILES) ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) $(call DOCKER,$(BUILD_IMAGE),/usr/bin/make $@) else @@ -254,7 +254,7 @@ else go build -tags "$(MINIKUBE_BUILD_TAGS)" -ldflags="$(MINIKUBE_LDFLAGS)" -a -o $@ k8s.io/minikube/cmd/minikube endif -out/minikube-linux-armv6: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) +out/minikube-linux-armv6: $(SOURCE_FILES) $(ASSET_FILES) $(Q)GOOS=linux GOARCH=arm GOARM=6 \ go build -tags "$(MINIKUBE_BUILD_TAGS)" -ldflags="$(MINIKUBE_LDFLAGS)" -a -o $@ k8s.io/minikube/cmd/minikube @@ -311,11 +311,11 @@ iso_in_docker: --user $(shell id -u):$(shell id -g) --env HOME=/tmp --env IN_DOCKER=1 \ $(ISO_BUILD_IMAGE) /bin/bash -test-iso: $(SOURCE_GENERATED) +test-iso: go test -v $(INTEGRATION_TESTS_TO_RUN) --tags=iso --minikube-start-args="--iso-url=file://$(shell pwd)/out/buildroot/output/images/rootfs.iso9660" .PHONY: test-pkg -test-pkg/%: $(SOURCE_GENERATED) ## Trigger packaging test +test-pkg/%: ## Trigger packaging test go test -v -test.timeout=60m ./$* --tags="$(MINIKUBE_BUILD_TAGS)" .PHONY: all @@ -365,7 +365,7 @@ else endif .PHONY: test -test: $(SOURCE_GENERATED) ## Trigger minikube test +test: ## Trigger minikube test MINIKUBE_LDFLAGS="${MINIKUBE_LDFLAGS}" ./test.sh .PHONY: generate-docs @@ -373,7 +373,7 @@ generate-docs: extract out/minikube ## Automatically generate commands documenta out/minikube generate-docs --path ./site/content/en/docs/commands/ --test-path ./site/content/en/docs/contrib/tests.en.md --code-path ./site/content/en/docs/contrib/errorcodes.en.md .PHONY: gotest -gotest: $(SOURCE_GENERATED) ## Trigger minikube test +gotest: ## Trigger minikube test $(if $(quiet),@echo " TEST $@") $(Q)go test -tags "$(MINIKUBE_BUILD_TAGS)" -ldflags="$(MINIKUBE_LDFLAGS)" $(MINIKUBE_TEST_FILES) @@ -398,17 +398,6 @@ out/coverage.html: out/coverage.out extract: ## extract internationalization words for translations go run cmd/extract/extract.go -pkg/minikube/translate/translations.go: $(shell find "translations/" -type f) -ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) - $(call DOCKER,$(BUILD_IMAGE),/usr/bin/make $@) -endif - @which go-bindata >/dev/null 2>&1 || GO111MODULE=off GOBIN="$(GOPATH)$(DIRSEP)bin" go get github.com/go-bindata/go-bindata/... - $(if $(quiet),@echo " GEN $@") - $(Q)PATH="$(PATH)$(PATHSEP)$(GOPATH)$(DIRSEP)bin" go-bindata -nomemcopy -o $@ -pkg translate translations/... - $(Q)-gofmt -s -w $@ - @#golint: Json should be JSON (compat sed) - @sed -i -e 's/Json/JSON/' $@ && rm -f ./-e - .PHONY: cross cross: minikube-linux-amd64 minikube-darwin-amd64 minikube-windows-amd64.exe ## Build minikube for all platform @@ -475,7 +464,7 @@ goimports: ## Run goimports and list the files differs from goimport's @test -z "`goimports -l $(SOURCE_DIRS)`" .PHONY: golint -golint: $(SOURCE_GENERATED) ## Run golint +golint: ## Run golint @golint -set_exit_status $(SOURCE_PACKAGES) .PHONY: gocyclo @@ -490,17 +479,17 @@ out/linters/golangci-lint-$(GOLINT_VERSION): # this one is meant for local use .PHONY: lint ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) -lint: $(SOURCE_GENERATED) +lint: docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:$(GOLINT_VERSION) \ golangci-lint run ${GOLINT_OPTIONS} --skip-dirs "cmd/drivers/kvm|cmd/drivers/hyperkit|pkg/drivers/kvm|pkg/drivers/hyperkit" ./... else -lint: $(SOURCE_GENERATED) out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint +lint: out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint ./out/linters/golangci-lint-$(GOLINT_VERSION) run ${GOLINT_OPTIONS} ./... endif # lint-ci is slower version of lint and is meant to be used in ci (travis) to avoid out of memory leaks. .PHONY: lint-ci -lint-ci: $(SOURCE_GENERATED) out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint-ci +lint-ci: out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint-ci GOGC=${GOLINT_GOGC} ./out/linters/golangci-lint-$(GOLINT_VERSION) run \ --concurrency ${GOLINT_JOBS} ${GOLINT_OPTIONS} ./... @@ -518,7 +507,7 @@ mdlint: verify-iso: # Make sure the current ISO exists in the expected bucket gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION).iso -out/docs/minikube.md: $(shell find "cmd") $(shell find "pkg/minikube/constants") $(SOURCE_GENERATED) +out/docs/minikube.md: $(shell find "cmd") $(shell find "pkg/minikube/constants") go run -ldflags="$(MINIKUBE_LDFLAGS)" -tags gendocs hack/help_text/gen_help_text.go @@ -647,7 +636,7 @@ release-hyperkit-driver: install-hyperkit-driver checksum ## Copy hyperkit using gsutil cp $(GOBIN)/docker-machine-driver-hyperkit.sha256 gs://minikube/drivers/hyperkit/$(VERSION)/ .PHONY: check-release -check-release: $(SOURCE_GENERATED) ## Execute go test +check-release: ## Execute go test go test -v ./deploy/minikube/release_sanity_test.go -tags=release buildroot-image: $(ISO_BUILD_IMAGE) # convenient alias to build the docker container @@ -753,7 +742,7 @@ endif docker push $(IMAGE) .PHONY: out/gvisor-addon -out/gvisor-addon: $(SOURCE_GENERATED) ## Build gvisor addon +out/gvisor-addon: ## Build gvisor addon $(if $(quiet),@echo " GO $@") $(Q)GOOS=linux CGO_ENABLED=0 go build -o $@ cmd/gvisor/gvisor.go @@ -882,16 +871,16 @@ out/mkcmp: GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ cmd/performance/mkcmp/main.go .PHONY: deploy/kicbase/auto-pause # auto pause binary to be used for kic image work around for not passing the whole repo as docker context -deploy/kicbase/auto-pause: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) +deploy/kicbase/auto-pause: $(SOURCE_FILES) $(ASSET_FILES) GOOS=linux GOARCH=$(GOARCH) go build -o $@ cmd/auto-pause/auto-pause.go # auto pause binary to be used for ISO -deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause: $(SOURCE_GENERATED) $(SOURCE_FILES) $(ADDON_FILES) +deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause: $(SOURCE_FILES) $(ASSET_FILES) GOOS=linux GOARCH=$(GOARCH) go build -o $@ cmd/auto-pause/auto-pause.go .PHONY: deploy/addons/auto-pause/auto-pause-hook -deploy/addons/auto-pause/auto-pause-hook: $(SOURCE_GENERATED) ## Build auto-pause hook addon +deploy/addons/auto-pause/auto-pause-hook: ## Build auto-pause hook addon $(if $(quiet),@echo " GO $@") $(Q)GOOS=linux CGO_ENABLED=0 go build -a --ldflags '-extldflags "-static"' -tags netgo -installsuffix netgo -o $@ cmd/auto-pause/auto-pause-hook/main.go cmd/auto-pause/auto-pause-hook/config.go cmd/auto-pause/auto-pause-hook/certs.go From 770d348e30c2406208006512f59f9097dca827b1 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 17 Jun 2021 11:27:44 -0700 Subject: [PATCH 129/153] Use goembed for translations. --- pkg/minikube/translate/translate.go | 5 +++-- translations/translations.go | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 translations/translations.go diff --git a/pkg/minikube/translate/translate.go b/pkg/minikube/translate/translate.go index 892450e60428..9cae7bc05335 100644 --- a/pkg/minikube/translate/translate.go +++ b/pkg/minikube/translate/translate.go @@ -26,6 +26,7 @@ import ( "golang.org/x/text/language" "k8s.io/klog/v2" + "k8s.io/minikube/translations" ) var ( @@ -70,13 +71,13 @@ func DetermineLocale() { // Load translations for preferred language into memory. p := preferredLanguage.String() translationFile := path.Join("translations", fmt.Sprintf("%s.json", p)) - t, err := Asset(translationFile) + t, err := translations.Translations.ReadFile(translationFile) if err != nil { // Attempt to find a more broad locale, e.g. fr instead of fr-FR. if strings.Contains(p, "-") { p = strings.Split(p, "-")[0] translationFile := path.Join("translations", fmt.Sprintf("%s.json", p)) - t, err = Asset(translationFile) + t, err = translations.Translations.ReadFile(translationFile) if err != nil { klog.V(1).Infof("Failed to load translation file for %s: %v", p, err) return diff --git a/translations/translations.go b/translations/translations.go new file mode 100644 index 000000000000..2407a74dc210 --- /dev/null +++ b/translations/translations.go @@ -0,0 +1,23 @@ +/* +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 translations + +import "embed" + +// Translations contains all translation JSON files. +//go:embed *.json +var Translations embed.FS From c61550e96732682e0d32bc62fe4d5c8ea61ba782 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Thu, 17 Jun 2021 11:28:07 -0700 Subject: [PATCH 130/153] Remove translations.go from .gitignore. --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index 951196710e84..cf6f99bc49fd 100644 --- a/.gitignore +++ b/.gitignore @@ -35,8 +35,6 @@ _testmain.go #iso version file deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/VERSION -/pkg/minikube/translate/translations.go -/pkg/minikube/translate/translations.go-e /minikube .DS_Store From 51564f8f941106b2ef4f314ecac053d06018ba62 Mon Sep 17 00:00:00 2001 From: Peixuan Ding Date: Thu, 17 Jun 2021 20:56:21 -0400 Subject: [PATCH 131/153] Changed minimum required Go version to 1.16 in docs --- site/content/en/docs/contrib/building/binaries.md | 2 +- site/content/en/docs/contrib/building/iso.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/site/content/en/docs/contrib/building/binaries.md b/site/content/en/docs/contrib/building/binaries.md index ade5f54f9943..6254844a1004 100644 --- a/site/content/en/docs/contrib/building/binaries.md +++ b/site/content/en/docs/contrib/building/binaries.md @@ -7,7 +7,7 @@ weight: 2 ## Prerequisites -* A recent Go distribution (>=1.12) +* A recent Go distribution (>=1.16) * If you are on Windows, you'll need Docker to be installed. * 4GB of RAM diff --git a/site/content/en/docs/contrib/building/iso.md b/site/content/en/docs/contrib/building/iso.md index 8fd818bd382b..f739aef8196c 100644 --- a/site/content/en/docs/contrib/building/iso.md +++ b/site/content/en/docs/contrib/building/iso.md @@ -10,7 +10,7 @@ The minikube ISO is booted by each hypervisor to provide a stable minimal Linux ## Prerequisites -* A recent Go distribution (>=1.12) +* A recent Go distribution (>=1.16) * If you are on Windows, you'll need Docker to be installed. * 4GB of RAM * Build tools: From ab51f6fb70882c6f6ac615db96a614a2fbf4b89e Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Thu, 17 Jun 2021 19:57:25 -0700 Subject: [PATCH 132/153] Fix intersected log boxes when running with --alsologtostderr --- pkg/minikube/out/out.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/pkg/minikube/out/out.go b/pkg/minikube/out/out.go index 2f449691c89a..f2f6f8bc2fd0 100644 --- a/pkg/minikube/out/out.go +++ b/pkg/minikube/out/out.go @@ -114,17 +114,12 @@ func Styled(st style.Enum, format string, a ...V) { } func boxedCommon(printFunc func(format string, a ...interface{}), format string, a ...V) { - str := Sprintf(style.None, format, a...) - str = strings.TrimSpace(str) box := box.New(box.Config{Py: 1, Px: 4, Type: "Round"}) if useColor { box.Config.Color = "Red" } - str = box.String("", str) - lines := strings.Split(str, "\n") - for _, line := range lines { - printFunc(line + "\n") - } + str := Sprintf(style.None, format, a...) + printFunc(box.String("", strings.TrimSpace(str))) } // Boxed writes a stylized and templated message in a box to stdout From d5d55290bf353b0e7efeb3c0e728a9a012d4077d Mon Sep 17 00:00:00 2001 From: Peixuan Ding Date: Fri, 18 Jun 2021 01:21:02 -0400 Subject: [PATCH 133/153] Add proposal for tips Signed-off-by: Peixuan Ding --- enhancements/proposed/20210618-tips/tips.md | 215 ++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 enhancements/proposed/20210618-tips/tips.md diff --git a/enhancements/proposed/20210618-tips/tips.md b/enhancements/proposed/20210618-tips/tips.md new file mode 100644 index 000000000000..5abb6f3b8098 --- /dev/null +++ b/enhancements/proposed/20210618-tips/tips.md @@ -0,0 +1,215 @@ +# Periodically tell user about minikube features/tips and tricks + +* First proposed: 2021-06-18 +* Authors: Peixuan Ding (@dinever) + +## Reviewer Priorities + +Please review this proposal with the following priorities: + +* Does this fit with minikube's [principles](https://minikube.sigs.k8s.io/docs/concepts/principles/)? +* Are there other approaches to consider? +* Could the implementation be made simpler? +* Are there usability, reliability, or technical debt concerns? + +Please leave the above text in your proposal as instructions to the reader. + +## Summary + +minikube has lots of great features. We want to proactively remind users that +those features are available. + +To achieve this, we can have a tips feature that randomly shows a tip +from a curated list whenever the user starts a new minikube profile. + +For example: + +![Screenshot from 2021-06-18 00-58-02](https://user-images.githubusercontent.com/1311594/122508665-53bd6380-cfd0-11eb-9e99-a6c5935514d5.png) + +## Goals + +* Store a list of tips in a static file +* Show a random minikube usage tip each time a user starts a minikube profile +* Have the tips synced to the Hugo docs website to make those available through docs +* Allow user to disable the Tips feature with minikube config + +## Non-Goals + +* Modify any existing functionalities or docs + +## Design Details + +First, we need a static file to store all the tips, we can have a YAML file at [pkg/generate/tips/tips.yaml](https://github.com/kubernetes/minikube/tree/master/pkg/generate): + +```YAML +tips: + - | + You can specify any Kubernetes version you want. For example: + + ``` + minikube start --kubernetes-version=v1.19.0 + ``` + - | + You can use minikube's built-in kubectl. For example: + + ``` + minikube kubectl -- get pods + ``` + - | + minikube has the built-in Kubernetes Dashboard UI. To access it: + + ``` + minikube dashboard + ``` +``` + +Use `goembed` to embed this file into the minikube binary. + +The current `out.Boxed` has a hard-coded style (red). I propose to add another `out.BoxedWithConfig` method to allow +output with customized style: + +```go +type BoxConfig struct { + // box.Config is the config struct of box-cli-maker + box.Config + // Title is a text that shows as a header of the box + Title string + // Icon is the optional emoji we want to show as a prefix for the title + Icon style.Enum +} + +// BoxedWithConfig writes a templated message in a box with customized style config to stdout +func BoxedWithConfig(cfg BoxConfig, format string, a ...V) { + boxedCommon(String, cfg, format, a...) +} +``` + +Whenever minikube successfully starts, we randomly choose a tip. + +Before printing it out, we need to do some regex replacement to strip the markdown syntax +for better view experience in Terminal: + +From this: + +``````markdown +You can specify any Kubernetes version you want. For example: + +``` +minikube start --kubernetes-version=v1.19.0 +``` +`````` + +To this: + +```markdown +You can specify any Kubernetes version you want. For example: + +minikube start --kubernetes-version=v1.19.0 +``` + +Then we can print out the tip: + + +```go +boxCfg := out.BoxConfig{ + Config: box.Config{ + Py: 1, + Px: 5, + TitlePos: "Top", + Type: "Round", + Color: tipBoxColor, + }, + Title: tipTitle, + Icon: style.Tip, +} + +out.BoxedWithConfig(boxCfg, tips.Tips[chosen] + "\n\n" + tipSuffix) +``` + +![Screenshot from 2021-06-18 00-58-02](https://user-images.githubusercontent.com/1311594/122508665-53bd6380-cfd0-11eb-9e99-a6c5935514d5.png) + +User can choose to disable this through `minikube config set disable-tips true` + +We will have `make generate-docs` generating the docs site based on this YAML file as well. + +We can have a `Nice to know` sub-page under `FAQ`? + +![Screenshot from 2021-06-18 01-00-30](https://user-images.githubusercontent.com/1311594/122508827-a139d080-cfd0-11eb-98bb-f7c3c1c604c2.png) + + +### About the tip collection + +I plan to start with the command lines and cover almost all CLI usages of minikube. + +That includes but not limited to: +- addons +- cached images +- command line completion +- config +- file copy +- dashboard +- delete minikube cluster +- configure minikube's docker/podman env +- image build / load / ls / rm +- ip +- logging +- kubectl +- mount file directory +- multi-node +- pause/unpause to save resource +- multi-profile +- surface URL to a k8s service +- ssh into minikube +- status +- tunnel to connect to LB +- update-check to check versions +- update-context + +### Implementation + +I plan to open at least 4 PRs: + +1. `out.Boxed` with custom style +2. random `tips` display with ability to disable through config, with an initial set of about 10 tips +3. `make generate-docs` to sync tips to docs +4. Add more tips + +## Alternatives Considered + +1. Is there a more preferred file format to YAML? + +2. Maybe we just want to sync the tips to the `FAQ` page list instead of creating a new page? + +3. Instead of the file format I proposed, maybe add a `question` field? + + ```yaml + tips: + - question: How to specify a different Kubernetes version? + answer: | + You can specify any Kubernetes version you want. For example: + + ``` + minikube start --kubernetes-version=v1.19.0 + ``` + - question: Do I have to install `kubectl` myself? + answer: | + You can use minikube's built-in kubectl. For example: + + ``` + minikube kubectl -- get pods + ``` + - question: How do I access the Kubernetes Dashboard UI? + answer: | + minikube has the built-in Kubernetes Dashboard UI. To access it: + + ``` + minikube dashboard + ``` + ``` + + On the docs side we should both questions and answers. On the CLI side + we can either show both questions and answers, or just show the answers + to make it more compact + + ![Screenshot from 2021-06-18 01-25-54](https://user-images.githubusercontent.com/1311594/122510785-2c689580-cfd4-11eb-9fd0-0a0ff344e3cc.png) + From 6d346e0b803ed39bf534b4759e567d88eab361f2 Mon Sep 17 00:00:00 2001 From: Peixuan Ding Date: Fri, 18 Jun 2021 09:24:42 -0400 Subject: [PATCH 134/153] Remove Hugo workaround for go1.16 --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0f320de21313..ca348ac7099e 100644 --- a/Makefile +++ b/Makefile @@ -866,8 +866,7 @@ site/themes/docsy/assets/vendor/bootstrap/package.js: ## update the website docs out/hugo/hugo: mkdir -p out test -d out/hugo || git clone https://github.com/gohugoio/hugo.git out/hugo - go get golang.org/dl/go1.16 && go1.16 download - (cd out/hugo && go1.16 build --tags extended) + (cd out/hugo && go build --tags extended) .PHONY: site site: site/themes/docsy/assets/vendor/bootstrap/package.js out/hugo/hugo ## Serve the documentation site to localhost From cd1adcf35dda128dc2aa0a85e73acfd8b173fe73 Mon Sep 17 00:00:00 2001 From: Daehyeok Mun Date: Tue, 15 Jun 2021 22:18:17 -0700 Subject: [PATCH 135/153] Remove unused config options --- cmd/minikube/cmd/config/config.go | 20 -------------------- cmd/minikube/cmd/root.go | 5 ----- pkg/minikube/config/config.go | 10 ---------- site/content/en/docs/commands/config.md | 5 ----- 4 files changed, 40 deletions(-) diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index 8ef3630915f1..0751f52e77d1 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -122,18 +122,6 @@ var settings = []Setting{ name: config.ReminderWaitPeriodInHours, set: SetInt, }, - { - name: config.WantReportError, - set: SetBool, - }, - { - name: config.WantReportErrorPrompt, - set: SetBool, - }, - { - name: config.WantKubectlDownloadMsg, - set: SetBool, - }, { name: config.WantNoneDriverWarning, set: SetBool, @@ -146,14 +134,6 @@ var settings = []Setting{ name: Bootstrapper, set: SetString, }, - { - name: config.ShowDriverDeprecationNotification, - set: SetBool, - }, - { - name: config.ShowBootstrapperDeprecationNotification, - set: SetBool, - }, { name: "insecure-registry", set: SetString, diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 5b81138d82a0..63753c37550f 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -303,12 +303,7 @@ func setupViper() { viper.SetDefault(config.WantUpdateNotification, true) viper.SetDefault(config.ReminderWaitPeriodInHours, 24) - viper.SetDefault(config.WantReportError, false) - viper.SetDefault(config.WantReportErrorPrompt, true) - viper.SetDefault(config.WantKubectlDownloadMsg, true) viper.SetDefault(config.WantNoneDriverWarning, true) - viper.SetDefault(config.ShowDriverDeprecationNotification, true) - viper.SetDefault(config.ShowBootstrapperDeprecationNotification, true) } func addToPath(dir string) { diff --git a/pkg/minikube/config/config.go b/pkg/minikube/config/config.go index f194099266a5..9b76d844516d 100644 --- a/pkg/minikube/config/config.go +++ b/pkg/minikube/config/config.go @@ -36,20 +36,10 @@ const ( WantBetaUpdateNotification = "WantBetaUpdateNotification" // ReminderWaitPeriodInHours is the key for ReminderWaitPeriodInHours ReminderWaitPeriodInHours = "ReminderWaitPeriodInHours" - // WantReportError is the key for WantReportError - WantReportError = "WantReportError" - // WantReportErrorPrompt is the key for WantReportErrorPrompt - WantReportErrorPrompt = "WantReportErrorPrompt" - // WantKubectlDownloadMsg is the key for WantKubectlDownloadMsg - WantKubectlDownloadMsg = "WantKubectlDownloadMsg" // WantNoneDriverWarning is the key for WantNoneDriverWarning WantNoneDriverWarning = "WantNoneDriverWarning" // ProfileName represents the key for the global profile parameter ProfileName = "profile" - // ShowDriverDeprecationNotification is the key for ShowDriverDeprecationNotification - ShowDriverDeprecationNotification = "ShowDriverDeprecationNotification" - // ShowBootstrapperDeprecationNotification is the key for ShowBootstrapperDeprecationNotification - ShowBootstrapperDeprecationNotification = "ShowBootstrapperDeprecationNotification" // UserFlag is the key for the global user flag (ex. --user=user1) UserFlag = "user" // AddonImages stores custom addon images config diff --git a/site/content/en/docs/commands/config.md b/site/content/en/docs/commands/config.md index 51ff431b204b..44b3bb0716bc 100644 --- a/site/content/en/docs/commands/config.md +++ b/site/content/en/docs/commands/config.md @@ -29,14 +29,9 @@ Configurable fields: * WantUpdateNotification * WantBetaUpdateNotification * ReminderWaitPeriodInHours - * WantReportError - * WantReportErrorPrompt - * WantKubectlDownloadMsg * WantNoneDriverWarning * profile * bootstrapper - * ShowDriverDeprecationNotification - * ShowBootstrapperDeprecationNotification * insecure-registry * hyperv-virtual-switch * disable-driver-mounts From fa7c151fdb067fc79f428df99e3f4f9235f27f7f Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Fri, 18 Jun 2021 09:15:06 -0700 Subject: [PATCH 136/153] Fix translations not looking for correct file. --- pkg/minikube/translate/translate.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pkg/minikube/translate/translate.go b/pkg/minikube/translate/translate.go index 9cae7bc05335..2605870cd5da 100644 --- a/pkg/minikube/translate/translate.go +++ b/pkg/minikube/translate/translate.go @@ -19,7 +19,6 @@ package translate import ( "encoding/json" "fmt" - "path" "strings" "github.com/cloudfoundry-attic/jibber_jabber" @@ -70,14 +69,12 @@ func DetermineLocale() { // Load translations for preferred language into memory. p := preferredLanguage.String() - translationFile := path.Join("translations", fmt.Sprintf("%s.json", p)) - t, err := translations.Translations.ReadFile(translationFile) + t, err := translations.Translations.ReadFile(fmt.Sprintf("%s.json", p)) if err != nil { // Attempt to find a more broad locale, e.g. fr instead of fr-FR. if strings.Contains(p, "-") { p = strings.Split(p, "-")[0] - translationFile := path.Join("translations", fmt.Sprintf("%s.json", p)) - t, err = translations.Translations.ReadFile(translationFile) + t, err = translations.Translations.ReadFile(fmt.Sprintf("%s.json", p)) if err != nil { klog.V(1).Infof("Failed to load translation file for %s: %v", p, err) return From d38f2f01498ca78c4dc1de69c85290da588d55b1 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Fri, 18 Jun 2021 09:55:58 -0700 Subject: [PATCH 137/153] Add functional test for ensuring international language is used. --- test/integration/functional_test.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/integration/functional_test.go b/test/integration/functional_test.go index 2616bf1535b9..a3c41bd4efd2 100644 --- a/test/integration/functional_test.go +++ b/test/integration/functional_test.go @@ -116,6 +116,7 @@ func TestFunctional(t *testing.T) { {"ConfigCmd", validateConfigCmd}, {"DashboardCmd", validateDashboardCmd}, {"DryRun", validateDryRun}, + {"InternationalLanguage", validateInternationalLanguage}, {"StatusCmd", validateStatusCmd}, {"LogsCmd", validateLogsCmd}, {"LogsFileCmd", validateLogsFileCmd}, @@ -897,6 +898,32 @@ func validateDryRun(ctx context.Context, t *testing.T, profile string) { } } +// validateInternationalLanguage asserts that the language used can be changed with environment variables +func validateInternationalLanguage(ctx context.Context, t *testing.T, profile string) { + // dry-run mode should always be able to finish quickly (<5s) + mctx, cancel := context.WithTimeout(ctx, Seconds(5)) + defer cancel() + + // Too little memory! + startArgs := append([]string{"start", "-p", profile, "--dry-run", "--memory", "250MB", "--alsologtostderr"}, StartArgs()...) + c := exec.CommandContext(mctx, Target(), startArgs...) + c.Env = append(os.Environ(), "LC_ALL=fr") + + rr, err := Run(t, c) + + wantCode := reason.ExInsufficientMemory + if rr.ExitCode != wantCode { + if HyperVDriver() { + t.Skip("skipping this error on HyperV till this issue is solved https://github.com/kubernetes/minikube/issues/9785") + } else { + t.Errorf("dry-run(250MB) exit code = %d, wanted = %d: %v", rr.ExitCode, wantCode, err) + } + } + if !strings.Contains(rr.Stdout.String(), "Utilisation du pilote") { + t.Errorf("dry-run output was expected to be in French. Expected \"Utilisation du pilote\", but not present in output:\n%s", rr.Stdout.String()) + } +} + // validateCacheCmd tests functionality of cache command (cache add, delete, list) func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) From ebb35cfdc6343197efd511a083b0d58b13eb4966 Mon Sep 17 00:00:00 2001 From: Andriy Dzikh Date: Fri, 18 Jun 2021 10:12:59 -0700 Subject: [PATCH 138/153] Run make generate-docs. --- site/content/en/docs/contrib/tests.en.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md index 47ea10dca52f..67c78f1ecab3 100644 --- a/site/content/en/docs/contrib/tests.en.md +++ b/site/content/en/docs/contrib/tests.en.md @@ -130,6 +130,9 @@ asserts that the dashboard command works #### validateDryRun asserts that the dry-run mode quickly exits with the right code +#### validateInternationalLanguage +asserts that the language used can be changed with environment variables + #### validateCacheCmd tests functionality of cache command (cache add, delete, list) From 1200975bc78180e3ec705fe33ea5ce51bebf2bfd Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 18 Jun 2021 13:28:01 -0700 Subject: [PATCH 139/153] debug --- hack/generate_docs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/generate_docs.sh b/hack/generate_docs.sh index f8fcc1644557..38e9685eccfe 100755 --- a/hack/generate_docs.sh +++ b/hack/generate_docs.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -e +set -ex if [ "$#" -ne 1 ]; then # there's no secret and therefore no reason to run this script From 248942f830b1780cc9b99c179a1fc3b9b0ece31f Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 18 Jun 2021 13:46:30 -0700 Subject: [PATCH 140/153] move around check --- hack/generate_docs.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hack/generate_docs.sh b/hack/generate_docs.sh index 38e9685eccfe..a116101fa1a2 100755 --- a/hack/generate_docs.sh +++ b/hack/generate_docs.sh @@ -36,7 +36,8 @@ config_git() { make generate-docs # If there are changes, open a PR -if ! git diff-index --quiet HEAD --; then +git diff-index --quiet HEAD -- +if [ $? -gt 0 ]; then install_gh $1 config_git From c8fb43220d2258b5f107662509309ef6697535d7 Mon Sep 17 00:00:00 2001 From: minikube-bot Date: Fri, 18 Jun 2021 13:56:02 -0700 Subject: [PATCH 141/153] remove exit on error --- hack/generate_docs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/generate_docs.sh b/hack/generate_docs.sh index a116101fa1a2..c7ff38be05b7 100755 --- a/hack/generate_docs.sh +++ b/hack/generate_docs.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -ex +set -x if [ "$#" -ne 1 ]; then # there's no secret and therefore no reason to run this script From 386561f694d2e052af7046ccd1886725baec676f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Sat, 19 Jun 2021 09:49:38 +0200 Subject: [PATCH 142/153] Upgrade podman to 3.1.2 --- deploy/iso/minikube-iso/package/podman/podman.hash | 1 + deploy/iso/minikube-iso/package/podman/podman.mk | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/deploy/iso/minikube-iso/package/podman/podman.hash b/deploy/iso/minikube-iso/package/podman/podman.hash index 4f5158b977e2..2d82781bac9e 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.hash +++ b/deploy/iso/minikube-iso/package/podman/podman.hash @@ -2,3 +2,4 @@ sha256 a16846fe076aaf2c9ea2e854c3baba9fb838d916be7fb4b5be332e6c92d907d4 v1.9.3.t sha256 5ebaa6e0dbd7fd1863f70d2bc71dc8a94e195c3339c17e3cac4560c9ec5747f8 v2.1.1.tar.gz sha256 ec5473e51fa28f29af323473fc484f742dc7df23d06d8ba9f217f13382893a71 v2.2.0.tar.gz sha256 3212bad60d945c1169b27da03959f36d92d1d8964645c701a5a82a89118e96d1 v2.2.1.tar.gz +sha256 5a0d42e03d15e32c5c54a147da5ef1b8928ec00982ac9e3f1edc82c5e614b6d2 v3.1.2.tar.gz diff --git a/deploy/iso/minikube-iso/package/podman/podman.mk b/deploy/iso/minikube-iso/package/podman/podman.mk index a2170ba39534..ccc68876e52c 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.mk +++ b/deploy/iso/minikube-iso/package/podman/podman.mk @@ -1,5 +1,5 @@ -PODMAN_VERSION = v2.2.1 -PODMAN_COMMIT = a0d478edea7f775b7ce32f8eb1a01e75374486cb +PODMAN_VERSION = v3.1.2 +PODMAN_COMMIT = 51b8ddbc22cf5b10dd76dd9243924aa66ad7db39 PODMAN_SITE = https://github.com/containers/podman/archive PODMAN_SOURCE = $(PODMAN_VERSION).tar.gz PODMAN_LICENSE = Apache-2.0 From c6c9cec51b2b0959a031bb355e86aef20c41d63b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Sat, 19 Jun 2021 09:49:56 +0200 Subject: [PATCH 143/153] Stop using /etc/cni/net.d for podman network Kubernetes can't handle anything else using the same config directory, and doesn't have a method of choosing which cni. --- .../package/podman/containers.conf | 29 +++++++++++++++++++ .../iso/minikube-iso/package/podman/podman.mk | 7 +++-- 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 deploy/iso/minikube-iso/package/podman/containers.conf diff --git a/deploy/iso/minikube-iso/package/podman/containers.conf b/deploy/iso/minikube-iso/package/podman/containers.conf new file mode 100644 index 000000000000..53745589359d --- /dev/null +++ b/deploy/iso/minikube-iso/package/podman/containers.conf @@ -0,0 +1,29 @@ +# The containers configuration file specifies all of the available configuration +# command-line options/flags for container engine tools like Podman & Buildah, +# but in a TOML format that can be easily modified and versioned. + +# Please refer to containers.conf(5) for details of all configuration options. +# Not all container engines implement all of the options. +# All of the options have hard coded defaults and these options will override +# the built in defaults. Users can then override these options via the command +# line. Container engines will read containers.conf files in up to three +# locations in the following order: +# 1. /usr/share/containers/containers.conf +# 2. /etc/containers/containers.conf +# 3. $HOME/.config/containers/containers.conf (Rootless containers ONLY) +# Items specified in the latter containers.conf, if they exist, override the +# previous containers.conf settings, or the default settings. + +[network] + +# Path to directory where CNI plugin binaries are located. +# +# cni_plugin_dirs = ["/usr/libexec/cni"] + +# The network name of the default CNI network to attach pods to. +# default_network = "podman" + +# Path to the directory where CNI configuration files are located. +# +# network_config_dir = "/etc/cni/net.d/" +network_config_dir = "/etc/containers/net.d/" diff --git a/deploy/iso/minikube-iso/package/podman/podman.mk b/deploy/iso/minikube-iso/package/podman/podman.mk index ccc68876e52c..bef3e814fb64 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.mk +++ b/deploy/iso/minikube-iso/package/podman/podman.mk @@ -47,8 +47,11 @@ endef define PODMAN_INSTALL_TARGET_CMDS $(INSTALL) -Dm755 $(@D)/bin/podman $(TARGET_DIR)/usr/bin/podman - $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/cni/net.d/ - $(INSTALL) -m 644 $(@D)/cni/87-podman-bridge.conflist $(TARGET_DIR)/etc/cni/net.d/87-podman-bridge.conflist + # Don't use kubernetes /etc/cni, but use podman /etc/containers + $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/containers/ + $(INSTALL) -m 644 $(PODMAN_PKGDIR)/containers.conf $(TARGET_DIR)/etc/containers/containers.conf + $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/containers/net.d/ + $(INSTALL) -m 644 $(@D)/cni/87-podman-bridge.conflist $(TARGET_DIR)/etc/containers/net.d/87-podman-bridge.conflist endef define PODMAN_INSTALL_INIT_SYSTEMD From ab4cfc239d41bdde8727af646ae3c1defa84ada1 Mon Sep 17 00:00:00 2001 From: Medya Ghazizadeh Date: Mon, 21 Jun 2021 12:13:59 -0400 Subject: [PATCH 144/153] Revert "ISO: Upgrade podman to 3.1.2" --- .../package/podman/containers.conf | 29 ------------------- .../minikube-iso/package/podman/podman.hash | 1 - .../iso/minikube-iso/package/podman/podman.mk | 11 +++---- 3 files changed, 4 insertions(+), 37 deletions(-) delete mode 100644 deploy/iso/minikube-iso/package/podman/containers.conf diff --git a/deploy/iso/minikube-iso/package/podman/containers.conf b/deploy/iso/minikube-iso/package/podman/containers.conf deleted file mode 100644 index 53745589359d..000000000000 --- a/deploy/iso/minikube-iso/package/podman/containers.conf +++ /dev/null @@ -1,29 +0,0 @@ -# The containers configuration file specifies all of the available configuration -# command-line options/flags for container engine tools like Podman & Buildah, -# but in a TOML format that can be easily modified and versioned. - -# Please refer to containers.conf(5) for details of all configuration options. -# Not all container engines implement all of the options. -# All of the options have hard coded defaults and these options will override -# the built in defaults. Users can then override these options via the command -# line. Container engines will read containers.conf files in up to three -# locations in the following order: -# 1. /usr/share/containers/containers.conf -# 2. /etc/containers/containers.conf -# 3. $HOME/.config/containers/containers.conf (Rootless containers ONLY) -# Items specified in the latter containers.conf, if they exist, override the -# previous containers.conf settings, or the default settings. - -[network] - -# Path to directory where CNI plugin binaries are located. -# -# cni_plugin_dirs = ["/usr/libexec/cni"] - -# The network name of the default CNI network to attach pods to. -# default_network = "podman" - -# Path to the directory where CNI configuration files are located. -# -# network_config_dir = "/etc/cni/net.d/" -network_config_dir = "/etc/containers/net.d/" diff --git a/deploy/iso/minikube-iso/package/podman/podman.hash b/deploy/iso/minikube-iso/package/podman/podman.hash index 2d82781bac9e..4f5158b977e2 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.hash +++ b/deploy/iso/minikube-iso/package/podman/podman.hash @@ -2,4 +2,3 @@ sha256 a16846fe076aaf2c9ea2e854c3baba9fb838d916be7fb4b5be332e6c92d907d4 v1.9.3.t sha256 5ebaa6e0dbd7fd1863f70d2bc71dc8a94e195c3339c17e3cac4560c9ec5747f8 v2.1.1.tar.gz sha256 ec5473e51fa28f29af323473fc484f742dc7df23d06d8ba9f217f13382893a71 v2.2.0.tar.gz sha256 3212bad60d945c1169b27da03959f36d92d1d8964645c701a5a82a89118e96d1 v2.2.1.tar.gz -sha256 5a0d42e03d15e32c5c54a147da5ef1b8928ec00982ac9e3f1edc82c5e614b6d2 v3.1.2.tar.gz diff --git a/deploy/iso/minikube-iso/package/podman/podman.mk b/deploy/iso/minikube-iso/package/podman/podman.mk index bef3e814fb64..a2170ba39534 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.mk +++ b/deploy/iso/minikube-iso/package/podman/podman.mk @@ -1,5 +1,5 @@ -PODMAN_VERSION = v3.1.2 -PODMAN_COMMIT = 51b8ddbc22cf5b10dd76dd9243924aa66ad7db39 +PODMAN_VERSION = v2.2.1 +PODMAN_COMMIT = a0d478edea7f775b7ce32f8eb1a01e75374486cb PODMAN_SITE = https://github.com/containers/podman/archive PODMAN_SOURCE = $(PODMAN_VERSION).tar.gz PODMAN_LICENSE = Apache-2.0 @@ -47,11 +47,8 @@ endef define PODMAN_INSTALL_TARGET_CMDS $(INSTALL) -Dm755 $(@D)/bin/podman $(TARGET_DIR)/usr/bin/podman - # Don't use kubernetes /etc/cni, but use podman /etc/containers - $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/containers/ - $(INSTALL) -m 644 $(PODMAN_PKGDIR)/containers.conf $(TARGET_DIR)/etc/containers/containers.conf - $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/containers/net.d/ - $(INSTALL) -m 644 $(@D)/cni/87-podman-bridge.conflist $(TARGET_DIR)/etc/containers/net.d/87-podman-bridge.conflist + $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/cni/net.d/ + $(INSTALL) -m 644 $(@D)/cni/87-podman-bridge.conflist $(TARGET_DIR)/etc/cni/net.d/87-podman-bridge.conflist endef define PODMAN_INSTALL_INIT_SYSTEMD From 33d3c75f1397661c628e2b375dac0a5140b4de5f Mon Sep 17 00:00:00 2001 From: Peixuan Ding Date: Mon, 21 Jun 2021 12:27:51 -0400 Subject: [PATCH 145/153] Fix typo and update details --- enhancements/proposed/20210618-tips/tips.md | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/enhancements/proposed/20210618-tips/tips.md b/enhancements/proposed/20210618-tips/tips.md index 5abb6f3b8098..a42d21c59bf2 100644 --- a/enhancements/proposed/20210618-tips/tips.md +++ b/enhancements/proposed/20210618-tips/tips.md @@ -69,18 +69,8 @@ The current `out.Boxed` has a hard-coded style (red). I propose to add another ` output with customized style: ```go -type BoxConfig struct { - // box.Config is the config struct of box-cli-maker - box.Config - // Title is a text that shows as a header of the box - Title string - // Icon is the optional emoji we want to show as a prefix for the title - Icon style.Enum -} - // BoxedWithConfig writes a templated message in a box with customized style config to stdout -func BoxedWithConfig(cfg BoxConfig, format string, a ...V) { - boxedCommon(String, cfg, format, a...) +func BoxedWithConfig(cfg box.Config, st style.Enum, title string, format string, a ...V) { } ``` @@ -207,9 +197,9 @@ I plan to open at least 4 PRs: ``` ``` - On the docs side we should both questions and answers. On the CLI side + On the docs side we can show both questions and answers. On the CLI side we can either show both questions and answers, or just show the answers - to make it more compact + to make it more compact. ![Screenshot from 2021-06-18 01-25-54](https://user-images.githubusercontent.com/1311594/122510785-2c689580-cfd4-11eb-9fd0-0a0ff344e3cc.png) From caed7715a1ad89c14e028097ae3f33d35b65f8ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 18:25:50 +0000 Subject: [PATCH 146/153] Bump github.com/spf13/viper from 1.7.1 to 1.8.0 Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.7.1 to 1.8.0. - [Release notes](https://github.com/spf13/viper/releases) - [Commits](https://github.com/spf13/viper/compare/v1.7.1...v1.8.0) --- updated-dependencies: - dependency-name: github.com/spf13/viper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 72a311e54608..0c043f984820 100644 --- a/go.mod +++ b/go.mod @@ -71,7 +71,7 @@ require ( github.com/shirou/gopsutil/v3 v3.21.5 github.com/spf13/cobra v1.1.3 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.7.1 + github.com/spf13/viper v1.8.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 diff --git a/go.sum b/go.sum index de7f56d87edb..a97d699e7137 100644 --- a/go.sum +++ b/go.sum @@ -67,7 +67,6 @@ github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocm github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Delta456/box-cli-maker/v2 v2.2.1 h1:uTcuvT6Ty+LBHuRUdFrJBpqP9RhtLxI5+5ZpKYAUuVw= @@ -125,6 +124,7 @@ github.com/alonyb/spinner v1.12.7 h1:FflTMA9I2xRd8OQ5swyZY6Q1DFeaicA/bWo6/oM82a8 github.com/alonyb/spinner v1.12.7/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= 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= @@ -149,6 +149,7 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= @@ -270,6 +271,7 @@ github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -422,6 +424,7 @@ github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblf github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -550,6 +553,7 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 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/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -627,8 +631,9 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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= @@ -670,6 +675,7 @@ github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -699,8 +705,9 @@ github.com/machine-drivers/docker-machine-driver-vmware v0.1.3/go.mod h1:p2hY99U github.com/machine-drivers/machine v0.7.1-0.20210306082426-fcb2ad5bcb17 h1:fQoDTuCuJ30R+D6TSB9SALB+J3jUMa8ID8YPfmSDA20= github.com/machine-drivers/machine v0.7.1-0.20210306082426-fcb2ad5bcb17/go.mod h1:79Uwa2hGd5S39LDJt58s8JZcIhGEK6pkq9bsuTbFWbk= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -754,8 +761,9 @@ github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUb github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= 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 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= 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/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= @@ -842,8 +850,9 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= 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 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +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/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= @@ -859,6 +868,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80 h1:DQFOykp5w+HOykOMzd2yOX5P6ty58Ggiu2rthHgcNQg= github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 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= @@ -904,6 +914,7 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= @@ -944,10 +955,12 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 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= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +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/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= @@ -965,8 +978,8 @@ 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.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.8.0 h1:QRwDgoG8xX+kp69di68D+YYTCWfYEckbZRfUlEIAal0= +github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= 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= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1039,6 +1052,9 @@ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -1062,12 +1078,15 @@ go.opentelemetry.io/otel/sdk v0.16.0/go.mod h1:Jb0B4wrxerxtBeapvstmAZvJGQmvah4dH go.opentelemetry.io/otel/trace v0.17.0 h1:SBOj64/GAOyWzs5F680yW1ITIfJkm6cJWL2YAvuL9xY= go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f h1:hXVePvSFG7tPGX4Pwk1d10ePFfoTCc0QmISfpKOHsS8= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= @@ -1087,6 +1106,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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-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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1211,6 +1231,7 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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 h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -1447,6 +1468,7 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 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 h1:RDAPWfNFY06dffEXfn7hZF5Fr1ZbnChzfQZAPyBd1+I= @@ -1485,6 +1507,7 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -1530,6 +1553,7 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= @@ -1571,8 +1595,9 @@ gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= 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 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= 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/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= @@ -1586,6 +1611,7 @@ gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1593,8 +1619,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= From dae5d1efb13a0e9a41c082fc13ba2feb3e1e5a7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 19:18:33 +0000 Subject: [PATCH 147/153] Bump github.com/hashicorp/go-getter from 1.5.2 to 1.5.4 Bumps [github.com/hashicorp/go-getter](https://github.com/hashicorp/go-getter) from 1.5.2 to 1.5.4. - [Release notes](https://github.com/hashicorp/go-getter/releases) - [Changelog](https://github.com/hashicorp/go-getter/blob/main/.goreleaser.yml) - [Commits](https://github.com/hashicorp/go-getter/compare/v1.5.2...v1.5.4) --- updated-dependencies: - dependency-name: github.com/hashicorp/go-getter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 63 +++++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index 72a311e54608..f3c3500fdb62 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( github.com/google/go-github/v32 v32.1.0 github.com/google/slowjam v0.0.0-20200530021616-df27e642fe7b github.com/google/uuid v1.2.0 - github.com/hashicorp/go-getter v1.5.2 + github.com/hashicorp/go-getter v1.5.4 github.com/hashicorp/go-retryablehttp v0.7.0 github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect @@ -71,7 +71,7 @@ require ( github.com/shirou/gopsutil/v3 v3.21.5 github.com/spf13/cobra v1.1.3 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.7.1 + github.com/spf13/viper v1.8.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 diff --git a/go.sum b/go.sum index de7f56d87edb..b1b3e0bffb19 100644 --- a/go.sum +++ b/go.sum @@ -67,7 +67,6 @@ github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocm github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Delta456/box-cli-maker/v2 v2.2.1 h1:uTcuvT6Ty+LBHuRUdFrJBpqP9RhtLxI5+5ZpKYAUuVw= @@ -125,6 +124,7 @@ github.com/alonyb/spinner v1.12.7 h1:FflTMA9I2xRd8OQ5swyZY6Q1DFeaicA/bWo6/oM82a8 github.com/alonyb/spinner v1.12.7/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= 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= @@ -149,6 +149,7 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= @@ -270,6 +271,7 @@ github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -422,6 +424,7 @@ github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblf github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -550,15 +553,16 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 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/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= 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.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-getter v1.5.2 h1:XDo8LiAcDisiqZdv0TKgz+HtX3WN7zA2JD1R1tjsabE= -github.com/hashicorp/go-getter v1.5.2/go.mod h1:orNH3BTYLu/fIxGIdLjLoAJHWMDQ/UKQr5O4m3iBuoo= +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.4 h1:/A0xlardcuhx8SEe1rh1371xV7Yi4j3xeluu53VXeyg= +github.com/hashicorp/go-getter v1.5.4/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -627,8 +631,9 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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= @@ -670,6 +675,7 @@ github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -699,8 +705,9 @@ github.com/machine-drivers/docker-machine-driver-vmware v0.1.3/go.mod h1:p2hY99U github.com/machine-drivers/machine v0.7.1-0.20210306082426-fcb2ad5bcb17 h1:fQoDTuCuJ30R+D6TSB9SALB+J3jUMa8ID8YPfmSDA20= github.com/machine-drivers/machine v0.7.1-0.20210306082426-fcb2ad5bcb17/go.mod h1:79Uwa2hGd5S39LDJt58s8JZcIhGEK6pkq9bsuTbFWbk= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -754,8 +761,9 @@ github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUb github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= 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 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= 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/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= @@ -842,8 +850,9 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= 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 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +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/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= @@ -859,6 +868,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80 h1:DQFOykp5w+HOykOMzd2yOX5P6ty58Ggiu2rthHgcNQg= github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 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= @@ -904,6 +914,7 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= @@ -944,10 +955,12 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 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= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +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/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= @@ -965,8 +978,8 @@ 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.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.8.0 h1:QRwDgoG8xX+kp69di68D+YYTCWfYEckbZRfUlEIAal0= +github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= 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= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1039,6 +1052,9 @@ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -1062,12 +1078,15 @@ go.opentelemetry.io/otel/sdk v0.16.0/go.mod h1:Jb0B4wrxerxtBeapvstmAZvJGQmvah4dH go.opentelemetry.io/otel/trace v0.17.0 h1:SBOj64/GAOyWzs5F680yW1ITIfJkm6cJWL2YAvuL9xY= go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f h1:hXVePvSFG7tPGX4Pwk1d10ePFfoTCc0QmISfpKOHsS8= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= @@ -1087,6 +1106,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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-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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1211,6 +1231,7 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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 h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -1447,6 +1468,7 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 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 h1:RDAPWfNFY06dffEXfn7hZF5Fr1ZbnChzfQZAPyBd1+I= @@ -1485,6 +1507,7 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -1530,6 +1553,7 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= @@ -1571,8 +1595,9 @@ gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= 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 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= 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/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= @@ -1586,6 +1611,7 @@ gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1593,8 +1619,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= From f60117a2c4841955d1249788fc4cb0752e9e37d7 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 21 Jun 2021 13:52:21 -0700 Subject: [PATCH 148/153] add `How do I use minikube in a script` section --- site/content/en/docs/tutorials/user_flag.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/site/content/en/docs/tutorials/user_flag.md b/site/content/en/docs/tutorials/user_flag.md index 1db7833a008b..55e8ee475280 100644 --- a/site/content/en/docs/tutorials/user_flag.md +++ b/site/content/en/docs/tutorials/user_flag.md @@ -41,10 +41,16 @@ Here you can see that passing `--user=mary` overwrote the OS user with `mary` as ## Example use case -A good use case for the `--user` flag is if you have an application that starts and stops minikube clusters. -Assume the application will use an exsiting cluster if available, otherwise, it will start a new one. -The problem comes when the application is finished using the cluster, you only want to stop the running cluster if the application started the cluster, not if it was already existing. +- Embedded use of minikube by multiple users (IDEs, Plugins, etc.) +- A machine shared by multiple users using the same home folder -This is where the user flag comes into play. -If the application was configured to pass a user flag on minikube commands (ex. `--user=app123`) then you could check to see what user executed the last `start` command looking at the audit log. -If the last user was `app123` you're safe to stop the cluster, otherwise leave it running. +## How do I use minikube in a script? + +If you are using minikube in a script or plugin it is recommeneded to add `--user=your_script_name` to all operations. + +Example: +``` +minikube start --user=plugin_name +minikube profile list --user=plugin_name +minikube stop --user=plugin_name +``` From 281fbef94faefeb26496c73b3f8caf96f04dbcd7 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Mon, 21 Jun 2021 14:21:43 -0700 Subject: [PATCH 149/153] let windows users user the LC_ALL env var to set locale --- pkg/minikube/translate/translate.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pkg/minikube/translate/translate.go b/pkg/minikube/translate/translate.go index 2605870cd5da..d0c5fbd95675 100644 --- a/pkg/minikube/translate/translate.go +++ b/pkg/minikube/translate/translate.go @@ -19,6 +19,8 @@ package translate import ( "encoding/json" "fmt" + "os" + "runtime" "strings" "github.com/cloudfoundry-attic/jibber_jabber" @@ -60,10 +62,20 @@ func T(s string) string { // DetermineLocale finds the system locale and sets the preferred language for output appropriately. func DetermineLocale() { - locale, err := jibber_jabber.DetectIETF() - if err != nil { - klog.V(1).Infof("Getting system locale failed: %v", err) - locale = "" + var locale string + // Allow windows users to overload the same env vars as unix users + if runtime.GOOS == "windows" { + if os.Getenv("LC_ALL") != "" { + locale = os.Getenv("LC_ALL") + } + } + if locale == "" { + var err error + locale, err = jibber_jabber.DetectIETF() + if err != nil { + klog.V(1).Infof("Getting system locale failed: %v", err) + locale = "" + } } SetPreferredLanguage(locale) From 867ad61f7c751be5825e5fa28ab393e36b998758 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Mon, 21 Jun 2021 15:29:56 -0700 Subject: [PATCH 150/153] make it simpler --- pkg/minikube/translate/translate.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/minikube/translate/translate.go b/pkg/minikube/translate/translate.go index d0c5fbd95675..48e2ab9de37e 100644 --- a/pkg/minikube/translate/translate.go +++ b/pkg/minikube/translate/translate.go @@ -65,9 +65,7 @@ func DetermineLocale() { var locale string // Allow windows users to overload the same env vars as unix users if runtime.GOOS == "windows" { - if os.Getenv("LC_ALL") != "" { - locale = os.Getenv("LC_ALL") - } + locale = os.Getenv("LC_ALL") } if locale == "" { var err error From 654a963b2f62946ff1f327fa085794a1c15886bc Mon Sep 17 00:00:00 2001 From: Ilya Zuyev Date: Mon, 21 Jun 2021 21:49:28 -0700 Subject: [PATCH 151/153] fix error processing --- pkg/minikube/sysinit/systemd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/sysinit/systemd.go b/pkg/minikube/sysinit/systemd.go index bad7a1d6d33c..16970d2ebb20 100644 --- a/pkg/minikube/sysinit/systemd.go +++ b/pkg/minikube/sysinit/systemd.go @@ -129,7 +129,7 @@ func (s *Systemd) ForceStop(svc string) error { if err == nil { return nil } - if strings.Contains(rr.Output(), fmt.Sprintf("Unit %s.service not loaded", svc)) { + if strings.Contains(rr.Output(), fmt.Sprintf("Unit %s not loaded", svc)) { // already stopped return nil } From f4f7a573b6465ad73006c175a04541adfd5ecdab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Tue, 22 Jun 2021 08:03:30 +0200 Subject: [PATCH 152/153] Upgrade docker go module from 19.03 to 20.10 v17.12.0-ce-rc1.0.20210128214336-420b1d36250f == v19.03.15 Drop backported fix for building on Windows, already included --- go.mod | 4 ++-- go.sum | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index f3c3500fdb62..2793ccff1fe3 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect github.com/docker/cli v0.0.0-20200303162255-7d407207c304 // indirect - github.com/docker/docker v17.12.0-ce-rc1.0.20210128214336-420b1d36250f+incompatible + github.com/docker/docker v20.10.7+incompatible github.com/docker/go-units v0.4.0 github.com/docker/machine v0.16.2 github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f @@ -57,6 +57,7 @@ require ( github.com/mattn/go-isatty v0.0.13 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 github.com/olekukonko/tablewriter v0.0.5 github.com/opencontainers/go-digest v1.0.0 github.com/otiai10/copy v1.6.0 @@ -104,7 +105,6 @@ require ( 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 - github.com/docker/docker => github.com/afbjorklund/moby v0.0.0-20210308214533-2fa72faf0e8b github.com/docker/machine => github.com/machine-drivers/machine v0.7.1-0.20210306082426-fcb2ad5bcb17 github.com/google/go-containerregistry => github.com/afbjorklund/go-containerregistry v0.4.1-0.20210321165649-761f6f9626b1 github.com/samalba/dockerclient => github.com/sayboras/dockerclient v1.0.0 diff --git a/go.sum b/go.sum index b1b3e0bffb19..58e3eae1a89c 100644 --- a/go.sum +++ b/go.sum @@ -110,8 +110,6 @@ github.com/VividCortex/godaemon v0.0.0-20201030160542-15e3f4925a21 h1:Pgxfz/g+Xy github.com/VividCortex/godaemon v0.0.0-20201030160542-15e3f4925a21/go.mod h1:Y8CJ3IwPIAkMhv/rRUWIlczaeqd9ty9yrl+nc2AbaL4= github.com/afbjorklund/go-containerregistry v0.4.1-0.20210321165649-761f6f9626b1 h1:AI8EIk8occ3pruhaTpkaQxQGlC1dHx3J9hAtg7t+FLI= github.com/afbjorklund/go-containerregistry v0.4.1-0.20210321165649-761f6f9626b1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= -github.com/afbjorklund/moby v0.0.0-20210308214533-2fa72faf0e8b h1:wmyy8gOOzYzMD6SfMs44yCPoOWAAHcjxCio/zQjOlDU= -github.com/afbjorklund/moby v0.0.0-20210308214533-2fa72faf0e8b/go.mod h1:qXUBi22bjTfxOV8XyOI/W1PklPSinepyWoJ6eYSLwwo= 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= @@ -300,6 +298,12 @@ github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TT github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v17.12.0-ce-rc1.0.20181225093023-5ddb1d410a8b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v17.12.0-ce-rc1.0.20190115220918-5ec31380a5d3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible h1:Z6O9Nhsjv+ayUEeI1IojKbYcsGdgYSNqxe1s2MYzUhQ= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -768,7 +772,10 @@ github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQ 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= github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM= +github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd h1:aY7OQNf2XqY/JQ6qREWamhI/81os/agb2BAGpcx5yWI= From 50f2369b6443b3b2356ec5ca534a70448d2a190d Mon Sep 17 00:00:00 2001 From: Jeff MAURY Date: Tue, 22 Jun 2021 12:37:30 +0200 Subject: [PATCH 153/153] Improve French locale Signed-off-by: Jeff MAURY --- translations/fr.json | 1458 +++++++++++++++++++++--------------------- 1 file changed, 729 insertions(+), 729 deletions(-) diff --git a/translations/fr.json b/translations/fr.json index 096e9d24c98d..31ccde574898 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -7,20 +7,20 @@ "'none' driver does not support 'minikube mount' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube mount'", "'none' driver does not support 'minikube podman-env' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube podman-env'", "'none' driver does not support 'minikube ssh' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube ssh'", - "'none' driver does not support 'minikube ssh-host' command": "", + "'none' driver does not support 'minikube ssh-host' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube ssh-host'", "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- Supprimer et recréer le cluster de minikube\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", "- Docs https://docs.docker.com/docker-for-mac/#resources": "- Documentation https://docs.docker.com/docker-for-mac/#resources", "- Docs https://docs.docker.com/docker-for-windows/#resources": "- Docs https://docs.docker.com/docker-for-windows/#resources", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- Assurez-vous que votre démon {{.driver_name}} a accès à suffisamment de ressources CPU/mémoire.", "- Prune unused {{.driver_name}} images, volumes and abandoned containers.": "- Nettoyer les images {{.driver_name}} non utilisées, les volumes et les conteneurs abandonnés.", - "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Nettoyer les images {{.driver_name}} non utilisées, les volumes, les réseaux et les conteneurs abandonnées.", "- Restart your {{.driver_name}} service": "- Redémarrer votre service {{.driver_name}}", "- {{.logPath}}": "", - "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", + "--kvm-numa-count range is 1-8": "la tranche de --kvm-numa-count est 1 à 8", + "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "le drapeau --network est valide uniquement avec les pilotes docker/podman et KVM, il va être ignoré", + "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "\u003ctarget file absolute path\u003e doit être un chemin absolu. Les chemins relatifs ne sont pas autorisés (exemple: \"/home/docker/copied.txt\")", "==\u003e Audit \u003c==": "", - "==\u003e Last Start \u003c==": "", + "==\u003e Last Start \u003c==": "==\u003e Dernier démarrage \u003c==", "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "Un VPN ou un pare-feu interfère avec l'accès HTTP à la machine virtuelle minikube. Vous pouvez également essayer un autre pilote de machine virtuelle : https://minikube.sigs.k8s.io/docs/start/", "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "Un pare-feu empêche le Docker de la machine virtuelle minikube d'atteindre le dépôt d'images. Vous devriez peut-être sélectionner --image-repository, ou utiliser un proxy.", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "Un pare-feu interfère avec la capacité de minikube à executer des requêtes HTTPS sortantes. Vous devriez peut-être modifier la valeur de la variable d'environnement HTTPS_PROXY.", @@ -32,11 +32,11 @@ "A set of key=value pairs that describe configuration that may be passed to different components.\nThe key should be '.' separated, and the first part before the dot is the component to apply the configuration to.\nValid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nValid kubeadm parameters:": "Ensemble de paires clé = valeur qui décrivent la configuration pouvant être transmise à différents composants.\nLa clé doit être séparée par le caractère \".\", la première partie placée avant le point étant le composant auquel la configuration est appliquée.\nVoici la liste des composants valides : apiserver, controller-manager, etcd, kubeadm, kubelet, proxy et scheduler.\nParamètres valides pour le composant kubeadm :", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Ensemble de paires clé = valeur qui décrivent l'entrée de configuration pour des fonctionnalités alpha ou expérimentales.", "Access the Kubernetes dashboard running within the minikube cluster": "Accéder au tableau de bord Kubernetes exécuté dans le cluster de minikube", - "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", - "Add SSH identity key to SSH authentication agent": "", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Accéder aux ports inférieurs à 1024 peut échouer sur Windows avec les clients OpenSSH antérieurs à v8.1. Pour plus d'information, voir: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "Ajouter la clé d'identité SSH à l'agent d'authentication SSH", "Add an image to local cache.": "Ajouter une image au cache local.", - "Add host key to SSH known_hosts file": "", - "Add image to cache for all running minikube clusters": "", + "Add host key to SSH known_hosts file": "Ajouter la clé hôte au fichier SSH known_hosts", + "Add image to cache for all running minikube clusters": "Ajouter l'image au cache pour tous les cluster minikube en fonctionnement", "Add machine IP to NO_PROXY environment variable": "Ajouter l'IP de la machine à la variable d'environnement NO_PROXY", "Add, delete, or push a local image into minikube": "Ajouter, supprimer ou pousser une image locale dans minikube", "Add, remove, or list additional nodes": "Ajouter, supprimer ou lister des nœuds supplémentaires", @@ -46,19 +46,19 @@ "Adds a node to the given cluster config, and starts it.": "Ajoute un nœud à la configuration du cluster et démarre le cluster.", "Adds a node to the given cluster.": "Ajoute un nœud au cluster.", "Advanced Commands:": "Commandes avancées :", - "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Après que le module est activé, veuiller exécuter \"minikube tunnel\" et vos ressources ingress seront disponibles à \"127.0.0.1\"", "Aliases": "Alias", - "All existing scheduled stops cancelled": "", - "Allow user prompts for more information": "Autoriser les utilisateur à saisir plus d'informations", + "All existing scheduled stops cancelled": "Tous les arrêts programmés existants annulés", + "Allow user prompts for more information": "Autoriser les utilisateurs à saisir plus d'informations", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Autre dépôt d'images d'où extraire des images Docker. Il peut être utilisé en cas d'accès limité à gcr.io. Définissez-le sur \\\"auto\\\" pour permettre à minikube de choisir la valeur à votre place. Pour les utilisateurs situés en Chine continentale, vous pouvez utiliser des miroirs gcr.io locaux tels que registry.cn-hangzhou.aliyuncs.com/google_containers.", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Quantité de mémoire RAM allouée à la VM minikube (format : \u003cnombre\u003e[\u003cunité\u003e], où \"unité\" = b, k, m ou g).", "Amount of RAM to allocate to Kubernetes (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Quantité de mémoire RAM à allouer à Kubernetes (format: \u003cnombre\u003e[\u003cunité\u003e], où unité = b, k, m ou g).", "Amount of time to wait for a service in seconds": "Temps d'attente pour un service en secondes", "Amount of time to wait for service in seconds": "Temps d'attente pour un service en secondes", "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Un autre hyperviseur, tel que VirtualBox, est en conflit avec KVM. Veuillez arrêter l'autre hyperviseur ou utiliser --driver pour y basculer.", - "Another minikube instance is downloading dependencies... ": "", + "Another minikube instance is downloading dependencies... ": "Une autre instance minikube télécharge des dépendances", "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Un autre programme utilise un fichier requis par minikube. Si vous utilisez Hyper-V, essayez d'arrêter la machine virtuelle minikube à partir du gestionnaire Hyper-V", - "At least needs control plane nodes to enable addon": "", + "At least needs control plane nodes to enable addon": "Nécessite au moins des nœuds de plan de contrôle pour activer le module", "Automatically selected the {{.driver}} driver": "Choix automatique du pilote {{.driver}}", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Choix automatique du pilote {{.driver}}. Autres choix: {{.alternatives}}", "Available Commands": "Commandes disponibles", @@ -67,835 +67,835 @@ "Bind Address: {{.Address}}": "Adresse de liaison : {{.Address}}", "Booting up control plane ...": "Démarrage du plan de contrôle ...", "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", - "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.": "", - "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", - "Cache image from docker daemon": "", - "Cache image from remote registry": "", - "Cannot find directory {{.path}} for copy": "", - "Cannot find directory {{.path}} for mount": "", - "Cannot use both --output and --format options": "", - "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": "", - "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", - "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", - "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", - "Choose a smaller value for --memory, such as 2000": "", - "ChromeOS is missing the kernel support necessary for running Kubernetes": "", - "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", - "Configuration and Management Commands:": "", - "Configure a default route on this Linux host, or use another --driver that does not require it": "", - "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", - "Configure environment to use minikube's Docker daemon": "", - "Configure environment to use minikube's Podman service": "", - "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", + "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.", + "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", + "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", + "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é", + "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "Vérifiez que minikube est en cours d'exécution et que vous avez spécifié le bon espace de noms (indicateur -n) si nécessaire", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "Vérifiez que les indicateur apiserver fournis sont valides et que SELinux est désactivé", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "Vérifiez vos règles de pare-feu pour les interférences et exécutez 'virt-host-validate' pour vérifier les problèmes de configuration KVM. Si vous exécutez minikube dans une machine virtuelle, envisagez d'utiliser --driver=none", + "Choose a smaller value for --memory, such as 2000": "Choisissez une valeur plus petite pour --memory, telle que 2000", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS ne dispose pas de la prise en charge du noyau nécessaire à l'exécution de Kubernetes", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "Le cluster a été créé sans aucun CNI, l'ajout d'un nœud peut provoquer un réseau inopérant.", + "Configuration and Management Commands:": "Commandes de configuration et de gestion :", + "Configure a default route on this Linux host, or use another --driver that does not require it": "Configurez une route par défaut sur cet hôte Linux ou utilisez un autre --driver qui ne l'exige pas", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "Configurez un commutateur réseau externe en suivant la documentation officielle, puis ajoutez `--hyperv-virtual-switch=\u003cswitch-name\u003e` à `minikube start`", + "Configure environment to use minikube's Docker daemon": "Configurer l'environnement pour utiliser le démon Docker de minikube", + "Configure environment to use minikube's Podman service": "Configurer l'environnement pour utiliser le service Podman de minikube", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Configure le module w/ADDON_NAME dans minikube (exemple : minikube addons configure registry-creds). Pour une liste des modules disponibles, utilisez : minikube addons list", "Configuring RBAC rules ...": "Configuration des règles RBAC ...", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Configuration de l'environment pour Kubernetes {{.k8sVersion}} sur {{.runtime}} {{.runtimeVersion}}", - "Configuring local host environment ...": "", - "Configuring {{.name}} (Container Networking Interface) ...": "", - "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", - "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", - "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.": "", - "Continuously listing/getting the status with optional interval duration.": "", - "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", - "Could not determine a Google Cloud project, which might be ok.": "", - "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.": "", - "Could not process error from failed deletion": "", - "Could not process errors from failed deletion": "", - "Could not resolve IP address": "", + "Configuring local host environment ...": "Configuration de l'environnement de l'hôte local...", + "Configuring {{.name}} (Container Networking Interface) ...": "Configuration de {{.name}} (Container Networking Interface)...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "Confirmez que vous disposez d'une connexion Internet fonctionnelle et que votre VM n'est pas à court de ressources en utilisant : 'minikube logs'", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "Confirmez que vous avez fourni la valeur correcte à --hyperv-virtual-switch à l'aide de la commande 'Get-VMSwitch'", + "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.", + "Continuously listing/getting the status with optional interval duration.": "Répertorier/obtenir le statut en continu avec une durée d'intervalle facultative.", + "Copy the specified file into minikube": "Copiez le fichier spécifié dans minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "Copiez le fichier spécifié dans minikube, il sera enregistré au chemin \u003ctarget file absolute path\u003e dans votre minikube.\\nExemple de commande : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n", + "Could not determine a Google Cloud project, which might be ok.": "Impossible de déterminer un projet Google Cloud, ce qui peut convenir.", + "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.": "Impossible de trouver les identifiants GCP. Exécutez `gcloud auth application-default login` ou définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS vers le chemin de votre fichier d'informations d'identification.", + "Could not process error from failed deletion": "Impossible de traiter l'erreur due à l'échec de la suppression", + "Could not process errors from failed deletion": "Impossible de traiter les erreurs dues à l'échec de la suppression", + "Could not resolve IP address": "Impossible de résoudre l'adresse IP", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Code pays du miroir d'images à utiliser. Laissez ce paramètre vide pour utiliser le miroir international. Pour les utilisateurs situés en Chine continentale, définissez sa valeur sur \"cn\".", "Creating mount {{.name}} ...": "Création de l'installation {{.name}}…", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "Création de {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}Mo) ...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Création de {{.machine_type}} {{.driver_name}} (CPUs={{.number_of_cpus}}, Mémoire={{.memory_size}}MB, Disque={{.disk_size}}MB)...", - "Current context is \"{{.context}}\"": "", - "DEPRECATED, use `driver` instead.": "", - "DEPRECATED: Replaced by --cni=bridge": "", - "Default group id used for the mount": "", - "Default user id used for the mount": "", - "Delete an image from the local cache.": "", - "Deletes a local Kubernetes cluster": "", - "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", + "Current context is \"{{.context}}\"": "Le contexte courant est \"{{.context}}\"", + "DEPRECATED, use `driver` instead.": "DÉPRÉCIÉ, utilisez plutôt `driver`.", + "DEPRECATED: Replaced by --cni=bridge": "DÉPRÉCIÉ : remplacé par --cni=bridge", + "Default group id used for the mount": "ID de groupe par défaut utilisé pour le montage", + "Default user id used for the mount": "ID utilisateur par défaut utilisé pour le montage", + "Delete an image from the local cache.": "Supprimez une image du cache local.", + "Deletes a local Kubernetes cluster": "Supprime un cluster Kubernetes local", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Supprime le cluster Kubernetes local. Cette commande supprime la VM ainsi que tous les fichiers associés.", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Supprime le cluster Kubernetes local. Cette commande supprime la VM ainsi que tous les fichiers associés.", - "Deletes a node from a cluster.": "", + "Deletes a node from a cluster.": "Supprime un nœud d'un cluster.", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Suppression de \"{{.profile_name}}\" dans {{.driver_name}}...", - "Deleting container \"{{.name}}\" ...": "", - "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", + "Deleting container \"{{.name}}\" ...": "Suppression du conteneur \"{{.name}}\" ...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "Suppression du cluster existant {{.name}} avec un pilote différent {{.driver_name}} en raison de l'indicateur --delete-on-failure défini par l'utilisateur.", "Deleting node {{.name}} from cluster {{.cluster}}": "Suppression de noeuds {{.name}} de cluster {{.cluster}}", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Désactive la vérification de la disponibilité de la virtualisation du matériel avant le démarrage de la VM (pilote virtualbox uniquement).", - "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", - "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "Désactivez la mémoire dynamique dans votre gestionnaire de machine virtuelle ou transmettez une valeur --memory plus grande", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Désactive le module w/ADDON_NAME dans minikube (exemple : minikube addons disable dashboard). Pour une liste des addons disponibles, utilisez : minikube addons list", "Disables the filesystem mounts provided by the hypervisors": "Désactive les installations de systèmes de fichiers fournies par les hyperviseurs.", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Taille de disque allouée à la VM minikube (format : \u003cnombre\u003e[\u003cunité\u003e], où \"unité\" = b, k, m ou g)", - "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "", - "Display dashboard URL instead of opening a browser": "", - "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", - "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", - "Display values currently set in the minikube config file": "", - "Display values currently set in the minikube config file.": "", - "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", - "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", - "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "", - "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "", - "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", - "Docs have been saved at - {{.path}}": "", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Taille du disque alloué à la VM minikube (format : \u003cnombre\u003e[\u003cunité\u003e], où unité = b, k, m ou g).", + "Display dashboard URL instead of opening a browser": "Afficher l'URL du tableau de bord au lieu d'ouvrir un navigateur", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Afficher l'URL des modules Kubernetes dans la CLI au lieu de l'ouvrir dans le navigateur par défaut", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Afficher l'URL du service Kubernetes dans la CLI au lieu de l'ouvrir dans le navigateur par défaut", + "Display values currently set in the minikube config file": "Afficher les valeurs actuellement définies dans le fichier de configuration minikube", + "Display values currently set in the minikube config file.": "Afficher les valeurs actuellement définies dans le fichier de configuration minikube", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop a moins de 2 processeurs configurés, mais Kubernetes nécessite au moins 2 pour être disponible", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop est configuré pour les conteneurs Windows, mais les conteneurs Linux sont requis pour minikube", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop n'a que {{.size}} Mio disponibles, moins que les {{.req}} Mio requis pour Kubernetes", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop n'a que {{.size}}Mio disponibles, vous pouvez rencontrer des échecs de déploiement d'applications.", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Le conteneur Docker s'est fermé prématurément après sa création, envisagez d'enquêter sur les performances/l'intégrité de Docker.", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker a moins de 2 processeurs disponibles, mais Kubernetes a besoin d'au moins 2 pour être disponible", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "Docker à l'intérieur de la VM n'est pas disponible. Essayez d'exécuter « minikube delete » pour réinitialiser la machine virtuelle.", + "Docs have been saved at - {{.path}}": "Les documents ont été enregistrés à - {{.path}}", "Documentation: {{.url}}": "", "Done! kubectl is now configured to use \"{{.name}}\"": "Terminé ! kubectl est maintenant configuré pour utiliser \"{{.name}}\".", "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Terminé ! kubectl est maintenant configuré pour utiliser \"{{.name}}\" cluster et espace de noms \"{{.ns}}\" par défaut.", "Download complete!": "Téléchargement terminé !", - "Downloading Kubernetes {{.version}} preload ...": "", - "Downloading VM boot image ...": "", - "Downloading driver {{.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": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", - "ERROR creating `registry-creds-acr` secret": "", - "ERROR creating `registry-creds-dpr` secret": "", - "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", - "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", - "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", - "Enable addons. see `minikube addons list` for a list of valid addon names.": "", + "Downloading Kubernetes {{.version}} preload ...": "Téléchargement du préchargement de Kubernetes {{.version}}...", + "Downloading VM boot image ...": "Téléchargement de l'image de démarrage de la VM...", + "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.", + "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}}", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "ERREUR lors de la création du secret `registry-creds-gcr` : {{.error}}", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "Soit systemctl n'est pas installé, soit Docker ne fonctionne plus. Exécutez 'sudo systemctl start docker' et 'journalctl -u docker'", + "Enable addons. see `minikube addons list` for a list of valid addon names.": "Activer les modules. Voir `minikube addons list` pour une liste de noms de modules valides.", "Enable experimental NVIDIA GPU support in minikube": "Active l'assistance expérimentale du GPU NVIDIA dans minikube.", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Active le résolveur d'hôte pour les requêtes DNS NAT (pilote VirtualBox uniquement).", - "Enable or disable a minikube addon": "", + "Enable or disable a minikube addon": "Activer ou désactiver un module minikube", "Enable proxy for NAT DNS requests (virtualbox driver only)": "Active le proxy pour les requêtes DNS NAT (pilote VirtualBox uniquement).", "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\": "Active le plug-in CNI par défaut (/etc/cni/net.d/k8s.conf). Utilisé en association avec \\\"--network-plugin=cni\\\".", - "Enabled addons: {{.addons}}": "Addons activés: {{.addons}}", - "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "", - "Enabling '{{.name}}' returned an error: {{.error}}": "", - "Enabling addons: {{.addons}}": "Installation des addons: {{.addons}}", - "Enabling dashboard ...": "", - "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "", - "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "", - "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "", - "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "", - "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", - "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "", - "Ensure the tmp directory path is writable to the current user.": "", - "Ensure you have at least 20GB of free disk space.": "", - "Ensure your {{.driver_name}} is running and is healthy.": "", + "Enabled addons: {{.addons}}": "Modules activés: {{.addons}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "Active le module w/ADDON_NAME dans minikube. Pour une liste des modules disponibles, utilisez : minikube addons list", + "Enabling '{{.name}}' returned an error: {{.error}}": "L'activation de '{{.name}}' a renvoyé une erreur : {{.error}}", + "Enabling addons: {{.addons}}": "Installation des modules: {{.addons}}", + "Enabling dashboard ...": "Activation du tableau de bord...", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "Assurez-vous que CRI-O est installé et en fonctionnement : exécutez 'sudo systemctl start crio' et 'journalctl -u crio'. Sinon, utilisez --container-runtime=docker", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "Assurez-vous que Docker est installé et en fonctionnement : exécutez 'sudo systemctl start docker' et 'journalctl -u docker'. Sinon, sélectionnez une autre valeur pour --driver", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "Assurez-vous que le groupe de contrôle 'pids' requis est activé sur votre hôte : grep pids /proc/cgroups", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "Assurez-vous que l'utilisateur répertorié dans /etc/libvirt/qemu.conf a accès à votre répertoire personnel", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "Assurez-vous que vous êtes membre du groupe libvirt approprié (n'oubliez pas de vous reconnecter pour que les modifications du groupe prennent effet !)", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "Assurez-vous que votre valeur pour HTTPS_PROXY pointe vers un proxy HTTPS plutôt qu'un proxy HTTP", + "Ensure the tmp directory path is writable to the current user.": "Assurez-vous que le chemin du répertoire tmp est accessible en écriture à l'utilisateur actuel.", + "Ensure you have at least 20GB of free disk space.": "Assurez-vous d'avoir au moins 20 Go d'espace disque libre.", + "Ensure your {{.driver_name}} is running and is healthy.": "Assurez-vous que votre {{.driver_name}} est en cours d'exécution et en fonctionnement.", "Environment variables to pass to the Docker daemon. (format: key=value)": "Variables d'environment à transmettre au daemon Docker (format : clé = valeur).", - "Environment variables to pass to the build. (format: key=value)": "", + "Environment variables to pass to the build. (format: key=value)": "Variables d'environnement à transmettre au build. (format : clé=valeur)", "Error checking driver version: {{.error}}": "Erreur lors de la vérification de la version du driver : {{.error}}", - "Error code docs have been saved at - {{.path}}": "", - "Error creating minikube directory": "", - "Error creating view template": "", - "Error detecting shell": "", - "Error executing view template": "", - "Error finding port for mount": "", - "Error generating set output": "", - "Error generating unset output": "", - "Error getting cluster bootstrapper": "", - "Error getting cluster config": "", - "Error getting host": "", - "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", - "Error getting primary control plane": "", - "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", - "Error getting ssh client": "", - "Error getting the host IP address to use from within the VM": "", - "Error killing mount process": "", - "Error loading profile config: {{.error}}": "", + "Error code docs have been saved at - {{.path}}": "Les documents de code d'erreur ont été enregistrés à - {{.path}}", + "Error creating minikube directory": "Erreur lors de la création du répertoire minikube", + "Error creating view template": "Erreur lors de la création du modèle de vue", + "Error detecting shell": "Erreur de détection du shell", + "Error executing view template": "Erreur lors de l'exécution du modèle de vue", + "Error finding port for mount": "Erreur lors de la recherche du port pour le montage", + "Error generating set output": "Erreur lors de la génération set output", + "Error generating unset output": "Erreur lors de la génération unset output", + "Error getting cluster bootstrapper": "Erreur lors de l'obtention du programme d'amorçage du cluster", + "Error getting cluster config": "Erreur lors de l'obtention de la configuration du cluster", + "Error getting host": "Erreur lors de l'obtention de l'hôte", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "Erreur lors de l'obtention de la liaison de port pour le pilote '{{.driver_name}} : {{.error}}", + "Error getting primary control plane": "Erreur lors de l'obtention du plan de contrôle principal", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "Erreur lors de l'obtention du service avec l'espace de noms : {{.namespace}} et les étiquettes {{.labelName}} :{{.addonName}} : {{.error}}", + "Error getting ssh client": "Erreur lors de l'obtention du client ssh", + "Error getting the host IP address to use from within the VM": "Erreur lors de l'obtention de l'adresse IP de l'hôte à utiliser depuis la VM", + "Error killing mount process": "Erreur lors de la suppression du processus de montage", + "Error loading profile config: {{.error}}": "Erreur lors du chargement de la configuration du profil : {{.error}}", "Error loading profile {{.name}}: {{.error}}": "Erreur lors du chargement du profil {{.name}} : {{.error}}", - "Error opening service": "", + "Error opening service": "Erreur d'ouverture du service", "Error parsing Driver version: {{.error}}": "Erreur lors de l'analyse de la version du pilote de la VM : {{.error}}", "Error parsing minikube version: {{.error}}": "Erreur lors de l'analyse de la version de minikube : {{.error}}", - "Error parsing {{.name}}={{.value}}, {{.err}}": "", - "Error reading {{.path}}: {{.error}}": "", - "Error starting cluster": "", - "Error starting mount": "", - "Error while setting kubectl current context : {{.error}}": "", - "Error while setting kubectl current context: {{.error}}": "", - "Error with ssh-add": "", - "Error writing mount pid": "", + "Error parsing {{.name}}={{.value}}, {{.err}}": "Erreur lors de l'analyse de {{.name}}={{.value}}, {{.err}}", + "Error reading {{.path}}: {{.error}}": "Erreur de lecture {{.path}} : {{.error}}", + "Error starting cluster": "Erreur lors du démarrage du cluster", + "Error starting mount": "Erreur lors du démarrage du montage", + "Error while setting kubectl current context : {{.error}}": "Erreur lors de la définition du contexte actuel de kubectl : {{.error}}", + "Error while setting kubectl current context: {{.error}}": "Erreur lors de la définition du contexte actuel de kubectl : {{.error}}", + "Error with ssh-add": "Erreur avec ssh-add", + "Error writing mount pid": "Erreur lors de l'écriture du pid de montage", "Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}": "Erreur : Vous avez sélectionné Kubernetes v{{.new}}, mais le cluster existent pour votre profil exécute Kubernetes v{{.old}}. Les rétrogradations non-destructives ne sont pas compatibles. Toutefois, vous pouvez poursuivre le processus en réalisant l'une des trois actions suivantes :\n* Créer à nouveau le cluster en utilisant Kubernetes v{{.new}} – exécutez \"minikube delete {{.profile}}\", puis \"minikube start {{.profile}} --kubernetes-version={{.new}}\".\n* Créer un second cluster avec Kubernetes v{{.new}} – exécutez \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\".\n* Réutiliser le cluster existent avec Kubernetes v{{.old}} ou version ultérieure – exécutez \"minikube start {{.profile}} --kubernetes-version={{.old}}\".", - "Examples": "", - "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "", - "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "", + "Examples": "Exemples", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "L'exécution de \"{{.command}}\" a pris un temps inhabituellement long : {{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "Il manque de nouvelles fonctionnalités sur le disque existant ({{.error}}). Pour mettre à niveau, exécutez 'minikube delete'", "Exiting": "Fermeture…", - "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "", - "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", - "Fail check if container paused": "", - "Failed runtime": "", - "Failed to build image": "", - "Failed to cache and load images": "", - "Failed to cache binaries": "", - "Failed to cache images": "", - "Failed to cache images to tar": "", - "Failed to cache kubectl": "", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Fermeture en raison de {{.fatal_code}} : {{.fatal_msg}}", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "L'adaptateur externe sur lequel un commutateur externe sera créé si aucun commutateur externe n'est trouvé. (pilote hyperv uniquement)", + "Fail check if container paused": "Échec de la vérification si le conteneur est en pause", + "Failed runtime": "Échec de l'exécution", + "Failed to build image": "Échec de la création de l'image", + "Failed to cache and load images": "Échec de la mise en cache et du chargement des images", + "Failed to cache binaries": "Échec de la mise en cache des binaires", + "Failed to cache images": "Échec de la mise en cache des images", + "Failed to cache images to tar": "Échec de la mise en cache des images dans l'archive tar", + "Failed to cache kubectl": "Échec de la mise en cache de kubectl", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Échec de la modification des autorisations pour {{.minikube_dir_path}} : {{.error}}", - "Failed to check main repository and mirrors for images": "", - "Failed to configure metallb IP {{.profile}}": "", - "Failed to create file": "", - "Failed to create runtime": "", - "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", - "Failed to delete cluster {{.name}}.": "", + "Failed to check main repository and mirrors for images": "Échec de la vérification du référentiel principal et des miroirs pour les images", + "Failed to configure metallb IP {{.profile}}": "Échec de la configuration de metallb IP {{.profile}}", + "Failed to create file": "La création du fichier a échoué", + "Failed to create runtime": "Échec de la création de l'environnement d'exécution", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Échec de la suppression du cluster {{.name}}, réessayez quand même.", + "Failed to delete cluster {{.name}}.": "Échec de la suppression du cluster {{.name}}.", "Failed to delete cluster: {{.error}}": "Échec de la suppression du cluster : {{.error}}", "Failed to delete cluster: {{.error}}__1": "Échec de la suppression du cluster : {{.error}}", - "Failed to delete images": "", - "Failed to delete images from config": "", - "Failed to enable container runtime": "", - "Failed to get bootstrapper": "", - "Failed to get command runner": "", - "Failed to get image map": "", - "Failed to get service URL: {{.error}}": "", + "Failed to delete images": "Échec de la suppression des images", + "Failed to delete images from config": "Échec de la suppression des images de la configuration", + "Failed to enable container runtime": "Échec de l'activation de l'environnement d'exécution du conteneur", + "Failed to get bootstrapper": "Échec de l'obtention du programme d'amorçage", + "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 kill mount process: {{.error}}": "Échec de l'arrêt du processus d'installation : {{.error}}", - "Failed to list cached images": "", - "Failed to list images": "", - "Failed to load image": "", - "Failed to persist images": "", - "Failed to pull image": "", - "Failed to reload cached images": "", - "Failed to remove image": "", - "Failed to save config {{.profile}}": "", - "Failed to save dir": "", - "Failed to save stdin": "", - "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "Échec de la définition de NO_PROXY Env. Veuillez utiliser `export NO_PROXY=$NO_PROXY,{{.ip}}.", - "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", - "Failed to setup certs": "", - "Failed to start container runtime": "", - "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", - "Failed to update cluster": "", - "Failed to update config": "", - "Failed to verify '{{.driver_name}} info' will try again ...": "", - "Failed unmount: {{.error}}": "", - "File permissions used for the mount": "", - "Filter to use only VM Drivers": "", - "Flags": "", - "Follow": "", + "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 reload cached images": "Échec du rechargement des images mises en cache", + "Failed to remove image": "Échec de la suppression de l'image", + "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 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}}`.", + "Failed to setup certs": "Échec de la configuration des certificats", + "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 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 ...", + "Failed unmount: {{.error}}": "Échec du démontage : {{.error}}", + "File permissions used for the mount": "Autorisations de fichier utilisées pour le montage", + "Filter to use only VM Drivers": "Filtrer pour n'utiliser que les pilotes VM", + "Flags": "Indicateurs", + "Follow": "Suivre", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "Pour des résultats optimaux, installez kubectl à l'adresse suivante : https://kubernetes.io/docs/tasks/tools/install-kubectl/", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/__1": "Pour des résultats optimaux, installez kubectl à l'adresse suivante : https://kubernetes.io/docs/tasks/tools/install-kubectl/", - "For improved {{.driver}} performance, {{.fix}}": "", - "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", + "For improved {{.driver}} performance, {{.fix}}": "Pour de meilleures performances {{.driver}}, {{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "Pour plus d'informations, voir : https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", "For more information, see:": "Pour en savoir plus, consultez les pages suivantes :", - "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "For more information, see: {{.url}}": "", - "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Pour plus d'informations, voir : https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "Pour plus d'informations, voir : {{.url}}", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "Forcer l'environnement à être configuré pour un shell spécifié : [fish, cmd, powershell, tcsh, bash, zsh], la valeur par défaut est la détection automatique", "Force minikube to perform possibly dangerous operations": "Oblige minikube à réaliser des opérations possiblement dangereuses.", - "Format to print stdout in. Options include: [text,json]": "", - "Found docker, but the docker service isn't running. Try restarting the docker service.": "", - "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", + "Format to print stdout in. Options include: [text,json]": "Format dans lequel imprimer la sortie standard. Les options incluent : [text,json]", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "Docker trouvé, mais le service docker ne fonctionne pas. Essayez de redémarrer le service Docker.", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "Pilote(s) trouvé(s) mais aucun n'était en fonctionnement. Voir ci-dessus pour des suggestions sur la façon de réparer les pilotes installés.", "Found network options:": "Options de réseau trouvées :", - "Found {{.number}} invalid profile(s) ! ": "", - "Generate command completion for a shell": "", - "Generate command completion for bash.": "", - "Generate command completion for fish .": "", - "Generate command completion for zsh.": "", - "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", - "Generate unable to parse memory '{{.memory}}': {{.error}}": "", + "Found {{.number}} invalid profile(s) ! ": "{{.number}} profil(s) invalide(s) trouvé(s) !", + "Generate command completion for a shell": "Générer la complétion de commande pour un shell", + "Generate command completion for bash.": "Générer la complétion de la commande pour bash.", + "Generate command completion for fish .": "Générer la complétion de la commande pour fish.", + "Generate command completion for zsh.": "Générer la complétion de la commande pour zsh.", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "Générer impossible d'analyser la taille du disque '{{.diskSize}}' : {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "Générer impossible d'analyser la mémoire '{{.memory}}' : {{.error}}", "Generating certificates and keys ...": "Génération des certificats et des clés", - "Get or list the current profiles (clusters)": "", - "Gets the logs of the running instance, used for debugging minikube, not user code.": "", - "Gets the status of a local Kubernetes cluster": "", - "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", - "Gets the value of PROPERTY_NAME from the minikube config file": "", - "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", - "Group ID: {{.groupID}}": "", + "Get or list the current profiles (clusters)": "Obtenir ou répertorier les profils actuels (clusters)", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "Obtenir les journaux de l'instance en cours d'exécution, utilisés pour le débogage de minikube, pas le code utilisateur.", + "Gets the status of a local Kubernetes cluster": "Obtient l'état d'un cluster Kubernetes local", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "Obtient le statut d'un cluster Kubernetes local.\n\tLe statut de sortie contient le statut de la VM minikube, du cluster et de Kubernetes encodé sur ses bits dans cet ordre de droite à gauche.\n\tEx : 7 signifiant : 1 (pour minikube NOK) + 2 (pour le cluster NOK) + 4 (pour Kubernetes NOK)", + "Gets the value of PROPERTY_NAME from the minikube config file": "Obtient la valeur de PROPERTY_NAME à partir du fichier de configuration minikube", + "Global Flags": "Indicateurs globaux", + "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "Chaîne de format de modèle Go pour la sortie de la liste de cache. Le format des modèles Go peut être trouvé ici : https://golang.org/pkg/text/template/\nPour la liste des variables accessibles pour le modèle, voir les valeurs de structure ici : https://godoc.org/k8s .io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Go chaîne de format de modèle pour la sortie de la vue de configuration. Le format des modèles Go peut être trouvé ici : https://golang.org/pkg/text/template/\nPour la liste des variables accessibles pour le modèle, voir les valeurs de structure ici : https://godoc.org/k8s .io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "Go chaîne de format de modèle pour la sortie d'état. Le format des modèles Go peut être trouvé ici : https://golang.org/pkg/text/template/\nPour la liste des variables accessibles pour le modèle, consultez les valeurs de structure ici : https://godoc.org/k8s. io/minikube/cmd/minikube/cmd#Status", + "Group ID: {{.groupID}}": "Identifiant du groupe: {{.groupID}}", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Masque la signature de l'hyperviseur de l'invité dans minikube (pilote kvm2 uniquement).", - "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "IP Address to use to expose ports (docker and podman driver only)": "", - "IP address (ssh driver only)": "", - "If present, writes to the provided file instead of stdout.": "", - "If set, automatically updates drivers to the latest version. Defaults to true.": "", - "If set, delete the current cluster if start fails and try again. Defaults to false.": "", - "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", - "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", - "If set, install addons. Defaults to true.": "", - "If set, pause all namespaces": "", - "If set, unpause all namespaces": "", - "If the above advice does not help, please let us know:": "", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "Si la valeur est \"true\", mettez les images Docker en cache pour l'amorceur actuel et chargez-les dans la machine. La valeur est toujours \"false\" avec --vm-driver=none.", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit ne fonctionne pas. Mettez à niveau vers la dernière version d'hyperkit et/ou Docker for Desktop. Alternativement, vous pouvez choisir un autre --driver", + "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Le réseau Hyperkit ne fonctionne pas. Mettez à niveau vers la dernière version d'hyperkit et/ou Docker for Desktop. Alternativement, vous pouvez choisir un autre --driver", + "IP Address to use to expose ports (docker and podman driver only)": "Adresse IP à utiliser pour exposer les ports (pilote docker et podman uniquement)", + "IP address (ssh driver only)": "Adresse IP (pilote ssh uniquement)", + "If present, writes to the provided file instead of stdout.": "S'il est présent, écrit dans le fichier fourni au lieu de la sortie standard.", + "If set, automatically updates drivers to the latest version. Defaults to true.": "Si défini, met automatiquement à jour les pilotes vers la dernière version. La valeur par défaut est true.", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "Si défini, supprime le cluster actuel si le démarrage échoue et réessaye. La valeur par défaut est false.", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Si défini, télécharge l'archive tar des images préchargées si disponibles pour améliorer le temps de démarrage. La valeur par défaut est true.", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "S'il est défini, force l'environnement d'exécution du conteneur à utiliser systemd comme gestionnaire de groupe de contrôle. La valeur par défaut est false.", + "If set, install addons. Defaults to true.": "Si défini, installe les modules. La valeur par défaut est true.", + "If set, pause all namespaces": "Si défini, suspend tous les espaces de noms", + "If set, unpause all namespaces": "Si défini, annule la pause de tous les espaces de noms", + "If the above advice does not help, please let us know:": "Si les conseils ci-dessus ne vous aident pas, veuillez nous en informer :", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "Si vrai, met en cache les images Docker pour le programme d'amorçage actuel et les charge dans la machine. Toujours faux avec --driver=none.", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "Si la valeur est \"true\", met les images Docker en cache pour l'amorceur actuel et les charge dans la machine. La valeur est toujours \"false\" avec --vm-driver=none.", "If true, only download and cache files for later use - don't install or start anything.": "Si la valeur est \"true\", téléchargez les fichiers et mettez-les en cache uniquement pour une utilisation future. Ne lancez pas d'installation et ne commencez aucun processus.", - "If true, pods might get deleted and restarted on addon enable": "", - "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", - "If true, will perform potentially dangerous operations. Use with discretion.": "", - "If you are running minikube within a VM, consider using --driver=none:": "", - "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", - "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "", - "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "", - "Ignoring empty custom image {{.name}}": "", - "Ignoring invalid pair entry {{.pair}}": "", - "Ignoring unknown custom image {{.name}}": "", - "Ignoring unknown custom registry {{.name}}": "", - "Images Commands:": "", - "Images used by this addon. Separated by commas.": "", - "In order to use the fall back image, you need to log in to the github packages registry": "", - "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", + "If true, pods might get deleted and restarted on addon enable": "Si vrai, les pods peuvent être supprimés et redémarrés lors addon enable", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "Si vrai, renvoie la liste des profils plus rapidement en ignorant la validation de l'état du cluster.", + "If true, the added node will be marked for work. Defaults to true.": "Si vrai, le nœud ajouté sera marqué pour le travail. La valeur par défaut est true.", + "If true, the node added will also be a control plane in addition to a worker.": "Si vrai, le nœud ajouté sera également un plan de contrôle en plus d'un travailleur.", + "If true, will perform potentially dangerous operations. Use with discretion.": "Si vrai, effectuera des opérations potentiellement dangereuses. A utiliser avec discrétion.", + "If you are running minikube within a VM, consider using --driver=none:": "Si vous exécutez minikube dans une machine virtuelle, envisagez d'utiliser --driver=none", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "Si vous êtes toujours intéressé à faire fonctionner le pilote {{.driver_name}}. Les suggestions suivantes pourraient vous aider à surmonter ce problème :", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "Si vous ne voulez pas que vos informations d'identification soient montées dans un pod spécifique, ajoutez une étiquette avec la clé `gcp-auth-skip-secret` à votre configuration de pod.", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "Si vous souhaitez que les pods existants soient montés avec des informations d'identification, recréez-les ou réexécutez les modules complémentaires activés avec --refresh.", + "Ignoring empty custom image {{.name}}": "Ignorer l'image personnalisée vide {{.name}}", + "Ignoring invalid pair entry {{.pair}}": "Ignorer l'entrée de paire non valide {{.pair}}", + "Ignoring unknown custom image {{.name}}": "Ignorer l'image personnalisée inconnue {{.name}}", + "Ignoring unknown custom registry {{.name}}": "Ignorer le registre personnalisé inconnu {{.name}}", + "Images Commands:": "Commandes d'images:", + "Images used by this addon. Separated by commas.": "Images utilisées par ce module. Séparé par des virgules.", + "In order to use the fall back image, you need to log in to the github packages registry": "Pour utiliser l'image de secours, vous devez vous connecter au registre des packages github", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registres Docker non sécurisés à transmettre au démon Docker. La plage CIDR de service par défaut sera automatiquement ajoutée.", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registres Docker non sécurisés à transmettre au daemon Docker. La plage CIDR par défaut du service sera ajoutée automatiquement.", - "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}}": "", - "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", - "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", - "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.": "", - "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", - "Kubernetes requires at least 2 CPU's to start": "", - "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", - "Kubernetes {{.version}} is not supported by this release of minikube": "", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "Installez VirtualBox et assurez-vous qu'il est dans le chemin, ou sélectionnez une valeur alternative pour --driver", + "Install the latest hyperkit binary, and run 'minikube delete'": "Installez le dernier binaire hyperkit et exécutez 'minikube delete'", + "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "Exécution de conteneur non valide : \"{{.runtime}}\". Les environnements d'exécution valides sont : {{.validOptions}}", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio a besoin de {{.minCPUs}} processeurs -- votre configuration n'alloue que {{.cpus}} processeurs", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio a besoin de {{.minMem}}Mo de mémoire -- votre configuration n'alloue que {{.memory}}Mo", + "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.": "Il semble que vous exécutiez GCE, ce qui signifie que l'authentification devrait fonctionner sans le module GCP Auth. Si vous souhaitez toujours vous authentifier à l'aide d'un fichier d'informations d'identification, utilisez l'indicateur --force.", + "Kill the mount process spawned by minikube start": "Tuez le processus de montage généré par le démarrage de minikube", + "Kubelet network plug-in to use (default: auto)": "Plug-in réseau Kubelet à utiliser (par défaut : auto)", + "Kubernetes requires at least 2 CPU's to start": "Kubernetes nécessite au moins 2 processeurs pour démarrer", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} est désormais disponible. Si vous souhaitez effectuer une mise à niveau, spécifiez : --kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "Kubernetes {{.version}} n'est pas pris en charge par cette version de minikube", "Launching Kubernetes ...": "Lancement de Kubernetes...", - "Launching proxy ...": "", - "List all available images from the local cache.": "", - "List existing minikube nodes.": "", - "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", - "List images": "", - "List nodes.": "", + "Launching proxy ...": "Lancement du proxy...", + "List all available images from the local cache.": "Répertoriez toutes les images disponibles à partir du cache local.", + "List existing minikube nodes.": "Répertoriez les nœuds minikube existants.", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "Répertoriez les noms d'images que le module w/ADDON_NAME a utilisé. Pour une liste des modules disponibles, utilisez: minikube addons list", + "List images": "Lister les images", + "List nodes.": "Lister les nœuds.", "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "Liste de ports VSock invités qui devraient être exposés comme sockets sur l'hôte (pilote hyperkit uniquement).", - "List of ports that should be exposed (docker and podman driver only)": "", - "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "", - "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "", - "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", - "Lists all minikube profiles.": "", - "Lists all valid default values for PROPERTY_NAME": "", - "Lists all valid minikube profiles and detects all possible invalid profiles.": "", - "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", + "List of ports that should be exposed (docker and podman driver only)": "Liste des ports qui doivent être exposés (pilote docker et podman uniquement)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "Écoute de 0.0.0.0 sur l'hôte docker externe {{.host}}. Veuillez être informé", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Écoute {{.listenAddr}}. Ceci n'est pas recommandé et peut entraîner une faille de sécurité. À utiliser à vos risques et périls", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Répertorie tous les modules minikube disponibles ainsi que leurs statuts actuels (activé/désactivé)", + "Lists all minikube profiles.": "Répertorie tous les profils minikube.", + "Lists all valid default values for PROPERTY_NAME": "Répertorie toutes les valeurs par défaut valides pour PROPERTY_NAME", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "Répertorie tous les profils minikube valides et détecte tous les profils invalides possibles.", + "Lists the URLs for the services in your local cluster": "Répertorie les URL des services de votre cluster local", + "Load a image into minikube": "Charger une image dans minikube", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Dossiers locaux à partager avec l'invité par des installations NFS (pilote hyperkit uniquement).", - "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "Proxy local ignoré : ne pas passer {{.name}}={{.value}} à docker env.", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Emplacement du socket VPNKit exploité pour la mise en réseau. Si la valeur est vide, désactive Hyperkit VPNKitSock. Si la valeur affiche \"auto\", utilise la connexion VPNKit de Docker pour Mac. Sinon, utilise le VSock spécifié (pilote hyperkit uniquement).", + "Locations to fetch the minikube ISO from.": "Emplacements à partir desquels récupérer l'ISO minikube.", "Location of the minikube iso": "Emplacement de l'ISO minikube.", - "Locations to fetch the minikube ISO from.": "", - "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", - "Log into the minikube environment (for debugging)": "", - "Manage images": "", - "Message Size: {{.size}}": "", - "Modify persistent configuration values": "", - "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", - "Most users should use the newer 'docker' driver instead, which does not require root!": "", - "Mount type: {{.name}}": "", - "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", - "Mounts the specified directory into minikube": "", - "Mounts the specified directory into minikube.": "", - "Multiple errors deleting profiles": "", - "Multiple minikube profiles were found - ": "", - "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NOTE: This process must stay alive for the mount to be accessible ...": "", - "Networking and Connectivity Commands:": "", - "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", - "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", - "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", - "No such addon {{.name}}": "", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Connectez-vous ou exécutez une commande sur une machine avec SSH ; similaire à 'docker-machine ssh'."", + "Log into the minikube environment (for debugging)": "Connectez-vous à l'environnement minikube (pour le débogage)", + "Manage images": "Gérer les images", + "Message Size: {{.size}}": "Taille du message : {{.size}}", + "Modify persistent configuration values": "Modifier les valeurs de configuration persistantes", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Plus d'informations: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "La plupart des utilisateurs devraient plutôt utiliser le nouveau pilote 'docker', qui ne nécessite pas de root !", + "Mount type: {{.name}}": "Type de montage : {{.name}}", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "Montage du chemin d'hôte {{.sourcePath}} dans la machine virtuelle en tant que {{.destinationPath}} ...", + "Mounts the specified directory into minikube": "Monte le répertoire spécifié dans minikube", + "Mounts the specified directory into minikube.": "Monte le répertoire spécifié dans minikube.", + "Multiple errors deleting profiles": "Plusieurs erreurs lors de la suppression des profils", + "Multiple minikube profiles were found - ": "Plusieurs profils minikube ont été trouvés -", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Type de carte réseau utilisé pour le réseau hôte uniquement. Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM ou virtio (pilote virtualbox uniquement)", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Type de carte réseau utilisé pour le réseau nat. Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM ou virtio (pilote virtualbox uniquement)", + "NOTE: This process must stay alive for the mount to be accessible ...": "REMARQUE : ce processus doit rester actif pour que le montage soit accessible...", + "Networking and Connectivity Commands:": "Commandes de mise en réseau et de connectivité :", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Aucune adresse IP fournie. Essayez de spécifier --ssh-ip-address, ou consultez https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "Aucune modification requise pour le contexte \"{{.context}}\"", + "No minikube profile was found. ": "Aucun profil minikube n'a été trouvé.", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Aucun pilote possible n'a été détecté. Essayez de spécifier --driver, ou consultez https://minikube.sigs.k8s.io/docs/start/", + "No such addon {{.name}}": "Aucun module de ce type {{.name}}", "Node \"{{.node_name}}\" stopped.": "Le noeud \"{{.node_name}}\" est arrêté.", - "Node {{.name}} failed to start, deleting and trying again.": "", - "Node {{.name}} was successfully deleted.": "", - "Node {{.nodeName}} does not exist.": "", - "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "", + "Node {{.name}} failed to start, deleting and trying again.": "Le nœud {{.name}} n'a pas pu démarrer, suppression et réessai.", + "Node {{.name}} was successfully deleted.": "Le nœud {{.name}} a été supprimé avec succès.", + "Node {{.nodeName}} does not exist.": "Le nœud {{.nodeName}} n'existe pas.", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Aucun des référentiels connus n'est accessible. Envisagez de spécifier un référentiel d'images alternatif avec l'indicateur --image-repository", "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Aucun dépôt connu dans votre emplacement n'est accessible. {{.image_repository_name}} est utilisé comme dépôt de remplacement.", "None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "Aucun dépôt connu n'est accessible. Pensez à spécifier un autre dépôt d'images à l'aide de l'indicateur \"--image-repository\".", - "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 Kubernetes.": "", + "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 Kubernetes.": "Nombre de processeurs alloués à Kubernetes.", "Number of CPUs allocated to the minikube VM": "Nombre de processeurs alloués à la VM minikube.", - "Number of lines back to go within the log": "", - "OS release is {{.pretty_name}}": "", - "One of 'yaml' or 'json'.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", - "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", - "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening {{.url}} in your default browser...": "", - "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", - "Operations on nodes": "", - "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", - "Overwrite image even if same image:tag name exists": "", - "Path to the Dockerfile to use (optional)": "", - "Pause": "", - "Paused {{.count}} containers": "", - "Paused {{.count}} containers in: {{.namespaces}}": "", - "Pausing node {{.name}} ... ": "", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please 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:": "", - "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", - "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", - "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", - "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", - "Please provide a path or url to build": "", - "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", - "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 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\")": "", - "Please try purging minikube using `minikube delete --all --purge`": "", + "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}}", + "One of 'yaml' or 'json'.": "Un parmi 'yaml' ou 'json'.", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Seuls les caractères alphanumériques et les tirets '-' sont autorisés. Minimum 1 caractère, commençant par alphanumérique.", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Seuls les caractères alphanumériques et les tirets '-' sont autorisés. Minimum 2 caractères, commençant par alphanumérique.", + "Open the addons URL with https instead of http": "Ouvrez l'URL des modules avec https au lieu de http", + "Open the service URL with https instead of http (defaults to \\\"false\\\")": "Ouvrez l'URL du service avec https au lieu de http (par défaut \\\"false\\\")", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Ouverture du service Kubernetes {{.namespace_name}}/{{.service_name}} dans le navigateur par défaut...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Ouverture du service {{.namespace_name}}/{{.service_name}} dans le navigateur par défaut...", + "Opening {{.url}} in your default browser...": "Ouverture de {{.url}} dans votre navigateur par défaut...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "Ouvre le module avec ADDON_NAME dans minikube (exemple : minikube addons open dashboard). Pour une liste des modules disponibles, utilisez: minikube addons list", + "Operations on nodes": "Opérations sur les nœuds", + "Options: {{.options}}": "Options: {{.options}}", + "Output format. Accepted values: [json]": "Format de sortie. Valeurs acceptées : [json]", + "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Affiche la complétion du shell minikube pour le shell donné (bash, zsh ou fish)\n\n\tCela dépend du binaire bash-completion. Exemple d'instructions d'installation :\n\tOS X :\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # pour les utilisateurs bash\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # pour les utilisateurs zsh\n\t\t$ source ~/.minikube-completion\ n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # pour les utilisateurs de fish\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t \t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # pour les utilisateurs bash\n\t\t$ source \u003c(minikube completion zsh) # pour les utilisateurs zsh\n\t \t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # pour les utilisateurs de fish\n\n\tDe plus, vous voudrez peut-être sortir la complétion dans un fichier et une source dans votre .bashrc\n\ n\tRemarque pour les utilisateurs de zsh : [1] les complétions zsh ne sont prises en charge que dans les versions de zsh \u003e= 5.2\n\tRemarque pour les utilisateurs de fish : [2] veuillez vous référer à cette documentation pour plus de détails https://fishshell.com/docs/current/#tab-completion\n", + "Overwrite image even if same image:tag name exists": "Écraser l'image même si la même image:balise existe", + "Path to the Dockerfile to use (optional)": "Chemin d'accès au Dockerfile à utiliser (facultatif)", + "Pause": "Pause", + "Paused {{.count}} containers": "{{.count}} conteneurs suspendus", + "Paused {{.count}} containers in: {{.namespaces}}": "{{.count}} conteneurs suspendus dans : {{.namespaces}}", + "Pausing node {{.name}} ... ": "Suspendre le nœud {{.name}} ...", + "Permissions: {{.octalMode}} ({{.writtenMode}})": "Autorisations : {{.octalMode}} ({{.writeMode}})", + "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.", + "Please enter a value:": "Entrer un nombre, SVP:", + "Please free up disk or prune images.": "Veuillez libérer le disque ou élaguer les images.", + "Please increse Desktop's disk size.": "Veuillez augmenter la taille du disque du bureau.", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Veuillez installer le pilote minikube hyperkit VM, ou sélectionnez un --driver alternatif", + "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 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 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 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\")", + "Please try purging minikube using `minikube delete --all --purge`": "Veuillez essayer de purger minikube en utilisant `minikube delete --all --purge`", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Veuillez mettre à niveau l'exécutable \"{{.driver_executable}}\". {{.documentation_url}}", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", - "Populates the specified folder with documentation in markdown about minikube": "", - "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Veuillez visiter le lien suivant pour la documentation à ce sujet : \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with -github-packages#authentiating-to-github-packages\n", + "Populates the specified folder with documentation in markdown about minikube": "Remplit le dossier spécifié avec la documentation en markdown sur minikube", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell s'exécute en mode contraint, ce qui est incompatible avec les scripts Hyper-V.", "Powering off \"{{.profile_name}}\" via SSH ...": "Mise hors tension du profil \"{{.profile_name}}\" via SSH…", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Préparation de Kubernetes {{.k8sVersion}} sur {{.runtime}} {{.runtimeVersion}}...", - "Print current and latest version number": "", - "Print just the version number.": "", - "Print the version of minikube": "", - "Print the version of minikube.": "", - "Problems detected in {{.entry}}:": "", - "Problems detected in {{.name}}:": "", - "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "", - "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "", - "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "", - "Profile name '{{.name}}' is not valid": "", - "Profile name '{{.profilename}}' is not valid": "", - "Profile name should be unique": "", + "Print current and latest version number": "Imprimer le numéro de version actuel et le plus récent", + "Print just the version number.": "Imprimez uniquement le numéro de version.", + "Print the version of minikube": "Imprimer la version de minikube", + "Print the version of minikube.": "Imprimez la version de minikube.", + "Problems detected in {{.entry}}:": "Problèmes détectés dans {{.entry}} :", + "Problems detected in {{.name}}:": "Problèmes détectés dans {{.name}} :", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "Profil \"{{.cluster}}\" introuvable. Exécutez \"minikube profile list\" pour afficher tous les profils.", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "Le nom du profil \"{{.profilename}}\" est un mot-clé réservé. Pour supprimer ce profil, exécutez : \"{{.cmd}}\"", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "Le nom de profil '{{.name}}' est dupliqué avec le nom de machine '{{.machine}}' dans le profil '{{.profile}}'", + "Profile name '{{.name}}' is not valid": "Le nom de profil '{{.name}}' n'est pas valide", + "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 the remote image (no caching)": "", - "Pulling base image ...": "", + "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 the new image (requires tag)": "", - "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", - "Rebuild libvirt with virt-network support": "", - "Received {{.name}} signal": "", - "Registries used by this addon. Separated by commas.": "", - "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", + "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", + "Received {{.name}} signal": "Signal {{.name}} reçu", + "Registries used by this addon. Separated by commas.": "Registres utilisés par ce module. Séparé par des virgules.", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "Le module complémentaire de registre avec le pilote {{.driver}} utilise le port {{.port}}, veuillez l'utiliser au lieu du port par défaut 5000", "Registry mirrors to pass to the Docker daemon": "Miroirs de dépôt à transmettre au daemon Docker.", - "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "", - "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", - "Related issue: {{.url}}": "", - "Related issues:": "", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "Réinstallez VirtualBox et redémarrez. Sinon, essayez le pilote kvm2 : https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "Réinstallez VirtualBox et vérifiez qu'il n'est pas bloqué : Préférences Système -\u003e Sécurité \u0026 Confidentialité -\u003e Général -\u003e Le chargement de certains logiciels système a été bloqué", + "Related issue: {{.url}}": "Problème connexe : {{.url}}", + "Related issues:": "Problème connexe : {{.url}}", "Relaunching Kubernetes using {{.bootstrapper}} ...": "Redémarrage de Kubernetes à l'aide de {{.bootstrapper}}…", - "Remove one or more images": "", - "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "", + "Remove one or more images": "Supprimer une ou plusieurs images", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "Supprimez l'indicateur --docker-opt ou --insecure-registry non valide s'il a été fourni", "Removed all traces of the \"{{.name}}\" cluster.": "Le cluster \"{{.name}}\" a été supprimé.", "Removing {{.directory}} ...": "Suppression du répertoire {{.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 cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "Le nombre de processeurs demandés {{.requested_cpus}} est supérieur au nombre de processeurs disponibles de {{.avail_cpus}}", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "Le nombre de processeurs demandés {{.requested_cpus}} est inférieur au minimum autorisé de {{.minimum_cpus}}", "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "La taille de disque demandée ({{.requested_size}}) est inférieure à la taille minimale ({{.minimum_size}}).", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "L'allocation de mémoire demandée ({{.memory}} Mo) est inférieure à l'allocation de mémoire par défaut ({{.default_memorysize}} Mo). Sachez que minikube pourrait ne pas fonctionner correctement ou planter de manière inattendue.", - "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "L'allocation de mémoire demandée ({{.requested}} Mo) est inférieure au minimum recommandé de {{.recommend}} Mo. Les déploiements peuvent échouer.", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "L'allocation de mémoire demandée ({{.requested_size}}) est inférieure au minimum autorisé ({{.minimum_size}}).", - "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": "", - "Reset Docker to factory defaults": "", - "Restart Docker": "", - "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "", - "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "", - "Restarting the {{.name}} service may improve performance.": "", - "Retrieve the ssh host key of the specified node": "", - "Retrieve the ssh host key of the specified node.": "", - "Retrieve the ssh identity key path of the specified node": "", - "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "", - "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", - "Retrieves the IP address of the specified node": "", - "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", - "Returns a URL to connect to a service": "", - "Returns logs to debug a local Kubernetes cluster": "", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", - "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", - "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", - "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", - "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "", - "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "", - "Run a kubectl binary matching the cluster version": "", - "Run minikube from the C: drive.": "", - "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", - "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", - "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", - "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", - "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "", - "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "SSH key (ssh driver only)": "", - "SSH port (ssh driver only)": "", - "SSH user (ssh driver only)": "", - "Select a valid value for --dnsdomain": "", - "Send trace events. Options include: [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'": "", - "Set failed": "", - "Set flag to delete all profiles": "", - "Set flag to stop all profiles (clusters)": "", - "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "", - "Set this flag to delete the '.minikube' folder from your user directory.": "", - "Sets an individual value in a minikube config file": "", - "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", - "Sets up docker env variables; similar to '$(docker-machine env)'.": "", - "Sets up podman env variables; similar to '$(podman-machine env)'.": "", - "Setting profile failed": "", - "Show a list of global command-line options (applies to all commands).": "", - "Show only log entries which point to known problems": "", - "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", - "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", - "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", - "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", - "Sorry, completion support is not yet implemented for {{.name}}": "", - "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", - "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", - "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "L'allocation de mémoire demandée {{.requested}} Mo est supérieure à la limite de votre système {{.system_limit}} Mo.", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "L'allocation de mémoire demandée {{.requested}} Mio est inférieure au minimum utilisable de {{.minimum_memory}} Mo", + "Reset Docker to factory defaults": "Réinitialiser Docker aux paramètres d'usine", + "Restart Docker": "Redémarrer Docker", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "Redémarrez Docker, assurez-vous que docker est en cours d'exécution, puis exécutez : 'minikube delete' puis 'minikube start' à nouveau", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "Redémarrage du {{.driver_name}} {{.machine_type}} existant pour \"{{.cluster}}\" ...", + "Restarting the {{.name}} service may improve performance.": "Le redémarrage du service {{.name}} peut améliorer les performances.", + "Retrieve the ssh host key of the specified node": "Récupérer la clé d'hôte ssh du nœud spécifié", + "Retrieve the ssh host key of the specified node.": "Récupérez la clé d'hôte ssh du nœud spécifié.", + "Retrieve the ssh identity key path of the specified node": "Récupérer le chemin de la clé d'identité ssh du nœud spécifié", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "Récupérez le chemin de la clé d'identité ssh du nœud spécifié et l'écrit dans la sortie standard.", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "Récupère l'adresse IP du cluster en cours d'exécution, la vérifie\n\t\t\tavec l'adresse IP dans kubeconfig et corrige kubeconfig si elle est incorrecte.", + "Retrieves the IP address of the specified node": "Récupère l'adresse IP du nœud spécifié", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "Récupère l'adresse IP du nœud spécifié et l'écrit dans la sortie standard.", + "Returns a URL to connect to a service": "Renvoie une URL pour se connecter à un service", + "Returns logs to debug a local Kubernetes cluster": "Renvoie les journaux pour déboguer un cluster Kubernetes local", + "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Renvoie l'URL Kubernetes d'un service de votre cluster local. Dans le cas de plusieurs URL, elles seront imprimées une à la fois.", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "Renvoie la valeur de PROPERTY_NAME à partir du fichier de configuration minikube. Peut être écrasé à l'exécution par des indicateurs ou des variables d'environnement.", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "Cliquez avec le bouton droit sur l'icône PowerShell et sélectionnez Exécuter en tant qu'administrateur pour ouvrir PowerShell en mode élevé.", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "Exécutez 'kubectl describe pod coredns -n kube-system' et recherchez un pare-feu ou un conflit DNS", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "Exécutez 'minikube delete' pour supprimer la machine virtuelle obsolète ou assurez-vous que minikube s'exécute en tant qu'utilisateur avec lequel vous exécutez cette commande", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "Exécutez 'sudo sysctl fs.protected_regular=0', ou essayez un pilote qui ne nécessite pas de root, tel que '--driver=docker'", + "Run a kubectl binary matching the cluster version": "Exécuter un binaire kubectl correspondant à la version du cluster", + "Run minikube from the C: drive.": "Exécutez minikube à partir du lecteur C:.", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Exécutez le client Kubernetes, téléchargez-le si nécessaire. N'oubliez pas -- après kubectl !\n\nCela exécutera le client Kubernetes (kubectl) avec la même version que le cluster\n\nNormalement, il téléchargera un binaire correspondant au système d'exploitation et à l'architecture de l'hôte,\nmais vous pouvez également l'exécuter en option directement sur le plan de contrôle via la connexion ssh.\nCela peut être utile si vous ne pouvez pas exécuter kubectl localement pour une raison quelconque, comme un hôte non pris en charge. Veuillez noter que lors de l'utilisation de --ssh, tous les chemins s'appliqueront à la machine distante.", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "Exécutez : 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "Exécutez : 'kubectl delete clusterrolebinding kubernetes-dashboard'", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "Exécutez : 'minikube delete --all' pour nettoyer tous les réseaux abandonnés.", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "Exécutez : 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "Exécutez : 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Exécution sur localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}Mo, Disk={{.disk_size}}Mo) ...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Exécution à distance (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}Mo, Disk={{.disk_size}}Mo) ...", + "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)", + "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'", + "Set failed": "Échec de la définition", + "Set flag to delete all profiles": "Définir un indicateur pour supprimer tous les profils", + "Set flag to stop all profiles (clusters)": "Définir un indicateur pour arrêter tous les profils (clusters)", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "Définir un indicateur pour arrêter le cluster après un laps de temps défini (par exemple, --schedule=5m)", + "Set this flag to delete the '.minikube' folder from your user directory.": "Définissez cet indicateur pour supprimer le dossier '.minikube' de votre répertoire utilisateur.", + "Sets an individual value in a minikube config file": "Définit une valeur individuelle dans un fichier de configuration minikube", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "Définit la valeur de configuration PROPERTY_NAME sur PROPERTY_VALUE\n\tCes valeurs peuvent être écrasées par des indicateurs ou des variables d'environnement lors de l'exécution.", + "Sets up docker env variables; similar to '$(docker-machine env)'.": "Configure les variables d'environnement docker ; similaire à '$(docker-machine env)'.", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "Configure les variables d'environnement podman ; similaire à '$(podman-machine env)'.", + "Setting profile failed": "Échec de la définition du profil", + "Show a list of global command-line options (applies to all commands).": "Affiche une liste des options de ligne de commande globales (s'applique à toutes les commandes).", + "Show only log entries which point to known problems": "Afficher uniquement les entrées de journal qui pointent vers des problèmes connus", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Affichez uniquement les entrées de journal les plus récentes et imprimez en continu de nouvelles entrées au fur et à mesure qu'elles sont ajoutées au journal.", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Simulez le nombre de nœuds numa dans minikube, la plage de nombre de nœuds numa pris en charge est de 1 à 8 (pilote kvm2 uniquement)", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Changement de contexte kubectl ignoré pour {{.profile_name}} car --keep-context a été défini.", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "Certaines fonctionnalités du tableau de bord nécessitent le module metrics-server. Pour activer toutes les fonctionnalités, veuillez exécuter :\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "Désolé, Kubernetes {{.k8sVersion}} nécessite que conntrack soit installé dans le chemin de la racine", + "Sorry, completion support is not yet implemented for {{.name}}": "Désolé, la prise en charge de la complétion n'est pas encore implémentée pour {{.name}}", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "Désolé, veuillez définir l'indicateur --output sur l'une des options valides suivantes : [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "Désolé, l'adresse IP fournie avec l'indicateur --listen-address n'est pas valide : {{.listenAddr}}.", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "Désolé, l'adresse fournie avec l'indicateur --insecure-registry n'est pas valide : {{.addr}}. Les formats attendus sont : \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] ou \u003cnetwork\u003e/\u003cnetmask\u003e", "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "Désolé, le paramètre kubeadm.{{.parameter_name}} ne peut actuellement pas être utilisé avec \"--extra-config\".", "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "Désolé, l'URL fournie avec l'indicateur \"--registry-mirror\" n'est pas valide : {{.url}}", - "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", - "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", - "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", - "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "Désolé, {{.driver}} n'autorise pas la modification des montages après la création du conteneur (montage précédent : '{{.old}}', nouveau montage : '{{.new}})'", + "Source {{.path}} can not be empty": "La source {{.path}} ne peut pas être vide", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "La version spécifiée de Kubernetes {{.specified}} est inférieure à la plus ancienne version prise en charge : {{.oldest}}", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "Spécifiez --kubernetes-version avec la forme v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e. exemple : 'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "Spécifiez une autre valeur --host-only-cidr, telle que 172.16.0.1/24", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Spécifie des indicateurs arbitraires à transmettre au daemon Docker (format : clé = valeur).", - "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "StartHost failed, but will try again: {{.error}}": "", + "Specify arbitrary flags to pass to the build. (format: key=value)": "Spécifiez des indicateurs arbitraires à transmettre au build. (format : clé=valeur)", + "Specify the 9p version that the mount should use": "Spécifiez la version 9p que la montage doit utiliser", + "Specify the ip that the mount should be setup on": "Spécifiez l'adresse IP sur laquelle le montage doit être configuré", + "Specify the mount filesystem type (supported types: 9p)": "Spécifiez le type de système de fichiers de montage (types pris en charge : 9p)", + "StartHost failed, but will try again: {{.error}}": "StartHost a échoué, mais va réessayer : {{.error}}", "Starting control plane node {{.name}} in cluster {{.cluster}}": "Démarrage du noeud de plan de contrôle {{.name}} dans le cluster {{.cluster}}", "Starting node {{.name}} in cluster {{.cluster}}": "Démarrage du noeud {{.name}} dans le cluster {{.cluster}}", - "Starting tunnel for service {{.service}}.": "", - "Starts a local Kubernetes cluster": "", + "Starting tunnel for service {{.service}}.": "Tunnel de démarrage pour le service {{.service}}.", + "Starts a local Kubernetes cluster": "Démarre un cluster Kubernetes local", "Starts a local kubernetes cluster": "Démarre un cluster Kubernetes local.", - "Starts a node.": "", - "Starts an existing stopped node in a cluster.": "", - "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", + "Starts a node.": "Démarre un nœud.", + "Starts an existing stopped node in a cluster.": "Démarre un nœud arrêté existant dans un cluster.", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "Échec du démarrage avec le pilote {{.old_driver}}, essai avec un autre pilote {{.new_driver}} : {{.error}}", "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "Arrêt de \"{{.profile_name}}\" sur {{.driver_name}}...", - "Stopping node \"{{.name}}\" ...": "", - "Stopping tunnel for service {{.service}}.": "", - "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", - "Stops a node in a cluster.": "", - "Stops a running local Kubernetes cluster": "", - "Successfully added {{.name}} to {{.cluster}}!": "", - "Successfully deleted all profiles": "", - "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", - "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", - "Successfully started node {{.name}}!": "", - "Successfully stopped node {{.name}}": "", - "Suggestion: {{.advice}}": "", - "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Tag to apply to the new image (optional)": "", - "Target directory {{.path}} must be an absolute path": "", - "Target {{.path}} can not be empty": "", - "Test docs have been saved at - {{.path}}": "", + "Stopping node \"{{.name}}\" ...": "Nœud d'arrêt \"{{.name}}\" ...", + "Stopping tunnel for service {{.service}}.": "Tunnel d'arrêt pour le service {{.service}}.", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "Arrête un cluster Kubernetes local. Cette commande arrête la VM ou le conteneur sous-jacent, mais conserve les données utilisateur intactes. Le cluster peut être redémarré avec la commande \"start\".", + "Stops a node in a cluster.": "Arrête un nœud dans un cluster.", + "Stops a running local Kubernetes cluster": "Arrête un cluster Kubernetes local en cours d'exécution", + "Successfully added {{.name}} to {{.cluster}}!": "{{.name}} a été ajouté avec succès à {{.cluster}} !", + "Successfully deleted all profiles": "Tous les profils ont été supprimés avec succès", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "{{.sourcePath}} monté avec succès sur {{.destinationPath}}", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "Répertoire minikube purgé avec succès situé à - [{{.minikubeDirectory}}]", + "Successfully started node {{.name}}!": "Nœud {{.name}} démarré avec succès !", + "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 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", + "Test docs have been saved at - {{.path}}": "Les documents de test ont été enregistrés à - {{.path}}", "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}": "Le pilote \"{{.driver_name}}\" nécessite de disposer de droits racine. Veuillez exécuter minikube à l'aide de \"sudo minikube --vm-driver={{.driver_name}}\".", - "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", - "The 'none' driver is designed for experts who need to integrate with an existing VM": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "Le pilote \"{{.driver_name}}\" ne doit pas être utilisé avec les privilèges root.", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "Le pilote 'none' est conçu pour les experts qui doivent s'intégrer à une machine virtuelle existante", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "L'isolation fournie par le pilote \"none\" (aucun) est limitée, ce qui peut diminuer la sécurité et la fiabilité du système.", - "The '{{.addonName}}' addon is enabled": "", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", - "The '{{.driver}}' provider was not found: {{.error}}": "", - "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "The '{{.name}}' driver does not respect the --cpus flag": "", - "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, it will be as a domian, removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.addonName}}' addon is enabled": "Le module '{{.addonName}}' est activé", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "Le pilote '{{.driver}}' nécessite des autorisations élevées. Les commandes suivantes seront exécutées :\\n\\n{{ .example }}\\n", + "The '{{.driver}}' provider was not found: {{.error}}": "Le fournisseur '{{.driver}}' n'a pas été trouvé : {{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Le pilote '{{.name}}' ne prend pas en charge plusieurs profils : https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "Le pilote '{{.name}}' ne respecte pas l'indicateur --cpus", + "The '{{.name}}' driver does not respect the --memory flag": "Le pilote '{{.name}}' ne respecte pas l'indicateur --memory", + "The --image-repository flag your provided contains Scheme: {{.scheme}}, it will be as a domian, removed automatically": "L'indicateur --image-repository que vous avez fourni contient le schéma : {{.scheme}}, ce sera en tant que domaine, supprimé automatiquement", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "L'indicateur --image-repository que vous avez fourni s'est terminé par un / qui pourrait provoquer un conflit dans kubernetes, supprimé automatiquement", "The CIDR to be used for service cluster IPs.": "Méthode CIDR à exploiter pour les adresses IP des clusters du service.", "The CIDR to be used for the minikube VM (virtualbox driver only)": "Méthode CIDR à exploiter pour la VM minikube (pilote virtualbox uniquement).", "The KVM QEMU connection URI. (kvm2 driver only)": "URI de connexion QEMU de la KVM (pilote kvm2 uniquement).", - "The KVM default network name. (kvm2 driver only)": "", - "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The KVM default network name. (kvm2 driver only)": "Le nom de réseau par défaut de KVM. (pilote kvm2 uniquement)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "Le pilote KVM est incapable de ressusciter cette ancienne VM. Veuillez exécuter `minikube delete` pour la supprimer et réessayer.", "The KVM network name. (kvm2 driver only)": "Nom du réseau de la KVM (pilote kvm2 uniquement).", - "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", - "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 VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "Le pilote VM s'est écrasé. Exécutez 'minikube start --alsologtostderr -v=8' pour voir le message d'erreur du pilote VM", + "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 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.", - "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": "", - "The base image to use for docker/podman drivers. Intended for local development.": "", - "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", - "The cluster dns domain name used in the Kubernetes cluster": "", + "The argument to pass the minikube mount command on start.": "L'argument pour passer la commande de montage minikube au démarrage.", + "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": "Le nom d'hôte apiserver faisant autorité pour les certificats apiserver et la connectivité. Cela peut être utilisé si vous souhaitez rendre l'apiserver disponible depuis l'extérieur de la machine", + "The base image to use for docker/podman drivers. Intended for local development.": "L'image de base à utiliser pour les pilotes docker/podman. Destiné au développement local.", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "Le nom d'hôte du certificat fourni semble être invalide (peut être un bogue minikube, essayez 'minikube delete')", + "The cluster dns domain name used in the Kubernetes cluster": "Le nom de domaine DNS du cluster utilisé dans le cluster Kubernetes", "The cluster dns domain name used in the kubernetes cluster": "Nom du domaine DNS du cluster utilisé dans le cluster Kubernetes.", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", + "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "Le cluster {{.cluster}} existe déjà, ce qui signifie que le paramètre --nodes sera ignoré. Utilisez \"minikube node add\" pour ajouter des nœuds à un cluster existant.", "The container runtime to be used (docker, crio, containerd)": "environment d'exécution du conteneur à utiliser (docker, crio, containerd).", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", + "The control plane for \"{{.name}}\" is paused!": "Le plan de contrôle pour \"{{.name}}\" est en pause !", + "The control plane node \"{{.name}}\" does not exist.": "Le nœud du plan de contrôle \"{{.name}}\" n'existe pas.", + "The control plane node is not running (state={{.state}})": "Le nœud du plan de contrôle n'est pas en cours d'exécution (state={{.state}})", + "The control plane node must be running for this command": "Le nœud du plan de contrôle doit être en cours d'exécution pour cette commande", "The cri socket path to be used": "Chemin d'accès au socket CRI à utiliser.", - "The cri socket path to be used.": "", + "The cri socket path to be used.": "Le chemin de socket cri à utiliser.", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", + "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "La commande docker-env est incompatible avec les clusters multi-nœuds. Utilisez le module 'registry' : https://minikube.sigs.k8s.io/docs/handbook/registry/", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Le pilote \"{{.driver}}\" n'est pas compatible avec {{.os}}/{{.arch}}.", - "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", - "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", - "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "Le cluster \"{{.name}}\" existant a été créé à l'aide du pilote \"{{.old}}\", qui est incompatible avec le pilote \"{{.new}}\" demandé.", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "La configuration de nœud existante semble être corrompue. Exécutez 'minikube delete'", + "The heapster addon is depreciated. please try to disable metrics-server instead": "Le module heapster est déprécié. s'il vous plaît essayez de désactiver metrics-server à la place", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Nom du commutateur virtuel hyperv. La valeur par défaut affiche le premier commutateur trouvé (pilote hyperv uniquement).", - "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image '{{.imageName}}' was not found; unable to add it to cache.": "", - "The initial time interval for each check that wait performs in seconds": "", - "The kubeadm binary within the Docker container is not executable": "", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "L'hyperviseur ne semble pas être configuré correctement. Exécutez 'minikube start --alsologtostderr -v=1' et inspectez le code d'erreur", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "L'image '{{.imageName}}' n'a pas été trouvée ; impossible de l'ajouter au cache.", + "The initial time interval for each check that wait performs in seconds": "L'intervalle de temps initial pour chaque vérification effectuée en secondes", + "The kubeadm binary within the Docker container is not executable": "Le binaire kubeadm dans le conteneur Docker n'est pas exécutable", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Version de Kubernetes qu'utilisera la VM minikube (exemple : v1.2.3).", - "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", - "The minikube VM is offline. Please run 'minikube start' to start it again.": "", - "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 machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "Le pilote de machine spécifié ne démarre pas. Essayez d'exécuter 'docker-machine-driver-\u003ctype\u003e version'", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "La machine virtuelle minikube est hors ligne. Veuillez exécuter 'minikube start' pour le redémarrer.", + "The minikube {{.driver_name}} container exited unexpectedly.": "Le conteneur minikube {{.driver_name}} s'est fermé de manière inattendue.", + "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": "", - "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.": "", - "The node to get ssh-key path. Defaults to the primary control plane.": "", - "The node to ssh into. Defaults to the primary control plane.": "", - "The node {{.name}} has ran out of available PIDs.": "", - "The node {{.name}} has ran out of disk space.": "", - "The node {{.name}} has ran out of memory.": "", - "The node {{.name}} network is not available. Please verify network settings.": "", - "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", - "The output format. One of 'json', 'table'": "", - "The path on the file system where the docs in markdown need to be saved": "", - "The path on the file system where the error code docs in markdown need to be saved": "", - "The path on the file system where the testing docs in markdown need to be saved": "", - "The podman service within '{{.cluster}}' is not active": "", - "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", - "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", - "The services namespace": "", - "The time interval for each check that wait performs in seconds": "", - "The value passed to --format is invalid": "", - "The value passed to --format is invalid: {{.error}}": "", + "The named space to activate after start": "L'espace nommé à activer après le démarrage", + "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.", + "The node to get ssh-key path. Defaults to the primary control plane.": "Le nœud pour obtenir le chemin de la clé ssh. La valeur par défaut est le plan de contrôle principal.", + "The node to ssh into. Defaults to the primary control plane.": "Le nœud dans lequel ssh. La valeur par défaut est le plan de contrôle principal.", + "The node {{.name}} has ran out of available PIDs.": "Le nœud {{.name}} n'a plus de PID disponibles.", + "The node {{.name}} has ran out of disk space.": "Le nœud {{.name}} a manqué d'espace disque.", + "The node {{.name}} has ran out of memory.": "Le nœud {{.name}} est à court de mémoire.", + "The node {{.name}} network is not available. Please verify network settings.": "Le réseau du nœud {{.name}} n'est pas disponible. Veuillez vérifier les paramètres réseau.", + "The none driver is not compatible with multi-node clusters.": "Le pilote none n'est pas compatible avec les clusters multi-nœuds.", + "The number of bytes to use for 9p packet payload": "Le nombre d'octets à utiliser pour la charge utile du paquet 9p", + "The number of nodes to spin up. Defaults to 1.": "Le nombre de nœuds à faire tourner. La valeur par défaut est 1.", + "The output format. One of 'json', 'table'": "Le format de sortie. "json" ou "table"", + "The path on the file system where the docs in markdown need to be saved": "Le chemin sur le système de fichiers où les documents en markdown doivent être enregistrés", + "The path on the file system where the error code docs in markdown need to be saved": "Le chemin sur le système de fichiers où les documents code d'erreur en markdown doivent être enregistrés", + "The path on the file system where the testing docs in markdown need to be saved": "Le chemin sur le système de fichiers où les documents de test en markdown doivent être enregistrés", + "The podman service within '{{.cluster}}' is not active": "Le service podman dans '{{.cluster}}' n'est pas actif", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "La commande podman-env est incompatible avec les clusters multi-nœuds. Utilisez le module 'registry' : https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "L'allocation de mémoire demandée de {{.requested}}MiB ne laisse pas de place pour la surcharge système (mémoire système totale : {{.system_limit}}MiB). Vous pouvez rencontrer des problèmes de stabilité.", + "The service namespace": "L'espace de nom du service", + "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "Le service {{.service}} nécessite l'exposition des ports privilégiés : {{.ports}}", + "The services namespace": "L'espace de noms des services", + "The time interval for each check that wait performs in seconds": "L'intervalle de temps pour chaque contrôle que wait effectue en secondes", + "The value passed to --format is invalid": "La valeur passée à --format n'est pas valide", + "The value passed to --format is invalid: {{.error}}": "La valeur passée à --format n'est pas valide : {{.error}}", "The {{.driver_name}} driver should not be used with root privileges.": "Le pilote {{.driver_name}} ne doit pas être utilisé avec des droits racine.", "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "Une nouvelle version de \"{{.driver_executable}}\" est disponible. Pensez à effectuer la mise à niveau. {{.documentation_url}}", - "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", - "These changes will take effect upon a minikube delete and then a minikube start": "", - "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Ces paramètres --extra-config ne sont pas valides : {{.invalid_extra_opts}}", + "These changes will take effect upon a minikube delete and then a minikube start": "Ces modifications prendront effet lors d'une suppression de minikube, puis d'un démarrage de minikube", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "Ce module n'a pas de point de terminaison défini pour la commande 'addons open'.\nVous pouvez en ajouter un en annotant un service avec le libellé {{.labelName}} :{{.addonName}}", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "Cette opération peut également être réalisée en définissant la variable d'environment \"CHANGE_MINIKUBE_NONE_USER=true\".", - "This control plane is not running! (state={{.state}})": "", - "This driver does not yet work on your architecture. Maybe try --driver=none": "", - "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", + "This control plane is not running! (state={{.state}})": "Ce plan de contrôle ne fonctionne pas ! (état={{.état}})", + "This driver does not yet work on your architecture. Maybe try --driver=none": "Ce pilote ne fonctionne pas encore sur votre architecture. Essayez peut-être --driver=none", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "Il s'agit d'un problème connu avec le pilote de stockage BTRFS, il existe une solution de contournement, veuillez vérifier le problème sur GitHub", + "This is unusual - you may want to investigate using \"{{.command}}\"": "C'est inhabituel - vous voudrez peut-être investiguer en utilisant \"{{.command}}\"", "This will keep the existing kubectl context and will create a minikube context.": "Cela permet de conserver le contexte kubectl existent et de créer un contexte minikube.", "This will start the mount daemon and automatically mount files into minikube": "Cela permet de lancer le daemon d'installation et d'installer automatiquement les fichiers dans minikube.", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", - "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "This will start the mount daemon and automatically mount files into minikube.": "Cela démarrera le démon de montage et montera automatiquement les fichiers dans minikube.", + "This {{.type}} is having trouble accessing https://{{.repository}}": "Ce {{.type}} rencontre des difficultés pour accéder à https://{{.repository}}": "",", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "Astuce : Pour supprimer ce cluster appartenant à la racine, exécutez : sudo {{.cmd}}", "Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "Conseil : Pour supprimer ce cluster appartenant à la racine, exécutez la commande \"sudo {{.cmd}} delete\".", - "To connect to this cluster, use: --context={{.name}}": "", + "To connect to this cluster, use: --context={{.name}}": "Pour vous connecter à ce cluster, utilisez : --context={{.name}}", "To connect to this cluster, use: kubectl --context={{.name}}": "Pour vous connecter à ce cluster, utilisez la commande \"kubectl --context={{.name}}\".", "To connect to this cluster, use: kubectl --context={{.name}}__1": "Pour vous connecter à ce cluster, utilisez la commande \"kubectl --context={{.name}}\".", - "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", - "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", - "To see addons list for other profiles use: `minikube addons -p name list`": "", - "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", - "To start a cluster, run: \"{{.command}}\"": "", - "To start minikube with Hyper-V, Powershell must be in your PATH`": "", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Pour vous connecter à ce cluster, utilisez : kubectl --context={{.profile_name}}", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "Pour désactiver les notifications bêta, exécutez : 'minikube config set WantBetaUpdateNotification false'", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "Pour désactiver cette notification, exécutez : 'minikube config set WantUpdateNotification false'\\n", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "Pour désactiver les notifications de mise à jour en général, exécutez : 'minikube config set WantUpdateNotification false'\\n", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "Pour extraire de nouvelles images externes, vous devrez peut-être configurer un proxy : https://minikube.sigs.k8s.io/docs/reference/networking/proxy/", + "To see addons list for other profiles use: `minikube addons -p name list`": "Pour voir la liste des modules pour d'autres profils, utilisez: `minikube addons -p name list`", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "Pour définir votre projet Google Cloud, exécutez :\n\n\t\tgcloud config set project \u003cproject name\u003e\n\n\n définissez la variable d'environnement GOOGLE_CLOUD_PROJECT.", + "To start a cluster, run: \"{{.command}}\"": "Pour démarrer un cluster, exécutez : \"{{.command}}\"", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "Pour démarrer minikube avec Hyper-V, Powershell doit être dans votre PATH`", "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "Pour utiliser les commandes kubectl ou minikube sous votre propre nom d'utilisateur, vous devrez peut-être les déplacer. Par exemple, pour écraser vos propres paramètres, exécutez la commande suivante :", - "Troubleshooting Commands:": "", - "Try 'minikube delete' to force new SSL certificates to be installed": "", - "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", - "Trying to delete invalid profile {{.profile}}": "", - "Unable to bind flags": "", - "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", - "Unable to enable dashboard": "", - "Unable to fetch latest version info": "", - "Unable to find control plane": "", - "Unable to generate docs": "", - "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", + "Troubleshooting Commands:": "Commandes de dépannage :", + "Try 'minikube delete' to force new SSL certificates to be installed": "Essayez 'minikube delete' pour forcer l'installation de nouveaux certificats SSL", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "Essayez 'minikube delete' et désactivez tout logiciel VPN ou pare-feu en conflit", + "Trying to delete invalid profile {{.profile}}": "Tentative de suppression du profil non valide {{.profile}}", + "Unable to bind flags": "Impossible de lier les drapeaux", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "Impossible de créer un réseau dédié, cela peut entraîner une modification de l'adresse IP du cluster après le redémarrage : {{.error}}", + "Unable to enable dashboard": "Impossible d'activer le tableau de bord", + "Unable to fetch latest version info": "Impossible de récupérer les informations sur la dernière version", + "Unable to find control plane": "Impossible de trouver le plan de contrôle", + "Unable to generate docs": "Impossible de générer des documents", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "Impossible de générer la documentation. Veuillez vous assurer que le chemin spécifié est un répertoire, existe \u0026 vous avez la permission d'y écrire.", "Unable to get bootstrapper: {{.error}}": "Impossible d'obtenir l'amorceur : {{.error}}", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", - "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", - "Unable to get runtime": "", - "Unable to kill mount process: {{.error}}": "", - "Unable to list profiles: {{.error}}": "", + "Unable to get command runner": "Impossible d'obtenir le lanceur de commandes", + "Unable to get control plane status: {{.error}}": "Impossible d'obtenir l'état du plan de contrôle : {{.error}}", + "Unable to get current user": "Impossible d'obtenir l'utilisateur actuel", + "Unable to get forwarded endpoint": "Impossible d'obtenir le point de terminaison transféré", + "Unable to get machine status": "Impossible d'obtenir l'état de la machine", + "Unable to get runtime": "Impossible d'obtenir l'environnement d'exécution", + "Unable to kill mount process: {{.error}}": "Impossible d'arrêter le processus de montage : {{.error}}", + "Unable to list profiles: {{.error}}": "Impossible de répertorier les profils : {{.error}}", "Unable to load cached images from config file.": "Impossible de charger les images mises en cache depuis le fichier de configuration.", "Unable to load cached images: {{.error}}": "", "Unable to load config: {{.error}}": "Impossible de charger la configuration : {{.error}}", - "Unable to load host": "", - "Unable to load profile: {{.error}}": "", + "Unable to load host": "Impossible de charger l'hôte", + "Unable to load profile: {{.error}}": "Impossible de charger le profil : {{.error}}", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "Impossible d'analyser la version \"{{.kubernetes_version}}\" : {{.error}}", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", - "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", - "Unable to pick a default driver. Here is what was considered, in preference order:": "", + "Unable to parse default Kubernetes version from constants: {{.error}}": "Impossible d'analyser la version Kubernetes par défaut à partir des constantes : {{.error}}", + "Unable to parse memory '{{.memory}}': {{.error}}": "Impossible d'analyser la mémoire '{{.memory}}' : {{.error}}", + "Unable to parse oldest Kubernetes version from constants: {{.error}}": "Impossible d'analyser la version la plus ancienne de Kubernetes à partir des constantes : {{.error}}", + "Unable to pick a default driver. Here is what was considered, in preference order:": "Impossible de choisir un pilote par défaut. Voici ce qui a été considéré, par ordre de préférence :", "Unable to pull images, which may be OK: {{.error}}": "Impossible d'extraire des images, qui sont peut-être au bon format : {{.error}}", - "Unable to push cached images: {{.error}}": "", - "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", - "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", - "Unable to stop VM": "", - "Unable to update {{.driver}} driver: {{.error}}": "", - "Unfortunately, could not download the base image {{.image_name}} ": "", + "Unable to push cached images: {{.error}}": "Impossible de pousser les images mises en cache : {{.error}}", + "Unable to remove machine directory": "Impossible de supprimer le répertoire de la machine", + "Unable to restart cluster, will reset it: {{.error}}": "Impossible de redémarrer le cluster, va être réinitialisé : {{.error}}", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "Impossible de rétrograder en toute sécurité le cluster Kubernetes v{{.old}} existant vers v{{.new}}", + "Unable to stop VM": "Impossible d'arrêter la VM", + "Unable to update {{.driver}} driver: {{.error}}": "Impossible de mettre à jour le pilote {{.driver}} : {{.error}}", + "Unfortunately, could not download the base image {{.image_name}} ": "Malheureusement, impossible de télécharger l'image de base {{.image_name}}", "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "Désinstallation de Kubernetes {{.kubernetes_version}} à l'aide de {{.bootstrapper_name}}…", - "Unmounting {{.path}} ...": "", - "Unpause": "", - "Unpaused {{.count}} containers": "", - "Unpaused {{.count}} containers in: {{.namespaces}}": "", - "Unpausing node {{.name}} ... ": "", - "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "", - "Unset variables instead of setting them": "", - "Update Docker to the latest minor version, this version is unsupported": "", - "Update kubeconfig in case of an IP or port change": "", - "Update server returned an empty list": "", + "Unmounting {{.path}} ...": "Démontage de {{.path}} ...", + "Unpause": "Annuler la pause", + "Unpaused {{.count}} containers": "{{.count}} conteneurs non mis en veille", + "Unpaused {{.count}} containers in: {{.namespaces}}": "{{.count}} conteneurs non mis en veille dans : {{.namespaces}}", + "Unpausing node {{.name}} ... ": "Rétablissement du nœud {{.name}} ...", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "Désactivez la variable d'environnement KUBECONFIG ou vérifiez qu'elle ne pointe pas vers un chemin vide ou non valide", + "Unset variables instead of setting them": "Désactivez les variables au lieu de les définir", + "Update Docker to the latest minor version, this version is unsupported": "Mettez à jour Docker vers la dernière version mineure, cette version n'est pas prise en charge", + "Update kubeconfig in case of an IP or port change": "Mettre à jour kubeconfig en cas de changement d'IP ou de port", + "Update server returned an empty list": "Le serveur de mise à jour a renvoyé une liste vide", "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "Mise à jour du {{.machine_type}} {{.driver_name}} en marche \"{{.cluster}}\" ...", - "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "Mettez à niveau vers QEMU v3.1.0+, exécutez 'virt-host-validate' ou assurez-vous que vous n'exécutez pas dans un environnement VM imbriqué.", "Upgrading from Kubernetes {{.old}} to {{.new}}": "Mise à niveau de Kubernetes de la version {{.old}} à la version {{.new}}…", "Usage": "Usage", - "Usage: minikube completion SHELL": "", - "Usage: minikube delete": "", - "Usage: minikube delete --all --purge": "", - "Usage: minikube node [add|start|stop|delete|list]": "", - "Usage: minikube node delete [name]": "", - "Usage: minikube node list": "", - "Usage: minikube node start [name]": "", - "Usage: minikube node stop [name]": "", - "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", - "Use -A to specify all namespaces": "", - "Use SSH connection instead of HTTPS (port 2376)": "", - "Use SSH for running kubernetes client on the node": "", - "Use VirtualBox to remove the conflicting VM and/or network interfaces": "", - "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "", - "User ID: {{.userID}}": "", - "User name '{{.username}}' is not valid": "", - "User name must be 60 chars or less.": "", - "Userspace file server is shutdown": "", - "Userspace file server: ": "", + "Usage: minikube completion SHELL": "Utilisation : minikube completion SHELL", + "Usage: minikube delete": "Utilisation: minikube delete", + "Usage: minikube delete --all --purge": "Utilisation: minikube delete --all --purge", + "Usage: minikube node [add|start|stop|delete|list]": "Utilisation: minikube node [add|start|stop|delete|list]", + "Usage: minikube node delete [name]": "Utilisation: minikube node delete [name]", + "Usage: minikube node list": "Utilisation: minikube node list", + "Usage: minikube node start [name]": "Utilisation: minikube node start [name]", + "Usage: minikube node stop [name]": "Utilisation: minikube node stop [name]", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "Utilisez \"{{.CommandPath}} [commande] --help\" pour plus d'informations sur une commande.", + "Use 'kubect get po -A' to find the correct and namespace name": "Utilisez 'kubect get po -A' pour trouver le nom correct et l'espace de noms", + "Use -A to specify all namespaces": "Utilisez -A pour spécifier tous les espaces de noms", + "Use SSH connection instead of HTTPS (port 2376)": "Utiliser la connexion SSH au lieu de HTTPS (port 2376)", + "Use SSH for running kubernetes client on the node": "Utiliser SSH pour exécuter le client kubernetes sur le nœud", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "Utilisez VirtualBox pour supprimer la VM et/ou les interfaces réseau en conflit", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "Utilisez le client Golang SSH natif (par défaut vrai). Définissez sur 'false' pour utiliser la commande de ligne de commande 'ssh' lors de l'accès à la machine docker. Utile pour les pilotes de machine lorsqu'ils ne démarrent pas avec 'Waiting for SSH'.", + "User ID: {{.userID}}": "ID utilisateur : {{.userID}}", + "User name '{{.username}}' is not valid": "Le nom d'utilisateur '{{.username}}' n'est pas valide", + "User name must be 60 chars or less.": "Le nom d'utilisateur doit comporter 60 caractères ou moins.", + "Userspace file server is shutdown": "Le serveur de fichiers de l'espace utilisateur est arrêté", + "Userspace file server: ": "Serveur de fichiers de l'espace utilisateur :", "Using image repository {{.name}}": "Utilisation du dépôt d'images {{.name}}…", "Using image {{.registry}}{{.image}}": "Utilisation de l'image {{.registry}}{{.image}}", - "Using image {{.registry}}{{.image}} (global image repository)": "", - "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using image {{.registry}}{{.image}} (global image repository)": "Utilisation de l'image {{.registry}}{{.image}} (référentiel d'images global)", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "L'utilisation du runtime '{{.runtime}}' avec le pilote 'none' est une configuration non testée !", "Using the {{.driver}} driver based on existing profile": "Utilisation du pilote {{.driver}} basé sur le profil existant", "Using the {{.driver}} driver based on user configuration": "Utilisation du pilote {{.driver}} basé sur la configuration de l'utilisateur", "VM driver is one of: %v": "Le pilote de la VM appartient à : %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.": "", + "Valid components are: {{.valid_extra_opts}}": "Les composants valides sont : {{.valid_extra_opts}}", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "Validez vos réseaux KVM. Exécutez : virt-host-validate puis virsh net-list --all", + "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "La validation n'a pas pu analyser la taille du disque '{{.diskSize}}' : {{.error}}", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Vérifiez que vos variables d'environnement HTTP_PROXY et HTTPS_PROXY sont correctement définies.", "Verifying Kubernetes components...": "Vérification des composants Kubernetes...", - "Verifying dashboard health ...": "", - "Verifying proxy health ...": "", - "Verifying {{.addon_name}} addon...": "", + "Verifying dashboard health ...": "Vérification de l'état du tableau de bord...", + "Verifying proxy health ...": "Vérification de l'état du proxy...", + "Verifying {{.addon_name}} addon...": "Vérification du module {{.addon_name}}...", "Verifying:": "Vérification :", - "Version: {{.version}}": "", - "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "", - "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "", - "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", - "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "", - "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "", - "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "", - "Wait failed: {{.error}}": "", + "Version: {{.version}}": "Version : {{.version}}", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox et Hyper-V ont un conflit. Utilisez '--driver=hyperv' ou désactivez Hyper-V en utilisant : 'bcdedit /set hypervisorlaunchtype off'", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox ne peut pas créer de réseau, probablement parce qu'il entre en conflit avec un réseau existant que minikube ne connaît plus. Essayez d'exécuter 'minikube delete'", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox ne fonctionne pas. Désactivez le logiciel antivirus en temps réel, redémarrez et réinstallez VirtualBox si le problème persiste.", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox ne fonctionne pas. Réinstallez VirtualBox, redémarrez et exécutez « minikube delete ».", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox est incapable de trouver son interface réseau. Essayez de mettre à niveau vers la dernière version et de redémarrer.", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "La prise en charge de la virtualisation est désactivée sur votre ordinateur. Si vous exécutez minikube dans une machine virtuelle, essayez '--driver=docker'. Sinon, consultez le manuel du BIOS de votre système pour savoir comment activer la virtualisation.", + "Wait failed: {{.error}}": "Échec de l'attente : {{.error}}", "Wait until Kubernetes core services are healthy before exiting": "Avant de quitter, veuillez patienter jusqu'à ce que les principaux services Kubernetes soient opérationnels.", "Waiting for SSH access ...": "En attente de l'accès SSH...", "Waiting for:": "En attente de :", - "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "Vous voulez kubectl {{.version}} ? Essayez 'minikube kubectl -- get pods -A'", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "Emplacement permettant d'accéder aux partages NFS en mode root, la valeur par défaut affichant /nfsshares (pilote hyperkit uniquement).", - "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", - "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", - "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "S'il faut utiliser le commutateur externe sur le commutateur par défaut si le commutateur virtuel n'est pas explicitement spécifié. (pilote hyperv uniquement)", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "Avec --network-plugin=cni, vous devrez fournir votre propre CNI. Voir --cni flag comme alternative conviviale", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "Vous semblez utiliser un proxy, mais votre environnement NO_PROXY n'inclut pas l'IP minikube ({{.ip_address}}).", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "Il semble que vous utilisiez un proxy, mais votre environment NO_PROXY n'inclut pas l'adresse IP ({{.ip_address}}) de minikube. Consultez la documentation à l'adresse {{.documentation_url}} pour en savoir plus.", - "You are trying to run amd64 binary on M1 system. Please use darwin/arm64 binary instead (Download at {{.url}}.)": "", - "You are trying to run windows .exe binary inside WSL, for better integration please use Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You can delete them using the following command(s): ": "", - "You can force an unsupported Kubernetes version via the --force flag": "", - "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 chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", + "You are trying to run amd64 binary on M1 system. Please use darwin/arm64 binary instead (Download at {{.url}}.)": "Vous essayez d'exécuter le binaire amd64 sur le système M1. Veuillez utiliser le binaire darwin/arm64 à la place (télécharger sur {{.url}}.)", + "You are trying to run windows .exe binary inside WSL, for better integration please use Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Vous essayez d'exécuter le binaire Windows .exe dans WSL. Pour une meilleure intégration, veuillez utiliser le binaire Linux à la place (Télécharger sur https://minikube.sigs.k8s.io/docs/start/.). Sinon, si vous voulez toujours le faire, vous pouvez le faire en utilisant --force", + "You can delete them using the following command(s): ": "Vous pouvez les supprimer à l'aide de la ou des commandes suivantes :", + "You can force an unsupported Kubernetes version via the --force flag": "Vous pouvez forcer une version Kubernetes non prise en charge via l'indicateur --force", + "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 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 may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Vous devrez peut-être supprimer la VM \"{{.name}}\" manuellement de votre hyperviseur.", - "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", - "You must specify a service name": "", - "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", - "Your cgroup does not allow setting memory.": "", - "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", - "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", - "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", - "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", - "Your minikube vm is not running, try minikube start.": "", - "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", - "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", - "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", - "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", - "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", - "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", - "bash completion failed": "", - "bash completion.": "", - "call with cleanup=true to remove old tunnels": "", - "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", - "config view failed": "", - "containers paused status: {{.paused}}": "", - "dashboard service is not running: {{.error}}": "", - "delete ctx": "", - "deleting node": "", - "disable failed": "", - "dry-run mode. Validates configuration, but does not mutate system state": "", - "dry-run validation complete!": "", - "enable failed": "", - "error creating clientset": "", - "error getting primary control plane": "", - "error getting ssh port": "", - "error initializing tracing: {{.Error}}": "", - "error parsing the input ip address for mount": "", - "error provisioning host": "", - "error starting tunnel": "", - "error stopping tunnel": "", - "error: --output must be 'yaml' or 'json'": "", - "experimental": "", - "failed to add node": "", - "failed to open browser: {{.error}}": "", - "failed to save config": "", - "failed to start node": "", - "fish completion failed": "", - "fish completion.": "", - "if true, will embed the certs in kubeconfig.": "", - "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", - "initialization failed, will try again: {{.error}}": "", - "invalid kubernetes version": "", - "keep the kube-context active after cluster is stopped. Defaults to false.": "", - "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Vous devrez peut-être arrêter le gestionnaire Hyper-V et exécuter à nouveau 'minikube delete'.", + "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "Vous utilisez peut-être une version amd64 de minikube sur un Mac M1, utilisez plutôt la version arm64 de minikube", + "You must specify a service name": "Vous devez spécifier un nom de service", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "Vos identifiants GCP seront désormais installés dans chaque pod créé dans le cluster {{.name}}.", + "Your cgroup does not allow setting memory.": "Votre groupe de contrôle ne permet pas de définir la mémoire.", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Votre hébergeur ne prend pas en charge la virtualisation KVM. Assurez-vous que qemu-kvm est installé et exécutez 'virt-host-validate' pour déboguer le problème", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "Votre hébergeur ne prend pas en charge la virtualisation. Si vous exécutez minikube dans une machine virtuelle, essayez '--driver=docker'. Sinon, activez la virtualisation dans votre BIOS", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "Votre hôte ne parvient pas à acheminer les paquets vers la machine virtuelle minikube. Si vous disposez d'un logiciel VPN, essayez de le désactiver ou de le configurer afin qu'il ne réachemine pas le trafic vers l'adresse IP de la VM. Sinon, vérifiez les options de routage de votre environnement de machine virtuelle.", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "Votre configuration minikube fait référence à un pilote non pris en charge. Effacez ~/.minikube et réessayez.", + "Your minikube vm is not running, try minikube start.": "Votre minikube vm ne fonctionne pas, essayez de démarrer minikube.", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[AVERTISSEMENT] Pour une fonctionnalité complète, le module 'csi-hostpath-driver' nécessite que le module 'volumesnapshots' soit activé.\n\nVous pouvez activer le module 'volumesnapshots' en exécutant : 'minikube addons enable volumesnapshots'\n", + "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "\\\"minikube cache\\\" sera obsolète dans les prochaines versions, veuillez passer à \\\"minikube image load\\\"", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "Le module '{{.name}}' n'est actuellement pas activé.\nPour activer ce module, exécutez :\nminikube addons enable {{.name}}", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "Le module '{{.name}}' n'est pas un module valide fourni avec minikube.\nPour voir la liste des modules disponibles, exécutez :\nminikube addons list", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "addons modifie les fichiers de modules minikube à l'aide de sous-commandes telles que \"minikube addons enable dashboard\"", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "Le module auto-pause est une fonctionnalité alpha et encore en développement précoce. Veuillez signaler les problèmes pour nous aider à l'améliorer.", + "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "la pause automatique n'est actuellement prise en charge que sur le runtime docker et amd64. Suivez les progrès des autres ici : https://github.com/kubernetes/minikube/issues/10601", + "bash completion failed": "échec de la complétion bash", + "bash completion.": "complétion bash", + "call with cleanup=true to remove old tunnels": "appelez avec cleanup=true pour supprimer les anciens tunnels", + "cancel any existing scheduled stop requests": "annuler toutes les demandes d'arrêt programmées existantes", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "config modifie les fichiers de configuration de minikube à l'aide de sous-commandes telles que \"minikube config set driver kvm2\"\nChamps configurables : \\n\\n", + "config view failed": "échec de la vue de configuration", + "containers paused status: {{.paused}}": "état des conteneurs en pause : {{.paused}}", + "dashboard service is not running: {{.error}}": "le service de tableau de bord ne fonctionne pas : {{.error}}", + "delete ctx": "supprimer ctx", + "deleting node": "suppression d'un nœud", + "disable failed": "échec de la désactivation", + "dry-run mode. Validates configuration, but does not mutate system state": "mode simulation. Valide la configuration, mais ne modifie pas l'état du système", + "dry-run validation complete!": "validation de la simulation terminée !", + "enable failed": "échec de l'activation", + "error creating clientset": "erreur lors de la création de l'ensemble de clients", + "error getting primary control plane": "erreur lors de l'obtention du plan de contrôle principal", + "error getting ssh port": "erreur lors de l'obtention du port ssh", + "error initializing tracing: {{.Error}}": "erreur d'initialisation du traçage : {{.Error}}", + "error parsing the input ip address for mount": "erreur lors de l'analyse de l'adresse IP d'entrée pour le montage", + "error provisioning host": "erreur de provisionnement de l'hôte", + "error starting tunnel": "erreur de démarrage du tunnel", + "error stopping tunnel": "erreur d'arrêt du tunnel", + "error: --output must be 'yaml' or 'json'": "erreur : --output doit être 'yaml' ou 'json'", + "experimental": "expérimental", + "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 start node": "échec du démarrage du nœud", + "fish completion failed": "la complétion fish a échoué", + "fish completion.": "complétion fish.", + "if true, will embed the certs in kubeconfig.": "si vrai, intégrera les certificats dans kubeconfig.", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "si vous voulez créer un profil vous pouvez par cette commande : minikube start -p {{.profile_name}}", + "initialization failed, will try again: {{.error}}": "l'initialisation a échoué, va réessayer : {{.error}}", + "invalid kubernetes version": "version kubernetes invalide", + "keep the kube-context active after cluster is stopped. Defaults to false.": "garder le kube-context actif après l'arrêt du cluster. La valeur par défaut est false.", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm a détecté un conflit de port TCP avec un autre processus : probablement une autre installation locale de Kubernetes. Exécutez lsof -p\u003cport\u003e pour trouver le processus et le tuer", "kubectl and minikube configuration will be stored in {{.home_folder}}": "Les configurations kubectl et minikube seront stockées dans le dossier {{.home_folder}}.", - "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", - "kubectl proxy": "", - "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", - "loading profile": "", - "max time to wait per Kubernetes or host to be healthy.": "", - "minikube addons list --output OUTPUT. json, list": "", - "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", - "minikube is not meant for production use. You are opening non-local traffic": "", - "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", - "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl introuvable. Si vous en avez besoin, essayez : 'minikube kubectl -- get pods -A'", + "kubectl proxy": "proxy kubectl", + "libmachine failed": "libmachine a échoué", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "la liste affiche tous les paramètres par défaut valides pour PROPERTY_NAME\nChamps acceptables : \\n\\n", + "loading profile": "profil de chargement", + "max time to wait per Kubernetes or host to be healthy.": "temps d'attente maximal par Kubernetes ou hôte pour être en bonne santé.", + "minikube addons list --output OUTPUT. json, list": "liste des modules minikube --output OUTPUT. json, liste", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "minikube manque des fichiers relatifs à votre environnement invité. Cela peut être corrigé en exécutant 'minikube delete'", + "minikube is not meant for production use. You are opening non-local traffic": "minikube n'est pas destiné à une utilisation en production. Vous ouvrez du trafic non local", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube ne peut pas accéder à Google Container Registry. Vous devrez peut-être le configurer pour utiliser un proxy HTTP.", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "minikube ne parvient pas à se connecter à la VM : {{.error}}\n\n\tCela est probablement dû à l'une des deux raisons suivantes :\n\n\t- Interférence VPN ou pare-feu\n\t- {{.hypervisor }} problème de configuration réseau\n\n\tSolutions suggérées :\n\n\t- Désactivez votre logiciel VPN ou pare-feu local\n\t- Configurez votre VPN ou pare-feu local pour autoriser l'accès à {{.ip}}\n \t- Redémarrez ou réinstallez {{.hypervisor}}\n\t- Utilisez un autre --vm-driver\n\t- Utilisez --force pour annuler cette vérification de connectivité\n\t", "minikube profile was successfully set to {{.profile_name}}": "Le profil de minikube a été défini avec succès sur {{.profile_name}}", "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube provisionne et gère des clusters Kubernetes locaux optimisés pour les workflows de développement.", "minikube quickly sets up a local Kubernetes cluster": "minikube configure rapidement un cluster Kubernetes local", "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube ignore diverses validations lorsque --force est fourni ; cela peut conduire à un comportement inattendu", - "minikube status --output OUTPUT. json, text": "", + "minikube status --output OUTPUT. json, text": "état minikube --sortie SORTIE. json, texte", "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} est disponible ! Téléchargez-le ici : {{.url}}", "mkcmp is used to compare performance of two minikube binaries": "mkcmp est utilisé pour comparer les performances de deux binaires minikube", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "argument de montage \"{{.value}}\" doit être de la forme : \u003cdossier source\u003e:\u003cdossier de destination\u003e", "mount failed": "échec du montage", "namespaces to pause": "espaces de noms à mettre en pause", "namespaces to unpause": "espaces de noms à réactiver", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new 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.": "réseau avec lequel exécuter minikube. Maintenant, il est utilisé par les pilotes docker/podman et KVM. Si laissé vide, minikube créera un nouveau réseau.", "none driver does not support multi-node clusters": "aucun pilote ne prend pas en charge les clusters multi-nœuds", "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "pas assez d'arguments ({{.ArgCount}}).\\nusage : minikube config set PROPERTY_NAME PROPERTY_VALUE", - "numa node is only supported on k8s v1.18 and later": "", + "numa node is only supported on k8s v1.18 and later": "le nœud numa n'est pris en charge que sur k8s v1.18 et versions ultérieures", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "format de sortie (EXPERIMENTAL, JSON uniquement) : 'nodes' ou 'cluster'", "pause Kubernetes": "met Kubernetes en pause", - "preload extraction failed: \\\"No space left on device\\\"": "", + "preload extraction failed: \\\"No space left on device\\\"": "échec de l'extraction du préchargement : \\\"Pas d'espace disponible sur l'appareil\\\"", "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile définit le profil courrant de minikube, ou obtient le profil actuel si aucun argument n'est fourni. Ceci est utilisé pour exécuter et gérer plusieurs instances de minikube. Vous pouvez revenir au profil par défaut du minikube en exécutant `minikube profile default`", "provisioning host for node": "provisionne un hôte pour le nœud", "reload cached images.": "recharge les cache des images.", "reloads images previously added using the 'cache add' subcommand": "recharge les images précédemment ajoutées à l'aide de la sous-commande 'cache add'", "retrieving node": "récupération du nœud", - "scheduled stop is not supported on the none driver, skipping scheduling": "", + "scheduled stop is not supported on the none driver, skipping scheduling": "l'arrêt programmé n'est pas pris en charge sur le pilote none, programmation non prise en compte", "service {{.namespace_name}}/{{.service_name}} has no node port": "le service {{.namespace_name}}/{{.service_name}} n'a pas de port de nœud", "stat failed": "stat en échec", "status json failure": "état du JSON en échec", @@ -903,7 +903,7 @@ "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "toom tous les arguments ({{.ArgCount}}).\\nusage : jeu de configuration de minikube PROPERTY_NAME PROPERTY_VALUE", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "le tunnel crée une route vers les services déployés avec le type LoadBalancer et définit leur Ingress sur leur ClusterIP. Pour un exemple détaillé, voir https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", "unable to bind flags": "impossible de lier les configurations", - "unable to daemonize: {{.err}}": "", + "unable to daemonize: {{.err}}": "impossible de démoniser : {{.err}}", "unable to delete minikube config folder": "impossible de supprimer le dossier de configuration de minikube", "unable to set logtostderr": "impossible de définir logtostderr", "unpause Kubernetes": "réactive Kubernetes", @@ -912,41 +912,41 @@ "unsets an individual value in a minikube config file": "déconfigure une valeur individuelle dans le fichier de configuration de minikube", "unsupported or missing driver: {{.name}}": "pilote non pris en charge ou manquant : {{.name}}", "update config": "mettre à jour la configuration", - "usage: minikube addons configure ADDON_NAME": "usage : minikube addons configure ADDON_NAME", - "usage: minikube addons disable ADDON_NAME": "usage : minikube addons disable ADDON_NAME", - "usage: minikube addons enable ADDON_NAME": "usage : minikube addons enable ADDON_NAME", - "usage: minikube addons images ADDON_NAME": "", - "usage: minikube addons list": "usage : minikube addons list", - "usage: minikube addons open ADDON_NAME": "usage : minikube addons open ADDON_NAME", - "usage: minikube config unset PROPERTY_NAME": "usage : minikube config unset PROPERTY_NAME", - "usage: minikube delete": "usage : minikube delete", - "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "usage : minikube profile [MINIKUBE_PROFILE_NAME]", - "using metrics-server addon, heapster is deprecated": "", + "usage: minikube addons configure ADDON_NAME": "utilisation : minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "utilisation : minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "utilisation : minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "utilisation: minikube addons images ADDON_NAME", + "usage: minikube addons list": "utilisation : minikube addons list", + "usage: minikube addons open ADDON_NAME": "utilisation : minikube addons open ADDON_NAME", + "usage: minikube config unset PROPERTY_NAME": "utilisation : minikube config unset PROPERTY_NAME", + "usage: minikube delete": "utilisation : minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "utilisation : minikube profile [MINIKUBE_PROFILE_NAME]", + "using metrics-server addon, heapster is deprecated": "utilisation du module metrics-server, heapster est obsolète", "version json failure": "échec de la version du JSON", "version yaml failure": "échec de la version du YAML", "zsh completion failed": "complétion de zsh en échec", - "zsh completion.": "", - "{{ .name }}: Suggestion: {{ .suggestion}}": "", + "zsh completion.": "complétion zsh.", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Suggestion: {{ .suggestion}}", "{{ .name }}: {{ .rejection }}": "{{ .name }} : {{ .rejection }}", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "{{.Driver}} utilise actuellement le pilote de stockage {{.StorageDriver}}, envisagez de passer à overlay2 pour de meilleures performances", "{{.count}} nodes stopped.": "{{.count}} nœud(s) arrêté(s).", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} est manquant, il va être recréé.", "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} n'a pas pu continuer car le service {{.driver_name}} n'est pas fonctionnel.", "{{.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", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", - "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", + "{{.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 :", "{{.name}} has no available configuration options": "{{.name}} n'a pas d'options de configuration disponible", "{{.name}} is already running": "{{.name}} est déjà en cours d'exécution", "{{.name}} was successfully configured": "{{.name}} a été configuré avec succès", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} manque presque d'espace disque, ce qui peut entraîner l'échec des déploiements ! ({{.p}} % de la capacité)", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} n'a plus d'espace disque ! (/var est à {{.p}} % de capacité)", "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "{{.oxibin}} prend un temps anormalement long pour répondre, pensez à redémarrer {{.osibin}}", "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} est la version {{.client_version}}, qui peut comporter des incompatibilités avec Kubernetes {{.cluster_version}}.", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} sur {{.platform}}", - "{{.profile}} profile is not valid: {{.err}}": "", + "{{.profile}} profile is not valid: {{.err}}": "Le profil {{.profile}} n'est pas valide : {{.error}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} n'est pas encore un système de fichiers pris en charge. Nous essaierons quand même !", "{{.url}} is not accessible: {{.error}}": "{{.url}} n'est pas accessible : {{.error}}" -} \ No newline at end of file +}