Skip to content

Commit b882dd7

Browse files
committed
chore: allow downloading a specific version of kubectl in tests
This is a prerequisite to adding OpenShift 3 tests, where we want to use a specific version of Kubernetes and of kubectl.
1 parent 3567039 commit b882dd7

File tree

5 files changed

+28
-13
lines changed

5 files changed

+28
-13
lines changed

test/helpers/kubectl.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
import { exec } from 'child-process-promise';
2-
import { chmodSync, writeFileSync, existsSync } from 'fs';
2+
import { chmodSync, writeFileSync, existsSync, unlinkSync } from 'fs';
33
import { platform } from 'os';
44
import { resolve } from 'path';
55
import * as needle from 'needle';
66
import * as sleep from 'sleep-promise';
77

8-
export async function downloadKubectl(): Promise<void> {
8+
/**
9+
* @param version For example: "v1.18.0"
10+
*/
11+
export async function downloadKubectl(version: string): Promise<void> {
912
const kubectlPath = resolve(process.cwd(), 'kubectl');
1013
if (existsSync(kubectlPath)) {
11-
return;
14+
if (version === 'latest') {
15+
return;
16+
}
17+
18+
// Always start clean when requesting a specific version.
19+
unlinkSync(kubectlPath);
1220
}
1321

14-
console.log('Downloading kubectl...');
22+
console.log(`Downloading kubectl ${version}...`);
1523

1624
// eslint-disable-next-line @typescript-eslint/camelcase
1725
const requestOptions = { follow_max: 2 };
18-
const k8sRelease = await getLatestStableK8sRelease();
26+
const k8sRelease = version === 'latest' ? await getLatestStableK8sRelease() : version;
1927
const osDistro = platform();
2028
const bodyData = null;
2129
await needle('get', 'https://storage.googleapis.com/kubernetes-release/release/' +

test/setup/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as fs from 'fs';
22
import * as sleep from 'sleep-promise';
33
import * as uuidv4 from 'uuid/v4';
44

5-
import platforms from './platforms';
5+
import platforms, { getKubernetesVersionForPlatform } from './platforms';
66
import deployers from './deployers';
77
import { IImageOptions } from './deployers/types';
88
import * as kubectl from '../helpers/kubectl';
@@ -92,10 +92,12 @@ export async function deployMonitor(): Promise<string> {
9292

9393
console.log(`platform chosen is ${testPlatform}, createCluster===${createCluster}`);
9494

95-
await kubectl.downloadKubectl();
95+
const kubernetesVersion = getKubernetesVersionForPlatform(testPlatform);
96+
await kubectl.downloadKubectl(kubernetesVersion);
97+
9698
await platforms[testPlatform].setupTester();
9799
if (createCluster) {
98-
await platforms[testPlatform].create();
100+
await platforms[testPlatform].create(kubernetesVersion);
99101
await platforms[testPlatform].config();
100102
} else {
101103
await platforms[testPlatform].config();

test/setup/platforms/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as openshift4 from './openshift4';
44

55
interface IPlatformSetup {
66
// create a Kubernetes cluster
7-
create: () => Promise<void>;
7+
create: (version: string) => Promise<void>;
88
// loads the image so Kubernetes may run it, return the name of the image in its registry's format
99
loadImage: (imageNameAndTag: string) => Promise<string>;
1010
// delete a Kubernetes cluster
@@ -44,6 +44,10 @@ const openshift4Setup: IPlatformSetup = {
4444
setupTester: openshift4.setupTester,
4545
};
4646

47+
export function getKubernetesVersionForPlatform(testPlatform: string): string {
48+
return 'latest';
49+
}
50+
4751
export default {
4852
kind: kindSetup,
4953
eks: eksSetup,

test/setup/platforms/kind.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ export async function setupTester(): Promise<void> {
1111
await download(osDistro);
1212
}
1313

14-
export async function createCluster(): Promise<void> {
14+
export async function createCluster(version: string): Promise<void> {
1515
// available tags may be viewed at https://hub.docker.com/r/kindest/node/tags
16-
const kindImageTag = 'latest';
16+
const kindImageTag = version;
1717
console.log(`Creating cluster "${clusterName}" with Kind image tag ${kindImageTag}...`);
1818

1919
let kindImageArgument = '';

test/system/kind.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ tap.test('Kubernetes-Monitor with KinD', async (t) => {
4444
process.env['PATH'] = process.env['PATH'] + ':./skopeo';
4545
}
4646

47+
const kubernetesVersion = 'latest';
4748
// kubectl
48-
await kubectl.downloadKubectl();
49+
await kubectl.downloadKubectl(kubernetesVersion);
4950

5051
// KinD
5152
await kind.setupTester();
52-
await kind.createCluster();
53+
await kind.createCluster(kubernetesVersion);
5354
await kind.exportKubeConfig();
5455

5556
await Promise.all([

0 commit comments

Comments
 (0)