Skip to content

Commit d87ca96

Browse files
alex-slynkoCopilot
andcommitted
Restructure to nested policies object in database YAML
Introduce DatabasePolicies class so managed identity lives under policies.managedIdentity in YAML, making it extensible for future database-level policies. - Add DatabasePolicies model with ManagedIdentity property - Replace Database.ManagedIdentityPolicies with Database.Policies - Update DatabaseChanges, loader, tests, and demo YAML Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent c87b416 commit d87ca96

7 files changed

Lines changed: 55 additions & 32 deletions

File tree

KustoSchemaTools.Tests/DemoData/DemoDeployment/DemoDatabase/database.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ admins:
1313
- name: SPN-ADMIN
1414
id: aadapp=f678ce29-8f92-4d6e-b95d-f2ed8fa7713f;7396cfeb-2920-488f-b0bb-81a584d34a24
1515

16-
managedIdentityPolicies:
17-
- objectId: 12345678-1234-1234-1234-123456789abc
18-
allowedUsages:
19-
- NativeIngestion
20-
- ExternalTable
16+
policies:
17+
managedIdentity:
18+
- objectId: 12345678-1234-1234-1234-123456789abc
19+
allowedUsages:
20+
- NativeIngestion
21+
- ExternalTable
2122

2223
tables:
2324
sourceTable:

KustoSchemaTools.Tests/Model/ManagedIdentityPolicyTests.cs

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,15 @@ public void DatabaseChanges_WithManagedIdentityPolicies_GeneratesScript()
129129
var newState = new Database
130130
{
131131
Name = "TestDb",
132-
ManagedIdentityPolicies = new List<ManagedIdentityPolicy>
132+
Policies = new DatabasePolicies
133133
{
134-
new ManagedIdentityPolicy
134+
ManagedIdentity = new List<ManagedIdentityPolicy>
135135
{
136-
ObjectId = "12345678-1234-1234-1234-123456789abc",
137-
AllowedUsages = new List<string> { "NativeIngestion" }
136+
new ManagedIdentityPolicy
137+
{
138+
ObjectId = "12345678-1234-1234-1234-123456789abc",
139+
AllowedUsages = new List<string> { "NativeIngestion" }
140+
}
138141
}
139142
}
140143
};
@@ -161,17 +164,20 @@ public void DatabaseChanges_WithMultipleManagedIdentityPolicies_GeneratesSingleS
161164
var newState = new Database
162165
{
163166
Name = "TestDb",
164-
ManagedIdentityPolicies = new List<ManagedIdentityPolicy>
167+
Policies = new DatabasePolicies
165168
{
166-
new ManagedIdentityPolicy
169+
ManagedIdentity = new List<ManagedIdentityPolicy>
167170
{
168-
ObjectId = "aaaaaaaa-1111-2222-3333-444444444444",
169-
AllowedUsages = new List<string> { "NativeIngestion" }
170-
},
171-
new ManagedIdentityPolicy
172-
{
173-
ObjectId = "bbbbbbbb-1111-2222-3333-444444444444",
174-
AllowedUsages = new List<string> { "ExternalTable" }
171+
new ManagedIdentityPolicy
172+
{
173+
ObjectId = "aaaaaaaa-1111-2222-3333-444444444444",
174+
AllowedUsages = new List<string> { "NativeIngestion" }
175+
},
176+
new ManagedIdentityPolicy
177+
{
178+
ObjectId = "bbbbbbbb-1111-2222-3333-444444444444",
179+
AllowedUsages = new List<string> { "ExternalTable" }
180+
}
175181
}
176182
}
177183
};
@@ -202,17 +208,23 @@ public void DatabaseChanges_WithUnchangedManagedIdentityPolicies_GeneratesNoChan
202208
var oldState = new Database
203209
{
204210
Name = "TestDb",
205-
ManagedIdentityPolicies = new List<ManagedIdentityPolicy> { policy }
211+
Policies = new DatabasePolicies
212+
{
213+
ManagedIdentity = new List<ManagedIdentityPolicy> { policy }
214+
}
206215
};
207216
var newState = new Database
208217
{
209218
Name = "TestDb",
210-
ManagedIdentityPolicies = new List<ManagedIdentityPolicy>
219+
Policies = new DatabasePolicies
211220
{
212-
new ManagedIdentityPolicy
221+
ManagedIdentity = new List<ManagedIdentityPolicy>
213222
{
214-
ObjectId = "12345678-1234-1234-1234-123456789abc",
215-
AllowedUsages = new List<string> { "NativeIngestion" }
223+
new ManagedIdentityPolicy
224+
{
225+
ObjectId = "12345678-1234-1234-1234-123456789abc",
226+
AllowedUsages = new List<string> { "NativeIngestion" }
227+
}
216228
}
217229
}
218230
};

