Skip to content

Commit 89d36aa

Browse files
authored
introduce cordon (#1231)
* introduce cordon * clean import * force one by one
1 parent 6b34392 commit 89d36aa

File tree

7 files changed

+89
-0
lines changed

7 files changed

+89
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Json.Patch;
2+
using k8s.Models;
3+
using System.Text.Json;
4+
5+
namespace k8s.kubectl.beta;
6+
7+
public partial class AsyncKubectl
8+
{
9+
public async Task Cordon(string nodeName, CancellationToken cancellationToken = default)
10+
{
11+
await PatchNodeUnschedulable(nodeName, true, cancellationToken).ConfigureAwait(false);
12+
}
13+
14+
public async Task Uncordon(string nodeName, CancellationToken cancellationToken = default)
15+
{
16+
await PatchNodeUnschedulable(nodeName, false, cancellationToken).ConfigureAwait(false);
17+
}
18+
19+
private async Task PatchNodeUnschedulable(string nodeName, bool desired, CancellationToken cancellationToken = default)
20+
{
21+
var node = await client.CoreV1.ReadNodeAsync(nodeName, cancellationToken: cancellationToken).ConfigureAwait(false);
22+
23+
var old = JsonSerializer.SerializeToDocument(node);
24+
node.Spec.Unschedulable = desired;
25+
26+
var patch = old.CreatePatch(node);
27+
28+
await client.CoreV1.PatchNodeAsync(new V1Patch(patch, V1Patch.PatchType.JsonPatch), nodeName, cancellationToken: cancellationToken).ConfigureAwait(false);
29+
}
30+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace k8s.kubectl.beta;
2+
3+
public partial class Kubectl
4+
{
5+
public void Cordon(string nodeName)
6+
{
7+
client.Cordon(nodeName).GetAwaiter().GetResult();
8+
}
9+
10+
public void Uncordon(string nodeName)
11+
{
12+
client.Uncordon(nodeName).GetAwaiter().GetResult();
13+
}
14+
}

src/KubernetesClient.Kubectl/KubernetesClient.Kubectl.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
<RootNamespace>k8s.kubectl</RootNamespace>
88
</PropertyGroup>
99

10+
<ItemGroup>
11+
<PackageReference Include="JsonPatch.Net" Version="2.0.6" />
12+
</ItemGroup>
1013
<ItemGroup>
1114
<ProjectReference Include="..\KubernetesClient\KubernetesClient.csproj" />
1215
</ItemGroup>

tests/E2E.Tests/E2E.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
<ItemGroup>
2626
<ProjectReference Include="..\..\src\KubernetesClient\KubernetesClient.csproj" />
27+
<ProjectReference Include="..\..\src\KubernetesClient.Kubectl\KubernetesClient.Kubectl.csproj" />
2728
<ProjectReference Include="..\SkipTestLogger\SkipTestLogger.csproj" />
2829
</ItemGroup>
2930

tests/E2E.Tests/KubectlTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using k8s.kubectl.beta;
2+
using System.Linq;
3+
using Xunit;
4+
5+
namespace k8s.E2E;
6+
7+
[Collection(nameof(Onebyone))]
8+
public class KubectlTests
9+
{
10+
[MinikubeFact]
11+
public void CordonTest()
12+
{
13+
var client = MinikubeTests.CreateClient();
14+
15+
var node = client.CoreV1.ListNode().Items.First();
16+
var nodeName = node.Metadata.Name;
17+
18+
var kubectl = new Kubectl(client);
19+
20+
// cordon
21+
kubectl.Cordon(nodeName);
22+
23+
// check node status
24+
var cordonNode = client.CoreV1.ReadNode(nodeName);
25+
Assert.True(cordonNode.Spec.Unschedulable);
26+
27+
// uncordon
28+
kubectl.Uncordon(nodeName);
29+
cordonNode = client.CoreV1.ReadNode(nodeName);
30+
Assert.True(cordonNode.Spec.Unschedulable == null || cordonNode.Spec.Unschedulable == false);
31+
}
32+
}

tests/E2E.Tests/MinikubeTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
namespace k8s.E2E
2222
{
23+
[Collection(nameof(Onebyone))]
2324
public class MinikubeTests
2425
{
2526
[MinikubeFact]

tests/E2E.Tests/Onebyone.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using Xunit;
2+
3+
namespace k8s.E2E;
4+
5+
[CollectionDefinition(nameof(Onebyone), DisableParallelization = true)]
6+
public class Onebyone
7+
{
8+
}

0 commit comments

Comments
 (0)