Skip to content

Commit 0a45d87

Browse files
authored
Merge pull request #219 from mook-as/hyperkit-cp
Hyperkit: drop use of NFS
2 parents 41e14aa + 686eae4 commit 0a45d87

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

scripts/hyperkit.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ async function buildHyperkit(destPath) {
6868
*/
6969
async function buildDockerMachineDriver(destPath) {
7070
const project = 'docker-machine-driver-hyperkit';
71-
const version = 'v2.0.0-alpha.4';
71+
const version = 'v2.0.0-alpha.5';
7272
const url = `https://github.com/rancher-sandbox/${ project }/releases/download/${ version }/${ project }`;
7373

7474
await fs.promises.mkdir(path.dirname(destPath), { recursive: true });

src/k8s-engine/hyperkit.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ export default class HyperkitBackend extends events.EventEmitter implements K8s.
192192
const options: childProcess.SpawnOptions = { stdio: 'inherit' };
193193
const { driver, defaultArgs } = this.hyperkitArgs;
194194

195+
process.stderr.write(`\u001B[0;1m${ JSON.stringify([driver].concat(defaultArgs, args)) }\u001B[0m\n`);
195196
await new Promise<void>((resolve, reject) => {
196197
const child = childProcess.spawn(driver, defaultArgs.concat(args), options);
197198

@@ -346,15 +347,30 @@ export default class HyperkitBackend extends events.EventEmitter implements K8s.
346347
'--cpus', `${ this.cfg.numberCPUs }`,
347348
'--memory', `${ this.cfg.memoryInGB * 1024 }`,
348349
'--hyperkit', resources.executable('hyperkit'),
349-
'--volume', `${ path.join(paths.cache(), 'k3s') }:/k3s-cache:ro`,
350-
'--volume', `${ resources.get(os.platform()) }:/opt/rd`,
351350
);
352351

352+
// Copy the k3s files over
353+
const cacheDir = '/home/docker/k3s-cache';
354+
const filesToCopy: Record<string, string> = {
355+
...Object.fromEntries(this.k3sHelper.filenames.map(filename => [
356+
path.join(paths.cache(), 'k3s', desiredVersion, filename),
357+
`${ cacheDir }/${ desiredVersion }/${ filename }`])),
358+
[resources.get(path.join(os.platform(), 'run-k3s'))]: `${ cacheDir }/run-k3s`,
359+
[resources.get(path.join(os.platform(), 'kubeconfig'))]: `${ cacheDir }/kubeconfig`,
360+
};
361+
362+
await this.hyperkit('ssh', '--', 'mkdir', '-p', `${ cacheDir }/${ desiredVersion }`);
363+
await Promise.all(Object.entries(filesToCopy).map(
364+
([src, dest]) => this.hyperkit('cp', src, `:${ dest }`)));
365+
353366
// Ensure that the k3s binary is executable.
354-
await this.hyperkit('ssh', '--', 'chmod', 'a+x', `/k3s-cache/${ desiredVersion }/k3s`);
367+
await this.hyperkit('ssh', '--', 'chmod', 'a+x',
368+
`${ cacheDir }/${ desiredVersion }/k3s`,
369+
`${ cacheDir }/run-k3s`,
370+
`${ cacheDir }/kubeconfig`);
355371
// Run run-k3s with NORUN, to set up the environment.
356372
await this.hyperkit('ssh', '--',
357-
'sudo', 'NORUN=1', 'CACHE_DIR=/k3s-cache', '/opt/rd/run-k3s', desiredVersion);
373+
'sudo', 'NORUN=1', `CACHE_DIR=${ cacheDir }`, `${ cacheDir }/run-k3s`, desiredVersion);
358374

359375
// Actually run K3s
360376
this.process = childProcess.spawn(
@@ -397,7 +413,7 @@ export default class HyperkitBackend extends events.EventEmitter implements K8s.
397413
await this.k3sHelper.updateKubeconfig(
398414
resources.executable('docker-machine-driver-hyperkit'),
399415
'--storage-path', path.join(paths.state(), 'driver'),
400-
'ssh', '--', 'sudo', '/opt/rd/kubeconfig',
416+
'ssh', '--', 'sudo', `${ cacheDir }/kubeconfig`,
401417
);
402418
} catch (e) {
403419
console.error(e);

src/k8s-engine/k3sHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default class K3sHelper extends events.EventEmitter implements VersionLis
4545
protected readonly releaseApiUrl = 'https://api.github.com/repos/k3s-io/k3s/releases?per_page=100';
4646
protected readonly releaseApiAccept = 'application/vnd.github.v3+json';
4747
protected readonly cachePath = path.join(paths.cache(), 'k3s-versions.json');
48-
protected readonly filenames = ['k3s', 'k3s-airgap-images-amd64.tar', 'sha256sum-amd64.txt'];
48+
readonly filenames = ['k3s', 'k3s-airgap-images-amd64.tar', 'sha256sum-amd64.txt'];
4949
protected readonly minimumVersion = new semver.SemVer('1.15.0');
5050

5151
/**

0 commit comments

Comments
 (0)