Skip to content

Commit 6fad6fb

Browse files
committed
remove option to do use Overwrite conflict resolution modes
1 parent f99ecd7 commit 6fad6fb

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

tools/Azure.Mcp.Tools.AzureManagedLustre/src/Commands/FileSystem/ImportJob/FileSystemImportJobCreateCommand.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,15 @@ public sealed class FileSystemImportJobCreateCommand(ILogger<FileSystemImportJob
3030

3131
public override string Title => CommandTitle;
3232

33-
public override ToolMetadata Metadata => new() { Destructive = false, ReadOnly = false };
33+
public override ToolMetadata Metadata => new()
34+
{
35+
Destructive = false,
36+
Idempotent = true,
37+
OpenWorld = true,
38+
ReadOnly = false,
39+
LocalRequired = false,
40+
Secret = false
41+
};
3442

3543
protected override void RegisterOptions(Command command)
3644
{
@@ -56,7 +64,22 @@ protected override FileSystemImportJobCreateOptions BindOptions(ParseResult pars
5664
{
5765
options.ImportPrefixes = prefixes.ToList();
5866
}
59-
options.ConflictResolutionMode = parseResult.GetValueOrDefault(_conflictResolutionModeOption) ?? "Skip";
67+
var conflictMode = parseResult.GetValueOrDefault(_conflictResolutionModeOption);
68+
if (string.IsNullOrWhiteSpace(conflictMode))
69+
{
70+
conflictMode = "Skip"; // default
71+
}
72+
else
73+
{
74+
if (!string.Equals(conflictMode, "Skip", StringComparison.OrdinalIgnoreCase) &&
75+
!string.Equals(conflictMode, "Fail", StringComparison.OrdinalIgnoreCase))
76+
{
77+
throw new ArgumentException("Azure MCP Server's Managed Lustre tooling does not support the specified conflict resolution mode. This is because the mode doesn't exist or the tool does not support potentially destructive import conflict resolution modes (overwrite variants).", nameof(_conflictResolutionModeOption));
78+
}
79+
// Normalize casing
80+
conflictMode = char.ToUpperInvariant(conflictMode[0]) + conflictMode.Substring(1).ToLowerInvariant();
81+
}
82+
options.ConflictResolutionMode = conflictMode;
6083
options.MaximumErrors = parseResult.GetValueOrDefault(_maximumErrorsOption) ?? -1;
6184
options.AdminStatus = "Active"; // Hard-coded since service no longer accepts parameter
6285
options.Name = parseResult.GetValueOrDefault(_nameOption);
@@ -80,7 +103,7 @@ public override async Task<CommandResponse> ExecuteAsync(CommandContext context,
80103
options.FileSystem!,
81104
options.Name,
82105
options.ImportPrefixes,
83-
options.ConflictResolutionMode,
106+
options.ConflictResolutionMode!,
84107
options.MaximumErrors,
85108
options.Tenant,
86109
options.RetryPolicy);

tools/Azure.Mcp.Tools.AzureManagedLustre/src/Options/AzureManagedLustreOptionDefinitions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public static class AzureManagedLustreOptionDefinitions
6767
$"--{conflictResolutionMode}"
6868
)
6969
{
70-
Description = "How to handle conflicts during import. Allowed values: OverwriteIfDirty, OverwriteAlways, Fail, Skip. Default: Skip.",
70+
Description = "How to handle conflicts during import. Allowed values: Fail, Skip. Default: Skip.",
7171
Required = false
7272
};
7373

tools/Azure.Mcp.Tools.AzureManagedLustre/tests/Azure.Mcp.Tools.AzureManagedLustre.UnitTests/FileSystem/ImportJob/FileSystemImportJobCreateCommandTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,19 @@ public async Task ExecuteAsync_ServiceThrows_GenericException_Returns500()
244244
Assert.True(response.Status >= 500);
245245
Assert.Contains("boom", response.Message, StringComparison.OrdinalIgnoreCase);
246246
}
247+
248+
[Fact]
249+
public async Task ExecuteAsync_InvalidConflictResolutionMode_ThrowsArgumentException()
250+
{
251+
var args = _commandDefinition.Parse([
252+
"--subscription", _subscription,
253+
"--resource-group", _resourceGroup,
254+
"--file-system", _fileSystem,
255+
"--conflict-resolution-mode", "OverwriteAlways"
256+
]);
257+
258+
var ex = await Assert.ThrowsAsync<ArgumentException>(async () => await _command.ExecuteAsync(_context, args));
259+
Assert.Contains("does not support", ex.Message, StringComparison.OrdinalIgnoreCase);
260+
Assert.Contains("overwrite", ex.Message, StringComparison.OrdinalIgnoreCase);
261+
}
247262
}

0 commit comments

Comments
 (0)