KustoSchemaTools.Tests/Parser/YamlDatabaseHandlerTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ public async Task GetDatabase()
4343
Assert.Equal("120d", tt.Policies?.Retention);
4444

4545
// Verify managed identity policies are loaded from database.yml
46-
Assert.NotNull(db.ManagedIdentityPolicies);
47-
Assert.Single(db.ManagedIdentityPolicies);
48-
var miPolicy = db.ManagedIdentityPolicies[0];
46+
Assert.NotNull(db.Policies);
47+
Assert.NotNull(db.Policies.ManagedIdentity);
48+
Assert.Single(db.Policies.ManagedIdentity);
49+
var miPolicy = db.Policies.ManagedIdentity[0];
4950
Assert.Equal("12345678-1234-1234-1234-123456789abc", miPolicy.ObjectId);
5051
Assert.Equal(2, miPolicy.AllowedUsages.Count);
5152
Assert.Contains("NativeIngestion", miPolicy.AllowedUsages);

KustoSchemaTools/Changes/DatabaseChanges.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ public static List<IChange> GenerateChanges(Database oldState, Database newState
2222
otherFromScripts.AddRange(oldState.Scripts.Select(itm => new DatabaseScriptContainer(itm, "DatabaseScript")));
2323
if (oldState.DefaultRetentionAndCache != null)
2424
otherFromScripts.AddRange(oldState.DefaultRetentionAndCache.CreateScripts(name, "database"));
25-
if (oldState.ManagedIdentityPolicies != null && oldState.ManagedIdentityPolicies.Any())
26-
otherFromScripts.Add(ManagedIdentityPolicy.CreateCombinedScript(name, oldState.ManagedIdentityPolicies));
25+
if (oldState.Policies?.ManagedIdentity != null && oldState.Policies.ManagedIdentity.Any())
26+
otherFromScripts.Add(ManagedIdentityPolicy.CreateCombinedScript(name, oldState.Policies.ManagedIdentity));
2727
}
2828

2929
var otherToScripts = new List<DatabaseScriptContainer>();
3030
if (newState.Scripts != null)
3131
otherToScripts.AddRange(newState.Scripts.Select(itm => new DatabaseScriptContainer(itm, "DatabaseScript")));
3232
if (newState.DefaultRetentionAndCache != null)
3333
otherToScripts.AddRange(newState.DefaultRetentionAndCache.CreateScripts(name, "database"));
34-
if (newState.ManagedIdentityPolicies != null && newState.ManagedIdentityPolicies.Any())
35-
otherToScripts.Add(ManagedIdentityPolicy.CreateCombinedScript(name, newState.ManagedIdentityPolicies));
34+
if (newState.Policies?.ManagedIdentity != null && newState.Policies.ManagedIdentity.Any())
35+
otherToScripts.Add(ManagedIdentityPolicy.CreateCombinedScript(name, newState.Policies.ManagedIdentity));
3636

3737
if (otherToScripts.Count > 0)
3838
{

KustoSchemaTools/Model/Database.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class Database
3737

3838
public Dictionary<string, FollowerDatabase> Followers { get; set; } = new Dictionary<string, FollowerDatabase>();
3939

40-
public List<ManagedIdentityPolicy> ManagedIdentityPolicies { get; set; } = new List<ManagedIdentityPolicy>();
40+
public DatabasePolicies Policies { get; set; } = new DatabasePolicies();
4141

4242
public string EscapedName => Name.BracketIfIdentifier();
4343
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace KustoSchemaTools.Model
2+
{
3+
public class DatabasePolicies
4+
{
5+
public List<ManagedIdentityPolicy> ManagedIdentity { get; set; } = new List<ManagedIdentityPolicy>();
6+
}
7+
}

KustoSchemaTools/Parser/KustoLoader/KustoManagedIdentityPolicyLoader.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public async Task Load(Database database, string databaseName, KustoClient kusto
1717
{
1818
var response = await kusto.Client.ExecuteQueryAsync(databaseName, script, new ClientRequestProperties());
1919
var rows = response.As<ManagedIdentityRow>();
20-
database.ManagedIdentityPolicies = rows
20+
if (database.Policies == null)
21+
database.Policies = new DatabasePolicies();
22+
database.Policies.ManagedIdentity = rows
2123
.Select(r => new ManagedIdentityPolicy
2224
{
2325
ObjectId = r.ObjectId,

0 commit comments

Comments
 (0)