Skip to content

Commit 65d85cc

Browse files
committed
Image: Fix PATH when running image commands
Previously, running image commands from the UI (e.g. to pull an image) was not setting up PATH correctly. Fix this by using the centralized wrapper for the container engine commands instead of doing a separate thing; this also allows us to remove special casing for nerdctl/moby (since it's already done elsewhere). Signed-off-by: Mark Yen <mark.yen@suse.com>
1 parent ed0faf5 commit 65d85cc

5 files changed

Lines changed: 17 additions & 25 deletions

File tree

background.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ async function startK8sManager() {
594594
*/
595595

596596
function setupImageProcessor() {
597-
const imageProcessor = getImageProcessor(cfg.containerEngine.name, k8smanager.executor);
597+
const imageProcessor = getImageProcessor(cfg.containerEngine.name, k8smanager);
598598

599599
currentImageProcessor?.deactivate();
600600
if (!imageEventHandler) {

pkg/rancher-desktop/backend/images/imageFactory.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { VMExecutor } from '@pkg/backend/backend';
1+
import { VMBackend } from '@pkg/backend/backend';
22
import { ImageProcessor } from '@pkg/backend/images/imageProcessor';
33
import MobyImageProcessor from '@pkg/backend/images/mobyImageProcessor';
44
import NerdctlImageProcessor from '@pkg/backend/images/nerdctlImageProcessor';
@@ -9,7 +9,7 @@ const cachedImageProcessors: Partial<Record<ContainerEngine, ImageProcessor>> =
99
/**
1010
* Return the appropriate ImageProcessor singleton for the specified ContainerEngine.
1111
*/
12-
export function getImageProcessor(engineName: ContainerEngine, executor: VMExecutor): ImageProcessor {
12+
export function getImageProcessor(engineName: ContainerEngine, executor: VMBackend): ImageProcessor {
1313
if (!(engineName in cachedImageProcessors)) {
1414
switch (engineName) {
1515
case ContainerEngine.MOBY:

pkg/rancher-desktop/backend/images/imageProcessor.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Buffer } from 'buffer';
22
import { EventEmitter } from 'events';
33
import timers from 'timers';
44

5-
import { VMExecutor } from '@pkg/backend/backend';
5+
import { VMBackend, VMExecutor } from '@pkg/backend/backend';
66
import mainEvents from '@pkg/main/mainEvents';
77
import { ChildProcess, ErrorCommand } from '@pkg/utils/childProcess';
88
import Logging from '@pkg/utils/logging';
@@ -70,7 +70,7 @@ interface ProcessChildOutputOptions {
7070
* an active ImageProcessor can be dropped.
7171
*/
7272
export abstract class ImageProcessor extends EventEmitter {
73-
protected executor: VMExecutor;
73+
protected backend: VMBackend;
7474
// Sometimes the `images` subcommand repeatedly fires the same error message.
7575
// Instead of logging it every time, keep track of the current error and give a count instead.
7676
private lastErrorMessage = '';
@@ -90,9 +90,9 @@ export abstract class ImageProcessor extends EventEmitter {
9090
// which imageProcessor is currently active, and it can direct events to that.
9191
protected active = false;
9292

93-
protected constructor(executor: VMExecutor) {
93+
protected constructor(backend: VMBackend) {
9494
super();
95-
this.executor = executor;
95+
this.backend = backend;
9696
this._refreshImages = this.refreshImages.bind(this);
9797
this.on('newListener', (event: string | symbol) => {
9898
if (!this.active) {
@@ -195,7 +195,7 @@ export abstract class ImageProcessor extends EventEmitter {
195195
}
196196

197197
return await this.processChildOutput(
198-
this.executor.spawn({ root: true }, ...args),
198+
this.backend.executor.spawn({ root: true }, ...args),
199199
{
200200
commandName: 'trivy',
201201
subcommandName: 'image',

pkg/rancher-desktop/backend/images/mobyImageProcessor.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
import { spawn } from 'child_process';
21
import path from 'path';
32

4-
import { VMBackend, VMExecutor } from '@pkg/backend/backend';
3+
import { VMBackend } from '@pkg/backend/backend';
54
import * as imageProcessor from '@pkg/backend/images/imageProcessor';
65
import * as K8s from '@pkg/backend/k8s';
76
import mainEvents from '@pkg/main/mainEvents';
87
import Logging from '@pkg/utils/logging';
9-
import { executable } from '@pkg/utils/resources';
108
import * as window from '@pkg/window';
119

1210
const console = Logging.images;
1311

1412
export default class MobyImageProcessor extends imageProcessor.ImageProcessor {
15-
constructor(executor: VMExecutor) {
16-
super(executor);
13+
constructor(backend: VMBackend) {
14+
super(backend);
1715

1816
mainEvents.on('k8s-check-state', (mgr: VMBackend) => {
1917
if (!this.active) {
@@ -31,12 +29,8 @@ export default class MobyImageProcessor extends imageProcessor.ImageProcessor {
3129
protected async runImagesCommand(args: string[], sendNotifications = true): Promise<imageProcessor.childResultType> {
3230
const subcommandName = args[0];
3331

34-
if (this.executor.backend !== 'wsl' && !args.includes('--context')) {
35-
args.unshift('--context', 'rancher-desktop');
36-
}
37-
38-
return await this.processChildOutput(
39-
spawn(executable('docker'), args),
32+
return this.processChildOutput(
33+
this.backend.containerEngineClient.runClient(args, 'stream'),
4034
{
4135
subcommandName,
4236
notifications: {

pkg/rancher-desktop/backend/images/nerdctlImageProcessor.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import { spawn } from 'child_process';
21
import path from 'path';
32

4-
import { VMBackend, VMExecutor } from '@pkg/backend/backend';
3+
import { VMBackend } from '@pkg/backend/backend';
54
import * as imageProcessor from '@pkg/backend/images/imageProcessor';
65
import * as K8s from '@pkg/backend/k8s';
76
import mainEvents from '@pkg/main/mainEvents';
@@ -12,8 +11,8 @@ import { executable } from '@pkg/utils/resources';
1211
const console = Logging.images;
1312

1413
export default class NerdctlImageProcessor extends imageProcessor.ImageProcessor {
15-
constructor(executor: VMExecutor) {
16-
super(executor);
14+
constructor(backend: VMBackend) {
15+
super(backend);
1716

1817
mainEvents.on('k8s-check-state', (mgr: VMBackend) => {
1918
if (!this.active) {
@@ -30,10 +29,9 @@ export default class NerdctlImageProcessor extends imageProcessor.ImageProcessor
3029

3130
protected async runImagesCommand(args: string[], sendNotifications = true): Promise<imageProcessor.childResultType> {
3231
const subcommandName = args[0];
33-
const namespacedArgs = ['--namespace', this.currentNamespace].concat(args);
3432

3533
return await this.processChildOutput(
36-
spawn(executable('nerdctl'), namespacedArgs),
34+
this.backend.containerEngineClient.runClient(args, 'stream', { namespace: this.currentNamespace }),
3735
{
3836
subcommandName,
3937
notifications: {

0 commit comments

Comments
 (0)