Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 90 additions & 41 deletions pkg/dryrun/dryrunclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,17 @@ func getCallingFunction() string {
return fullName[strings.LastIndex(fullName, ".")+1:]
}

// All methods and functions which need to be overridden for dry run.
// errDryRunForbidden refuses a mutating operation compose itself never
// issues: delegating it would let future code mutate the engine under
// --dry-run silently. The full classification of every APIClient method
// (read-only delegated / faked / refused) is pinned by
// TestDryRunClientClassifiesEveryMethod.
func errDryRunForbidden(operation string) error {
return fmt.Errorf("%s is not allowed in dry-run mode", operation)
}

// Methods below either fake the operation for dry-run or delegate the
// read-only ones to the real client.

func (d *DryRunClient) ContainerAttach(ctx context.Context, container string, options client.ContainerAttachOptions) (client.ContainerAttachResult, error) {
return client.ContainerAttachResult{}, errors.New("interactive run is not supported in dry-run mode")
Expand Down Expand Up @@ -329,19 +339,22 @@ func (d *DryRunClient) ConfigInspect(ctx context.Context, name string, options c
}

func (d *DryRunClient) ConfigCreate(ctx context.Context, options client.ConfigCreateOptions) (client.ConfigCreateResult, error) {
return d.apiClient.ConfigCreate(ctx, options)
var zero client.ConfigCreateResult
return zero, errDryRunForbidden("ConfigCreate")
}

func (d *DryRunClient) ConfigRemove(ctx context.Context, id string, options client.ConfigRemoveOptions) (client.ConfigRemoveResult, error) {
return d.apiClient.ConfigRemove(ctx, id, options)
var zero client.ConfigRemoveResult
return zero, errDryRunForbidden("ConfigRemove")
}

func (d *DryRunClient) ConfigUpdate(ctx context.Context, id string, options client.ConfigUpdateOptions) (client.ConfigUpdateResult, error) {
return d.apiClient.ConfigUpdate(ctx, id, options)
var zero client.ConfigUpdateResult
return zero, errDryRunForbidden("ConfigUpdate")
}

func (d *DryRunClient) ContainerCommit(ctx context.Context, container string, options client.ContainerCommitOptions) (client.ContainerCommitResult, error) {
return d.apiClient.ContainerCommit(ctx, container, options)
return client.ContainerCommitResult{ID: "dryRunId"}, nil
}

func (d *DryRunClient) ContainerDiff(ctx context.Context, container string, options client.ContainerDiffOptions) (client.ContainerDiffResult, error) {
Expand All @@ -357,7 +370,8 @@ func (d *DryRunClient) ExecInspect(ctx context.Context, execID string, options c
}

func (d *DryRunClient) ExecResize(ctx context.Context, execID string, options client.ExecResizeOptions) (client.ExecResizeResult, error) {
return d.apiClient.ExecResize(ctx, execID, options)
var zero client.ExecResizeResult
return zero, errDryRunForbidden("ExecResize")
}

func (d *DryRunClient) ContainerExport(ctx context.Context, container string, options client.ContainerExportOptions) (client.ContainerExportResult, error) {
Expand All @@ -369,7 +383,8 @@ func (d *DryRunClient) ContainerLogs(ctx context.Context, container string, opti
}

func (d *DryRunClient) ContainerResize(ctx context.Context, container string, options client.ContainerResizeOptions) (client.ContainerResizeResult, error) {
return d.apiClient.ContainerResize(ctx, container, options)
var zero client.ContainerResizeResult
return zero, errDryRunForbidden("ContainerResize")
}

func (d *DryRunClient) ContainerStatPath(ctx context.Context, container string, options client.ContainerStatPathOptions) (client.ContainerStatPathResult, error) {
Expand All @@ -385,27 +400,31 @@ func (d *DryRunClient) ContainerTop(ctx context.Context, container string, optio
}

func (d *DryRunClient) ContainerUpdate(ctx context.Context, container string, options client.ContainerUpdateOptions) (client.ContainerUpdateResult, error) {
return d.apiClient.ContainerUpdate(ctx, container, options)
var zero client.ContainerUpdateResult
return zero, errDryRunForbidden("ContainerUpdate")
}

func (d *DryRunClient) ContainerWait(ctx context.Context, container string, options client.ContainerWaitOptions) client.ContainerWaitResult {
return d.apiClient.ContainerWait(ctx, container, options)
}

func (d *DryRunClient) ContainerPrune(ctx context.Context, options client.ContainerPruneOptions) (client.ContainerPruneResult, error) {
return d.apiClient.ContainerPrune(ctx, options)
var zero client.ContainerPruneResult
return zero, errDryRunForbidden("ContainerPrune")
}

func (d *DryRunClient) DistributionInspect(ctx context.Context, imageName string, options client.DistributionInspectOptions) (client.DistributionInspectResult, error) {
return d.apiClient.DistributionInspect(ctx, imageName, options)
}

func (d *DryRunClient) BuildCachePrune(ctx context.Context, opts client.BuildCachePruneOptions) (client.BuildCachePruneResult, error) {
return d.apiClient.BuildCachePrune(ctx, opts)
var zero client.BuildCachePruneResult
return zero, errDryRunForbidden("BuildCachePrune")
}

func (d *DryRunClient) BuildCancel(ctx context.Context, id string, opts client.BuildCancelOptions) (client.BuildCancelResult, error) {
return d.apiClient.BuildCancel(ctx, id, opts)
var zero client.BuildCancelResult
return zero, errDryRunForbidden("BuildCancel")
}

func (d *DryRunClient) ImageHistory(ctx context.Context, imageName string, options ...client.ImageHistoryOption) (client.ImageHistoryResult, error) {
Expand All @@ -417,15 +436,17 @@ func (d *DryRunClient) ImageAttestations(ctx context.Context, imageName string,
}

func (d *DryRunClient) ImageImport(ctx context.Context, source client.ImageImportSource, ref string, options client.ImageImportOptions) (client.ImageImportResult, error) {
return d.apiClient.ImageImport(ctx, source, ref, options)
var zero client.ImageImportResult
return zero, errDryRunForbidden("ImageImport")
}

func (d *DryRunClient) ImageList(ctx context.Context, options client.ImageListOptions) (client.ImageListResult, error) {
return d.apiClient.ImageList(ctx, options)
}

func (d *DryRunClient) ImageLoad(ctx context.Context, input io.Reader, options ...client.ImageLoadOption) (client.ImageLoadResult, error) {
return d.apiClient.ImageLoad(ctx, input, options...)
var zero client.ImageLoadResult
return zero, errDryRunForbidden("ImageLoad")
}

func (d *DryRunClient) ImageSearch(ctx context.Context, term string, options client.ImageSearchOptions) (client.ImageSearchResult, error) {
Expand All @@ -437,11 +458,13 @@ func (d *DryRunClient) ImageSave(ctx context.Context, images []string, options .
}

func (d *DryRunClient) ImageTag(ctx context.Context, options client.ImageTagOptions) (client.ImageTagResult, error) {
return d.apiClient.ImageTag(ctx, options)
var zero client.ImageTagResult
return zero, errDryRunForbidden("ImageTag")
}

func (d *DryRunClient) ImagePrune(ctx context.Context, options client.ImagePruneOptions) (client.ImagePruneResult, error) {
return d.apiClient.ImagePrune(ctx, options)
var zero client.ImagePruneResult
return zero, errDryRunForbidden("ImagePrune")
}

func (d *DryRunClient) NodeInspect(ctx context.Context, nodeID string, options client.NodeInspectOptions) (client.NodeInspectResult, error) {
Expand All @@ -453,11 +476,13 @@ func (d *DryRunClient) NodeList(ctx context.Context, options client.NodeListOpti
}

func (d *DryRunClient) NodeRemove(ctx context.Context, nodeID string, options client.NodeRemoveOptions) (client.NodeRemoveResult, error) {
return d.apiClient.NodeRemove(ctx, nodeID, options)
var zero client.NodeRemoveResult
return zero, errDryRunForbidden("NodeRemove")
}

func (d *DryRunClient) NodeUpdate(ctx context.Context, nodeID string, options client.NodeUpdateOptions) (client.NodeUpdateResult, error) {
return d.apiClient.NodeUpdate(ctx, nodeID, options)
var zero client.NodeUpdateResult
return zero, errDryRunForbidden("NodeUpdate")
}

func (d *DryRunClient) NetworkInspect(ctx context.Context, networkName string, options client.NetworkInspectOptions) (client.NetworkInspectResult, error) {
Expand All @@ -469,51 +494,61 @@ func (d *DryRunClient) NetworkList(ctx context.Context, options client.NetworkLi
}

func (d *DryRunClient) NetworkPrune(ctx context.Context, options client.NetworkPruneOptions) (client.NetworkPruneResult, error) {
return d.apiClient.NetworkPrune(ctx, options)
var zero client.NetworkPruneResult
return zero, errDryRunForbidden("NetworkPrune")
}

func (d *DryRunClient) PluginList(ctx context.Context, options client.PluginListOptions) (client.PluginListResult, error) {
return d.apiClient.PluginList(ctx, options)
}

func (d *DryRunClient) PluginRemove(ctx context.Context, name string, options client.PluginRemoveOptions) (client.PluginRemoveResult, error) {
return d.apiClient.PluginRemove(ctx, name, options)
var zero client.PluginRemoveResult
return zero, errDryRunForbidden("PluginRemove")
}

func (d *DryRunClient) PluginEnable(ctx context.Context, name string, options client.PluginEnableOptions) (client.PluginEnableResult, error) {
return d.apiClient.PluginEnable(ctx, name, options)
var zero client.PluginEnableResult
return zero, errDryRunForbidden("PluginEnable")
}

func (d *DryRunClient) PluginDisable(ctx context.Context, name string, options client.PluginDisableOptions) (client.PluginDisableResult, error) {
return d.apiClient.PluginDisable(ctx, name, options)
var zero client.PluginDisableResult
return zero, errDryRunForbidden("PluginDisable")
}

func (d *DryRunClient) PluginInstall(ctx context.Context, name string, options client.PluginInstallOptions) (client.PluginInstallResult, error) {
return d.apiClient.PluginInstall(ctx, name, options)
var zero client.PluginInstallResult
return zero, errDryRunForbidden("PluginInstall")
}

func (d *DryRunClient) PluginUpgrade(ctx context.Context, name string, options client.PluginUpgradeOptions) (client.PluginUpgradeResult, error) {
return d.apiClient.PluginUpgrade(ctx, name, options)
var zero client.PluginUpgradeResult
return zero, errDryRunForbidden("PluginUpgrade")
}

func (d *DryRunClient) PluginPush(ctx context.Context, name string, options client.PluginPushOptions) (client.PluginPushResult, error) {
return d.apiClient.PluginPush(ctx, name, options)
var zero client.PluginPushResult
return zero, errDryRunForbidden("PluginPush")
}

func (d *DryRunClient) PluginSet(ctx context.Context, name string, options client.PluginSetOptions) (client.PluginSetResult, error) {
return d.apiClient.PluginSet(ctx, name, options)
var zero client.PluginSetResult
return zero, errDryRunForbidden("PluginSet")
}

func (d *DryRunClient) PluginInspect(ctx context.Context, name string, options client.PluginInspectOptions) (client.PluginInspectResult, error) {
return d.apiClient.PluginInspect(ctx, name, options)
}

func (d *DryRunClient) PluginCreate(ctx context.Context, createContext io.Reader, options client.PluginCreateOptions) (client.PluginCreateResult, error) {
return d.apiClient.PluginCreate(ctx, createContext, options)
var zero client.PluginCreateResult
return zero, errDryRunForbidden("PluginCreate")
}

func (d *DryRunClient) ServiceCreate(ctx context.Context, options client.ServiceCreateOptions) (client.ServiceCreateResult, error) {
return d.apiClient.ServiceCreate(ctx, options)
var zero client.ServiceCreateResult
return zero, errDryRunForbidden("ServiceCreate")
}

func (d *DryRunClient) ServiceInspect(ctx context.Context, serviceID string, options client.ServiceInspectOptions) (client.ServiceInspectResult, error) {
Expand All @@ -525,11 +560,13 @@ func (d *DryRunClient) ServiceList(ctx context.Context, options client.ServiceLi
}

func (d *DryRunClient) ServiceRemove(ctx context.Context, serviceID string, options client.ServiceRemoveOptions) (client.ServiceRemoveResult, error) {
return d.apiClient.ServiceRemove(ctx, serviceID, options)
var zero client.ServiceRemoveResult
return zero, errDryRunForbidden("ServiceRemove")
}

func (d *DryRunClient) ServiceUpdate(ctx context.Context, serviceID string, options client.ServiceUpdateOptions) (client.ServiceUpdateResult, error) {
return d.apiClient.ServiceUpdate(ctx, serviceID, options)
var zero client.ServiceUpdateResult
return zero, errDryRunForbidden("ServiceUpdate")
}

func (d *DryRunClient) ServiceLogs(ctx context.Context, serviceID string, options client.ServiceLogsOptions) (client.ServiceLogsResult, error) {
Expand All @@ -549,51 +586,59 @@ func (d *DryRunClient) TaskList(ctx context.Context, options client.TaskListOpti
}

func (d *DryRunClient) SwarmInit(ctx context.Context, options client.SwarmInitOptions) (client.SwarmInitResult, error) {
return d.apiClient.SwarmInit(ctx, options)
var zero client.SwarmInitResult
return zero, errDryRunForbidden("SwarmInit")
}

func (d *DryRunClient) SwarmJoin(ctx context.Context, options client.SwarmJoinOptions) (client.SwarmJoinResult, error) {
return d.apiClient.SwarmJoin(ctx, options)
var zero client.SwarmJoinResult
return zero, errDryRunForbidden("SwarmJoin")
}

func (d *DryRunClient) SwarmGetUnlockKey(ctx context.Context) (client.SwarmGetUnlockKeyResult, error) {
return d.apiClient.SwarmGetUnlockKey(ctx)
}

func (d *DryRunClient) SwarmUnlock(ctx context.Context, options client.SwarmUnlockOptions) (client.SwarmUnlockResult, error) {
return d.apiClient.SwarmUnlock(ctx, options)
var zero client.SwarmUnlockResult
return zero, errDryRunForbidden("SwarmUnlock")
}

func (d *DryRunClient) SwarmLeave(ctx context.Context, options client.SwarmLeaveOptions) (client.SwarmLeaveResult, error) {
return d.apiClient.SwarmLeave(ctx, options)
var zero client.SwarmLeaveResult
return zero, errDryRunForbidden("SwarmLeave")
}

func (d *DryRunClient) SwarmInspect(ctx context.Context, options client.SwarmInspectOptions) (client.SwarmInspectResult, error) {
return d.apiClient.SwarmInspect(ctx, options)
}

func (d *DryRunClient) SwarmUpdate(ctx context.Context, options client.SwarmUpdateOptions) (client.SwarmUpdateResult, error) {
return d.apiClient.SwarmUpdate(ctx, options)
var zero client.SwarmUpdateResult
return zero, errDryRunForbidden("SwarmUpdate")
}

func (d *DryRunClient) SecretList(ctx context.Context, options client.SecretListOptions) (client.SecretListResult, error) {
return d.apiClient.SecretList(ctx, options)
}

func (d *DryRunClient) SecretCreate(ctx context.Context, options client.SecretCreateOptions) (client.SecretCreateResult, error) {
return d.apiClient.SecretCreate(ctx, options)
var zero client.SecretCreateResult
return zero, errDryRunForbidden("SecretCreate")
}

func (d *DryRunClient) SecretRemove(ctx context.Context, id string, options client.SecretRemoveOptions) (client.SecretRemoveResult, error) {
return d.apiClient.SecretRemove(ctx, id, options)
var zero client.SecretRemoveResult
return zero, errDryRunForbidden("SecretRemove")
}

func (d *DryRunClient) SecretInspect(ctx context.Context, name string, options client.SecretInspectOptions) (client.SecretInspectResult, error) {
return d.apiClient.SecretInspect(ctx, name, options)
}

func (d *DryRunClient) SecretUpdate(ctx context.Context, id string, options client.SecretUpdateOptions) (client.SecretUpdateResult, error) {
return d.apiClient.SecretUpdate(ctx, id, options)
var zero client.SecretUpdateResult
return zero, errDryRunForbidden("SecretUpdate")
}

func (d *DryRunClient) Events(ctx context.Context, options client.EventsListOptions) client.EventsResult {
Expand Down Expand Up @@ -625,11 +670,13 @@ func (d *DryRunClient) VolumeList(ctx context.Context, opts client.VolumeListOpt
}

func (d *DryRunClient) VolumePrune(ctx context.Context, options client.VolumePruneOptions) (client.VolumePruneResult, error) {
return d.apiClient.VolumePrune(ctx, options)
var zero client.VolumePruneResult
return zero, errDryRunForbidden("VolumePrune")
}

func (d *DryRunClient) VolumeUpdate(ctx context.Context, volumeID string, options client.VolumeUpdateOptions) (client.VolumeUpdateResult, error) {
return d.apiClient.VolumeUpdate(ctx, volumeID, options)
var zero client.VolumeUpdateResult
return zero, errDryRunForbidden("VolumeUpdate")
}

func (d *DryRunClient) ClientVersion() string {
Expand Down Expand Up @@ -657,11 +704,13 @@ func (d *DryRunClient) Close() error {
}

func (d *DryRunClient) CheckpointCreate(ctx context.Context, container string, options client.CheckpointCreateOptions) (client.CheckpointCreateResult, error) {
return d.apiClient.CheckpointCreate(ctx, container, options)
var zero client.CheckpointCreateResult
return zero, errDryRunForbidden("CheckpointCreate")
}

func (d *DryRunClient) CheckpointRemove(ctx context.Context, container string, options client.CheckpointRemoveOptions) (client.CheckpointRemoveResult, error) {
return d.apiClient.CheckpointRemove(ctx, container, options)
var zero client.CheckpointRemoveResult
return zero, errDryRunForbidden("CheckpointRemove")
}

func (d *DryRunClient) CheckpointList(ctx context.Context, container string, options client.CheckpointListOptions) (client.CheckpointListResult, error) {
Expand Down
Loading
Loading